Website-Icon .: blog cscholz.io :.

Spamassassin: GeoIP Header Informationen

Ich habe mal wieder etwas Zeit gefunden mich mit einer weiteren Antispam Maßnahme zu beschäftigen. Der Geo-IP basierten Bewertung.
Das Verfahren ist recht simple. Die IP Adresse des einliefernden Servers wird mit einer Datenbank von IP Adressen abgeglichen,
um so den Ort des Servers zu erfahren.

Basierend auf zu erstellenden Regeln, kann dann eine E-Mail anhand der Spam Punkte auf- oder abgewertet werden. Das Verfahren setzte dabei auf
die Perl Module GEO::IP und IP::Country:Fast auf. Seit Spamassassin 3.4 ist Geo::IP fester bestandteil von Spamassassin.

Perl Module installieren

cpan -i Geo::IP IP::Country::Fast

GeoIP Datenbank installieren

Einmalig manuelle Installation

Die Geo Datenbank liegtbei Debian unter /usr/local/share/GeoIP/GeoIP.dat.

Sollte diese noch vorhanden sein, muss sie nachgeladen werden.

cd /tmp
wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
mkdir /usr/local/share/GeoIP/
mv GeoIP.dat /usr/local/share/GeoIP/

Scriptgesteuerte Installation

Für den Download der Datenbank gibt es auch ein Paket, welches ein Download Script bereitstellt.

apt-get install geoip-database-contrib

Da dieses, die GeoIP.dat jedoch unter /usr/share/GeoIP/ ablegt, muss an Softlink erstellt werden.

cd /usr/local/share/GeoIP
ln -s /usr/share/GeoIP/GeoIP.dat

Anschließend kann die GeoIP Datei heruntergeladen werden.

/usr/sbin/update-geoip-database

Diesem Spamassassin Wiki Beitrag zufolge sollte die GeoIP Datenbank von hier bezogen werden, da diese Quelle im Gegensatz zur obigen monatlich aktualisiert wird.
Zum Zeitpunkt meines Tests, war Datei aus der angegebenen Quelle jedoch auch schon 6 Monate alt.

Relay Country aktivieren

Zum aktivieren des Plugins muss lediglich eine Zeile auskommentiert werden.

/etc/spamassassin/init.pre
loadplugin Mail::SpamAssassin::Plugin::RelayCountry

Spam Regel

Ich habe dafür eine neue Datei /etc/spammassasin/70_geoip.cf erstellt.
Eine Regel zur Aufwertung und eine Regel zur Abwertung. Die ISO 3166 Länder Kürzel findet man hier.

header          RELAYCOUNTRY_GOOD X-Relay-Countries =~ /^(DE|FR)/
describe        RELAYCOUNTRY_GOOD First untrusted relay is Germany or France :-)
score           RELAYCOUNTRY_GOOD -2.0

header          RELAYCOUNTRY_BAD X-Relay-Countries =~ /^(CN|SE)/
describe        RELAYCOUNTRY_BAD First untrusted relay is China or Sweden :-)
score           RELAYCOUNTRY_BAD 2.0

Plugin prüfen

Auch wenn eine Überprüfung ohne Neustart der Dienste auskommt… schadet er auch nicht… nur um Fehler auszuschließen

/etc/init.d/spamassassin restart
/etc/init.d/amavis restart

Bevor man sich jetzt zig Test eMails zuschickt, lohnt sich ein Blick in die Spamassassin Debug Ausgabe.
Da sich diese nicht mit grep filtern lässt, einfach nach Notepad kopieren und dort nach Country suchen.
Reicht der Consolen Buffer nicht für die gesamte Ausgabe, diesen erhöhen und den Befehl erneut ausführen.

Wenn das Plugin installiert ist und läuft, sollte sich in der Ausgabe folgendes wiederfinden.

spamassassin -D --lint 2>&1 | grep -i geoip

Aug 20 21:22:52.766 [23997] dbg: plugin: loading Mail::SpamAssassin::Plugin::RelayCountry from @INC
Aug 20 21:22:52.767 [23997] dbg: metadata: RelayCountry: IPv6 support not enabled, versions Geo::IP 1.39, GeoIP C API 1.4.7 required

Auf Fehler deuten folgende Einträge hin.

failed to load 'Geo::IP', skipping: Can't locate IP/Country/Fast.pm in @INC
failed to load 'IP::Country::Fast', skipping: Can't locate IP/Country/Fast.pm in @INC

^ Perl Module nicht installiert

failed to load 'Geo::IP', skipping: Error opening /usr/local/share/GeoIP/GeoIP.dat

^ GeoIP Datenbank nicht installiert oder am falschen Ort abgespeichert.

Test E-Mail

Das ganze sieht dann in einer Test E-Mail wie folgt aus.

X-Spam-Status: No, score=-11.818 tagged_above=-100 required=12.31
 tests=[BAYES_00=-1.9, FREEMAIL_ENVFROM_END_DIGIT=0.25,
 FREEMAIL_FROM=0.001, HTML_MIME_NO_HTML_TAG=0.377,
 MIME_HTML_ONLY=0.723, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01,
 RCVD_IN_MSPIKE_WL=-0.01, RELAYCOUNTRY_GOOD=-2,
 RP_MATCHES_RCVD=-0.548, SPF_PASS=-0.001]
 autolearn=ham autolearn_force=no

E-Mail Country Header

Laut dem Spamassassin Wiki Beitrag kann ein Country Header hinzugefügt werden. Wer jedoch Spamassassin in Verbindung mit Amavis einsetzt,
wird merken, dass dies nicht funktioniert. Hintergrund ist, dass Amavis die Header in die E-Mails einfügt und nicht Spamassassin.

Ich bin jedoch hier auf eine Lösung dafür gestoßen. Die nachfolgenden Zeilen müssen in die Amavis Konfiguration kopiert werden.
In meinem Fall habe ich diese in der /etc/amavis/conf.d/50-user abgelegt. Jedoch vor der finalen Return Zeile (1;  # insure a defined return).

package Amavis::Custom;

BEGIN {
  import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
  import Amavis::Util qw(do_log untaint safe_encode safe_decode);
  import Amavis::rfc2821_2822_Tools;
  import Amavis::Notify qw(build_mime_entity);
}

sub new {
  my($class,$conn,$msginfo) = @_;
  my($self) = bless {}, $class;
  $self;  # returning an object activates further callbacks,
  # returning undef disables them
}

sub before_send {
  my($self,$conn,$msginfo) = @_;
  my($all_local) = !grep { !$_->recip_is_local }
    @{$msginfo->per_recip_data};
  if ($all_local) {
     my($hdr_edits) = $msginfo->header_edits;
     my ($rly_country) =
  $msginfo->supplementary_info('RELAYCOUNTRY');
        $hdr_edits->add_header('X-Relay-Countries', $rly_country)
                 if defined $rly_country && $rly_country ne '';
        my($languages) = $msginfo->supplementary_info('LANGUAGES');
        $hdr_edits->add_header('X-Spam-Languages', $languages)
                 if defined $languages && $languages ne '';
   }
}

Nach einem Reload von Amavis erscheint die Country Zeile dann auch im Header.

/etc/init.d/amavis restart

 

X-Relay-Countries: DE DE
X-Spam-Flag: NO
X-Spam-Score: 1.182
X-Spam-Level: *
X-Spam-Status: No, score=1.182 tagged_above=-100 required=12.31
 tests=[BAYES_00=-1.9, FREEMAIL_ENVFROM_END_DIGIT=0.25,
 FREEMAIL_FROM=0.001, HTML_MIME_NO_HTML_TAG=0.377,
 MIME_HTML_ONLY=0.723, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01,
 RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_OOSBL=5, RELAYCOUNTRY_GOOD=-2,
 RP_MATCHES_RCVD=-0.548, SPF_PASS=-0.001]
 autolearn=no autolearn_force=no
Die mobile Version verlassen