SpamAssassin, IMAP Spam-Scanner & SPF Fail

In diesem Kapitel wollen wir mit Hilfe des IMAP Spam-Scanners isbg Empfänger auf Softfails aufmerksam machen.

Siehe: SpamAssassin & SPF Fail

Benutzer anlegen und eigene SoftFail-Konfiguration für SpamAssassin erstellen

SpamAssassin muss für die SoftFail-Konfiguration unter einem eigenen Benutzer laufen, in dessen Benutzerordner auch die Konfigurationsdatei gespeichert wird. Dazu erstellen wir einen Benutzer, z.B. spamd-softfail mit der Kommandozeile:

useradd spamd-isbg-spf

Jetzt loggen wir uns mit dem zuvor erstellten SpamAssassin Benutzer ein und erstellen das Konfigurationsverzeichnis mit:

su spamd-isbg-spf

mkdir $HOME/.spamassassin

Anschließend erstellen und editieren wir die Konfigurationsdatei mit:

vi $HOME/.spamassassin/user_prefs

Nun fügen wir noch die nächsten Zeilen ein.

# Fügt dem Betreff den angegebenen Text hinzu.
rewrite_header Subject ** Möglicher Betrug! **

# ~all ... Direktive für SoftFail
# Wenn der Sendeserver nicht im SPF-Record steht.

score SPF_SOFTFAIL 51
score SPF_HELO_SOFTFAIL 51

score HEADER_FROM_DIFFERENT_DOMAINS 51

Testen

Um unseren Spamfilter zu testen, melden wir uns mit dem SpamAssassin-Benutzer an und fügen in die SpamAssassin-Konfigurationsdatei am Anfang folgende Zeilen ein:

su spamd-isbg-spf
vi $HOME/.spamassassin/user_prefs
# Softfail Test
rawbody SOFTFAIL_TEST /spf-softfail-test/i
score SOFTFAIL_TEST 400
describe SOFTFAIL_TEST spf-softfail-yes

Zum Schluss schicken wir von einem externen Postfach eine E-Mail an unseren Server mit dem Inhalt:

"spf-softfail-test".

Sollte alles funktionieren, wird der Betreff der E-Mail nach einem Durchlauf des IMAP-Scanners automatisch umgeschrieben. Für --spambox muss hier jedoch der Posteingang (INBOX) angegeben werden.

isbg --imaphost [IMAP-Server] --imapuser [IMAP-Benutzername] --spaminbox INBOX --maxsize 1000000000 --passwdfilename $HOME/[Passwdfilename] --trackfile $HOME/[Trackfilename] --expunge --delete --lockfilename $HOME/[Lockfilename] --partialrun 10

IMAP Spam-Scanner & SPF Fail im Produktivbetrieb

Das Ausführen der Test-Befehlszeile führt leider zu dem Problem, dass erkannte Mails umgeschrieben werden und anschließend als neue Mails im Posteingang abgelegt werden. Bei jedem weiteren Durchlauf scannt und speichert der IMAP-Scanner diese zuletzt abgelegten Mails erneut (und das wieder und wieder).

Um dieses Problem zu umgehen, sollen zunächst alle eingehenden E-Mails in einen eigenen Ordner z.B. "Mails-NEU" umgeleitet werden. Ein weiteres Script verschieb bei jedem Aufruf alle E-Mails aus diesem Ordner in einen temporären Ordner z.B. Mails-TEMP-1 und scannen diesen nun nach SPF Fail Mails. Diese werden mit umgeschriebenen Betreff in einen Ordner Mails-TEMP-2 gespeichert und alle übrigen Mails werden anschließend ebenfalls von Mails-TEMP-1 nach Mails-TEMP-2 verschoben. Mails-TEMP-2 wird nun nach möglichem Spam durchsucht welche automatisch in den Ordner "Junk" verschoben werden. Alle übrig gebliebenen Mails, welche weder als Betrugsversuch noch als Spam erkannt wurden, können nun in den Posteingang (INBOX) verschoben werden.

1. Im ersten Schritt benötigen wir die drei Ornder: Mails-NEU, Mails-TEMP-1 & Mails-TEMP-2

2. Im zweiten Schritt leiten wir alle eingehenden Mails in den Ordner "Mails-NEU" um.

3. Um E-Mails verschieben zu können benötigen wir ein weiters Python-Script. Dazu erzeugen wir die Datei /bin/isbg-move.

#!/bin/python3
#
# This python script is to move mails automated from source folder to destination folder
#
# @author Christoph Kirchberger <office@it-mk.at>
#

import imaplib, sys, getopt

def main(argv):
imaphost = ''
username = ''
password = ''
inbox = ''
dest = ''
try:
opts, args = getopt.getopt(argv,"",["imaphost=","imapuser=","imappasswd=","imapinbox","destfolder"])
except getopt.GetoptError:
print ('isbg-move-ham --imaphost hostname --imapuser username --imappasswd passwd --imapinbox mbox --destfolder mbox')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('isbg-move-ham --imaphost hostname --imapuser username --imappasswd passwd --imapinbox mbox --destfolder mbox')
sys.exit()
elif opt in ("", "--imaphost"):
imaphost = arg
elif opt in ("", "--imapuser"):
username = arg
elif opt in ("", "--imappasswd"):
password = arg
elif opt in ("", "--imapinbox"):
inbox = arg
elif opt in ("", "--destfolder"):
dest = arg

if __name__ == "__main__":
main(sys.argv[1:])


parameters = sys.argv[1:]

for i in range( len(parameters)):
if (parameters[i]) == "--imaphost":
imaphost = (parameters[i+1])
if (parameters[i]) == "--imapuser":
username = (parameters[i+1])
if (parameters[i]) == "--imappasswd":
password = (parameters[i+1])
if (parameters[i]) == "--imapinbox":
inbox = (parameters[i+1])
if (parameters[i]) == "--destfolder":
dest = (parameters[i+1])
i += 1

# connect to server
m = imaplib.IMAP4_SSL(imaphost)
m.login(username, password)


# filter function
def filterMessages(mailbox, filter, newMailbox):
m.select(mailbox, readonly=False)
typ, data = m.search(None, filter)
for num in data[0].split():
typ, data = m.fetch(num, 'RFC822')
m.append (newMailbox, None, None, data[0][1])
m.store(num, '+FLAGS', '\\Deleted')
m.close()
# fire!
filterMessages(inbox, '(FROM "@")', dest)

# close connection
m.logout()

4. Wir machen die Datei ausführbar.

chmod 755 /bin/isbg-move

5. Der ganze Befehlsablauf wir in ein eigenes Bash-Script eingetragen.

mkdir scripts
vi scripts/imap-scanner-[Kontoname].sh
#!/bin/bash

hostname=[IMAP-Server]
username=[IMAP-Benutzername]
passwd=[Passwort]
spamdisbgspf=/home/spamd-isbg-spf
spamdisbgmain=/home/spamd-isbg-main
trackfile=[Trackfilename]
lockfile=[Lockfilename]

isbg-move --imaphost $hostname --imapuser $username --imappasswd $passwd --imapinbox Mails-NEU --destfolder Mails-TEMP-1

sudo -u spamd-isbg-spf isbg --imaphost $hostname --imapuser $username --imappasswd $passwd --maxsize 1000000000 --trackfile $spamdisbgspf/$trackfile --expunge --delete --lockfilename $spamdisbgspf/$lockfile --nostats --imapinbox Mails-TEMP-1 --spaminbox Mails-TEMP-2

isbg-move --imaphost $hostname --imapuser $username --imappasswd $passwd --imapinbox Mails-TEMP-1 --destfolder Mails-TEMP-2

sudo -u spamd-isbg-main isbg --imaphost $hostname --imapuser $username --imappasswd $passwd --maxsize 1000000000 --trackfile $spamdisbgmain/$trackfile --expunge --delete --lockfilename $spamdisbgmain/$lockfile --nostats --imapinbox Mails-TEMP-2 --spaminbox Junk

isbg-move --imaphost $hostname --imapuser $username --imappasswd $passwd --imapinbox Mails-TEMP-2 --destfolder INBOX

6. Zum Schluss tragen wir das Script noch in crontab ein.

0 * * * * sh $HOME/scripts/imap-scanner-[Kontoname].sh

7. Falls im Kapitel IMAP Spam-Scanner bereits ein crontab-Eintrag erstellt wurde, sollten wir diesen wieder entfernen.

su spamd-isbg-main

crontab -e

Und entfernen den entsprechenden Eintrag.

Passwortdateien aus IMAP Spam-Scanner welche nicht mehr benötigt werden, können ebenfalls gelöscht werden.

rm /home/spamd-isbg-main/[Passwdfilename]

Quellen

Mails auf IMAP Server automatisiert verschieben

http://linux-doku.de/blog/mails-auf-imap-server-automatisiert-verschieben

Script to move messages from on IMAP server to another

https://stackoverflow.com/questions/7029702/script-to-move-messages-from-one-imap-server-to-another

SPF setting does not apply to Return-Path causing more spam and phishing e-mails | Spamassassin | Postfix

https://www.lexo.ch/blog/2018/07/solved-spf-setting-does-not-apply-to-return-path-causing-more-spam-and-phishing-e-mails-spamassassin-postfix/

Kommentare

Was ist die Summe aus 6 und 5?