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
4 Kommentare
Herzlichen Dank für diese kurze, eindeutige und funktionierende Anleitung für die Implementierung der GeoIP in Spamassassin. Einzig, was ich noch nicht nachvollziehen kann, wenn eine Email nicht aus dem als GOOD oder BAD definierten Bereich kommt, erscheint dann der Tag RELAYCOUNTRY_GOOD // RELAYCOUNTRY_BAD gar nicht im Header der Mail? und warum wird eine Mail von Web.de nur mit RELAYCOUNTRY_GOOD getagged und nicht mit -2.00. Danke für eine Antwort.
PS: DE | FR = Deutschland & Frankreich – CN | SE = China und Schweden ^^
VG
sts
Dank für den Hinweis zu den zwei Fehlern. Wurde korrigiert. Zu Deinen Fragen:
E-Mail matched weder RELAYCOUNTRY_GOOD noch RELAYCOUNTRY_BAD
Der Header wird immer gesetzt. Es erfolgt dann allerdings keine Bewertung, siehe nachfolgend Beispiel:
Warum wird eine Mail von Web.de nur mit RELAYCOUNTRY_GOOD getagged und nicht mit -2.00.
Nachfolgend ein Header von einer Web.de E-Mail. Mit den oben dargestellten Regeln sollte eine Bewertung mit -2 erfolgen.
Im Nachfolgenden Beispiel ist die positive Bewertung auf -0,001 angepasst.
Also bei mir wir da ganz unterschiedlich gearbeitet, leider habe ich noch kein System erkannt.
X-Relay-Countries – erscheint gar nicht, X-Spam-Flag und X-Spam-Score – ebenso nicht.
Hier ein paar Beispiele :
von Moonmail Liste X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on autospam.xxxxxxxx.de
X-Spam-Level: ***
X-Spam-Status: No, score=3.6 required=5.0 tests=HTML_MESSAGE,MIME_HTML_ONLY,
MONEY_BACK,RCVD_IN_DNSWL_NONE,T_DKIM_INVALID,T_KAM_HTML_FONT_INVALID,
URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.1
von meinem Webserver: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on autospam.xxxxxxxx.de
X-Spam-Level:
X-Spam-Status: No, score=-2.0 required=5.0 tests=RELAYCOUNTRY_GOOD,
URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.1
von Booking.com: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on autospam.xxxxxxxx.de
X-Spam-Level: **
X-Spam-Status: No, score=2.2 required=5.0 tests=DATE_IN_PAST_03_06,
HTML_FONT_LOW_CONTRAST,HTML_IMAGE_RATIO_06,HTML_MESSAGE,MIME_HTML_ONLY,
T_DKIM_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.1
von Vautron (Strato) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on autospam.xxxxxxxx.de
X-Spam-Level:
X-Spam-Status: No, score=-2.0 required=5.0 tests=RCVD_IN_DNSWL_NONE,
RELAYCOUNTRY_GOOD,URIBL_BLOCKED autolearn=unavailable autolearn_force=no
version=3.4.1
Das ist jedes Mal anders. Irgend eine Idee?
PS und so sieht eine echte Spam Mail aus: