plugin en perl pour amavisd

admin

admin Sat May 19 18:34:26 UTC 2012 je me suis retrouve dans l'obligation de trouver une solution autre que mimedefang pour ajouter les headers anti abuse et la geolocalisation je me suis donc adresse à la liste amavisd-users et Mark Martinec l'auteur en personne du logiciel amavisd a propose une solution simple pour les ajouts de headers dans les mails que je desirais mettre en place ceci se compose d'un plugin à ajouter à amavisd voici le code ~]# cat /etc/amavisd-custom-geoip-client.conf package Amavis::Custom; use strict; use re 'taint'; use warnings; use warnings FATAL => qw(utf8 void); no warnings qw(uninitialized redefine); BEGIN { import Amavis::Conf qw(:platform :confvars c cr ca); import Amavis::Util qw(do_log untaint min max); ...

admin

je me suis retrouve dans l’obligation de trouver une solution autre que mimedefang pour ajouter les headers anti abuse et la geolocalisation

je me suis donc adresse à la liste amavisd-users et Mark Martinec l’auteur en personne du logiciel amavisd a propose une solution simple pour les ajouts de headers dans les mails que je desirais mettre en place

ceci se compose d’un plugin à ajouter à amavisd
voici le code

~]# cat /etc/amavisd-custom-geoip-client.conf
package Amavis::Custom;
use strict;
use re ‘taint’;
use warnings;
use warnings FATAL => qw(utf8 void);
no warnings qw(uninitialized redefine);

BEGIN {
import Amavis::Conf qw(:platform :confvars c cr ca);
import Amavis::Util qw(do_log untaint min max);
import Amavis::rfc2821_2822_Tools qw(split_address parse_received);
}

sub new {
my($class,$conn,$msginfo) = @_;
my($self) = bless {}, $class;
checks_geo($self,$conn,$msginfo);
$self;
}

use Geo::IP;
sub checks_geo {
my($self,$conn,$msginfo) = @_;
if (!exists $self->{geoip}) { # first time only in a child process
my $geo_file = « /usr/share/GeoIP/GeoLiteCity.dat »;
$self->{geoip} = Geo::IP->open($geo_file, GEOIP_STANDARD);
if (!$self->{geoip}) {
do_log(0, « GeoIP: failed to open %s », $geo_file);
} else {
$self->{geoip}->set_charset(GEOIP_CHARSET_UTF8);
}
}
my($sender) = $msginfo->sender;
my($localpart,$domain) = split_address($sender);
if ($self->{geoip}) {
my $last_received_ip =
Amavis::UnmangleSender::parse_ip_address_from_received($msginfo);
my($cl_ip) = $msginfo->client_addr;
if (defined $last_received_ip && $last_received_ip ne  ») {
my($country_name,$region_name,$city);
my $record = $self->{geoip}->record_by_addr($last_received_ip);
if (!$record) {
do_log(2, « GeoIP: no record for %s », $last_received_ip);
} else {
$country_name = $record->country_name;
$region_name = $record->region_name;
$city = $record->city;
}
if (defined $cl_ip && $cl_ip ne  ») {
my($country_name_cl_ip,$region_name_cl_ip,$city_cl_ip);
my $record_cl_ip = $self->{geoip}->record_by_addr($cl_ip);
if (!$record_cl_ip) {
do_log(2, « GeoIP: no record for %s », $cl_ip);
} else {
$country_name_cl_ip = $record_cl_ip->country_name;
$region_name_cl_ip = $record_cl_ip->region_name;
$city_cl_ip = $record_cl_ip->city;
}

no strict;
do_log(2, « GeoIP: %-15s %s %s, %s, %s », $last_received_ip,
$msginfo->is_in_contents_category(CC_SPAM) ? ‘SPAM’ : ‘ ‘,
map(defined $_ && $_ ne  » ? $_ : « - »,
$country_name, $region_name, $city));
do_log(2, « GeoIP: %-15s %s %s, %s, %s », $last_received_ip,
$msginfo->is_in_contents_category(CC_SPAM) ? ‘SPAM’ : ‘ ‘,
map(defined $_ && $_ ne  » ? $_ : « - »,
$country_name_cl_ip, $region_name_cl_ip, $city_ip));
my $hdr_edits = $msginfo->header_edits;
$hdr_edits->add_header(‘X-Amavis-GeoIP’, « $country_name $region_name $city »);
$hdr_edits->add_header(‘X-Amavis-GeoIP’, « $country_name_cl_ip $region_name_cl_ip $city_cl_ip »);
$hdr_edits->add_header(‘X-Header-AntiAbuse’, « report abuse to postmaster\@fakessh.eu »);
$hdr_edits->add_header(‘X-Header-AntiAbuse’, « sender $sender $localpart $domain »);
$hdr_edits->add_header(‘X-Header-AntiAbuse’, « client addr $cl_ip »);
$hdr_edits->add_header(‘X-Header-AntiAbuse’, « client addr $last_received_ip »);
$hdr_edits->add_header(‘X-Header-AntiAbuse’, « primary hostname r13151.ovh.net »);
use strict;
}
}
}
}

1;

le code fonctionne est fait apparaitre dans le corps du mail les headers souhaites

je l’ai modifie pour faire apparaitre l’adresse des deux clients

vous pouvez bien sur utiliser ce code . il est libre

This article is copyright © by admin: Sat May 19 18:34:26 UTC 2012

Share

Leave a Comment


*


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>