Spamfilteurng ist ein permanenter Kampf, in dem man seine Ansatzpunkte immer wieder neu überdenken bzw. anpassen muss.
Aktuell bin ich auf die Möglichkeit gestoßen (die es bestimmt schon länger gibt 😉 ), die Spam Filterung von amavisd-new/spamassassin anhand von Fingerprints zu verfeinern. Viele der Spam E-Mails werden von Botznetzwerken verschickt. Dies lässt sich mit p0f in die Bewertung von Spam E-Mails mit einbeziehen. P0f ist in der Lage, passive anhand der Verbindungskriterien das Betriebssystem der Gegenstelle zu bestimmen. Das Betriebssystem wiederrum ermöglicht Rückschlüsse auf die wahrscheinlichkeit das die eingehende E-Mail eine Spam E-Mail ist.
Installation von p0f
Installieren lässt sich p0f unter Debian netterweise wieder über apt-get (Ich liebe die Menge an verfügbaren Paketen)
apt-get install p0f
Start/Stop Skript
Um p0f beim booten mit den entsprechenden Parametern zu starten habe ich ein Skript unter /etc/init.d/ abgelegt welches dann über das antsprechende Runlevel gestartet wird. Anschließend muss dieses noch fürs entsprechende Runlevel verlinkt werden.
ln -s /etc/init.d/p0f.sh /etc/rc2.d/S99p0f
Amavisd-New anpassen
Nun muss der Filter noch über amavisd-new aktiviert werden. Da ich verschiedene Policies einsetzt, habe ich es in den entsprechenden Policies aktiviert.
/etc/amavis/conf.d/50-user
$policy_bank{'blog.cscholz.io'} = { [...] os_fingerprint_method => 'p0f:127.0.0.1:2345', # p0f aktivieren [...]
Spamassasin anpassen
Damit Spamassassin die E-Mail nun auch entsprechend bewerten kann, müssen wir noch die Header-Felder und Score Werte festlegen. Dazu habe ich unter /etc/spamassasin/ eine eigene Datei Namens p0f.cf angelegt.
header L_P0F_OS_WINDOWSXP X-Amavis-OS-Fingerprint =~ /^Windows XP/ score L_P0F_OS_WINDOWSXP 3.5 header L_P0F_OS_WINDOWS_OTHER X-Amavis-OS-Fingerprint =~ /^Windows(?! XP)/ score L_P0F_OS_WINDOWS_OTHER 1.7 header L_P0F_OS_UNKOWN X-Amavis-OS-Fingerprint =~ /^UNKNOWN/ score L_P0F_OS_UNKOWN 0.8 header L_P0F_OS_LINUX X-Amavis-OS-Fingerprint =~ /^Linux/ score L_P0F_OS_LINUX -0.3 header L_P0F_OS_UNIX X-Amavis-OS-Fingerprint =~ /^((Free|Open|Net)BSD)|Solaris|HP-UX|Tru64/ score L_P0F_OS_UNIX -1.0 header L_P0F_D_1_4 X-Amavis-OS-Fingerprint =~ /bdistance [1-4](?![0-9])/ score L_P0F_D_1_4 -0.7 header L_P0F_D_5_6 X-Amavis-OS-Fingerprint =~ /bdistance [5-6](?![0-9])/ score L_P0F_D_5_6 -0.5 header L_P0F_D_7_9 X-Amavis-OS-Fingerprint =~ /bdistance [7-9](?![0-9])/ score L_P0F_D_7_9 -0.3 header L_P0F_D_15_25 X-Amavis-OS-Fingerprint =~ /bdistance (1[0-5]|2[0-5])(?![0-9])/ score L_P0F_D_15_25 0.3
Nun sollte nach einem Neustart der Dienste die Bewertung anhand von Fingerprints funtkionieren. Ob dies der Fall ist, erkennt man am Header der betreffenden E-Mails.
X-Spam-Score: 10.78 X-Spam-Level: ********** X-Spam-Status: No, score=10.78 tagged_above=-100 required=14.31 tests=[HELO_DYNAMIC_DIALIN=3.995, L_P0F_D_7_9=-0.3, L_P0F_OS_WINDOWSXP=3.5, MISSING_SUBJECT=1.285, NO_REAL_NAME=1.2, RDNS_DYNAMIC=0.1, UNDISC_RECIPS=1] X-Amavis-OS-Fingerprint: Windows XP/2000 (RFC1323+, w+, tstamp-) [GENERIC] Signature: [65535:121:1:52:M1260,N,W3,N,N,S:.:Windows:?], (distance 7, link: PIX, SMC, sometimes wireless), [80.141.48.85:]
score L_P0F_OS_WINDOWSXP 3.5
header L_P0F_OS_WINDOWS_OTHER X-Amavis-OS-Fingerprint =~ /^Windows(?! XP)/
score L_P0F_OS_WINDOWS_OTHER 1.7
header L_P0F_OS_UNKOWN X-Amavis-OS-Fingerprint =~ /^UNKNOWN/
score L_P0F_OS_UNKOWN 0.8
header L_P0F_OS_LINUX X-Amavis-OS-Fingerprint =~ /^Linux/
score L_P0F_OS_LINUX -0.3
header L_P0F_OS_UNIX X-Amavis-OS-Fingerprint =~ /^((Free|Open|Net)BSD)|Solaris|HP-UX|Tru64/
score L_P0F_OS_UNIX -1.0
header L_P0F_D_1_4 X-Amavis-OS-Fingerprint =~ /bdistance [1-4](?![0-9])/
header L_P0F_D_5_6 X-Amavis-OS-Fingerprint =~ /bdistance [5-6](?![0-9])/
header L_P0F_D_7_9 X-Amavis-OS-Fingerprint =~ /bdistance [7-9](?![0-9])/
header L_P0F_D_15_25 X-Amavis-OS-Fingerprint =~ /bdistance [15-25](?![0-9])/
score L_P0F_D_1_4 -0.7
score L_P0F_D_5_6 -0.5
score L_P0F_D_7_9 -0.3
score L_P0F_D_15_25 0.3
Nachtrag 15.01.2010
Wie ich gerade gesehen habe, gibt es p0f auch als Spamassassin Plugin 😉
Nachtrag 29.07.2014
Wenn p0f in mit dem Parameter fürs Logging (-o) gestartet wird, fügte Amavisd-new bei mir kein Header-Feld mehr zur E-Mail hinzu.
2 Kommentare
Sollte wenn ich das so installiert habe und laut ‚ps -ef | grep p0f‘ das keine Tool läuft nicht auch der besagt Port offen sein?
Irgendwie funktioniert das bei meinem System nicht so ganz. Alles ist eingerichtet und läuft, aber der Port is nicht offen und im Mailheader erscheint auch nicht das gewünschte ‚X-‚ Flag…
Es müsste mit ps ein p0f Prozess zu finden sein. Hast Du das Script https://github.com/cscholz/scripts/blob/master/Linux/bash/amavisd-new/p0f/p0f-init.sh zum starten von p0f verwendet? Vergleiche nochmal die Pfade zu p0f und dem analyzer mit denen aus dem script which p0f which p0f-analyzer Da p0f einen UDP Port benutzt, kann man kein telnet benutzen um die Verbindung zu testen. Schaut doch mal bitte nach, ob der Port dennoch durch p0f belegt ist. lsof -i:2345 Gruß Christian