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: Wed Feb 22 23:49:59 UTC 2012

