Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement