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:]
    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])/
    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

    1. 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…

    2. 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

    Reply To christoph Cancel Reply