In meinem Beitrag “MagicSpam: Auto Whitelisting und Log Filter” ging es darum, wie man die eigenen Mail-Kontakte automatisch auf eine Whitelist setzen kann, so dass diese nicht versehentlich als Spam gefiltert werden. Allerdings gibt es bei dem Verfahren einen kleinen Haken: Sobald man einen Autoresponder eingeschaltet hat, landen auch andere Adressen auf der Whitelist, denn der Autoresponder antwortet gnadenlos auch auf jede Spam-Mail, die es durch den Spam-Filter schafft. Das folgende Skript löst dieses Problem.
Postfix: Autoresponder-Mails von anderen Mails unterscheiden
Damit unsere Lösung funktioniert, ist es notwendig in den Logdateien von Postfix die Autoresponder Mails von allen anderen Mails zu unterscheiden. Das geschieht mit folgendem Trick über die Betreffzeile (Subject) der Autoresponder Mails:
In Plesk wird das Subject jedes Autoresponders mit dem Zusatz “(Auto-Reply)” versehen:
Da Postfix standardmässig keine Betreffzeilen in die Logdateien schreibt, muss die Konfiguration von Postfix wie folgt angepasst werden:
Unter /etc/postfix/main.cf wird folgende Zeile angehängt:
1 |
header_checks = regexp:/etc/postfix/header_checks |
Danach erstellen wird eine neue Datei namens /etc/postfix/header_checks mit folgendem Inhalt:
1 |
/^subject:/ INFO |
Nun starten wir Postfix über folgenden Befehl neu:
1 2 |
sudo /etc/init.d/postfix restart |
Das neue Auto Whitelisting Skript für MagicSpam
Das Auto-Whitelisting Skript wird wie folgt modifiziert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#!/bin/bash # # build-magic-whitelist.sh 1.07 # # Implements MagicSpam and Spam Assassin Auto Whitelisting by # collecting recipient addresses from the Postfix log. # # Ignoring AUTORESPONDER mails requires the following Postfix modifications: # # EDIT: /etc/main.cf: # ADD: header_checks = regexp:/etc/postfix/header_checks # # CREATE: /etc/postfix/header_checks # ADD: /^subject:/ INFO # # Restart Postfix to apply above mods. # # (c)2016-2018 Harald Schneider # # Config.start # # These addresses won't be synced to Spamassassin EXCLUDE=(myname@mydomain.com myname@mydomain2.com) # Clear this, if you use a unmodified Postfix AUTORESPONDER="(Auto-Reply)" # Sync Whitelist with SpamAssassin SA_SYNC="YES" # Plesk command for adding addresses to the whitelist SA_WLIST_ADD="/usr/sbin/plesk bin spamassassin --update-server -whitelist add:" # # Config.end # Filter Postfix log # echo "Filtering Postfix Log ..." if [ $AUTORESPONDER = "" ]; then cat /var/log/maillog |grep -v "relay=local" |grep "relay=" |grep "status=sent" |perl -ne 'print lc "$1\n" if /to=<(.*?)>/' >/var/log/maillog-filtered.txt else cat /var/log/maillog |perl -MMIME::QuotedPrint=decode_qp -e 'print decode_qp join"",<>' |grep "info: header Subject:" |grep -v "Subject:.*$AUTORESPONDER" |perl -ne 'print lc "$1\n" if /to=<(.*?)>/' >/var/log/maillog-filtered.txt fi # Append existing MagicSpam Whitelist # echo "Processing MagicSpam Whitelist ..." cat /etc/magicspam/from_whitelist |awk '{print tolower($0)}' >> /var/log/maillog-filtered.txt # Filter duplicates and write back to MagicSpam Whitelist # perl -ne 'print unless $seen{$_}++' /var/log/maillog-filtered.txt > /etc/magicspam/from_whitelist rm /var/log/maillog-filtered.txt # Sync MagicSpam Whitelist to Spamassassin Whitelist. # This works in one direction only. # if [ $SA_SYNC = "YES" ]; then echo "Syncing to SpamAssasin Whitelist ..." while read LINE do if ! [[ " ${EXCLUDE[*]} " == *"${LINE}"* ]]; then # Make sure, that only valid mail addresses are processed: # if echo ${LINE}|grep '^[a-zA-Z0-9_.*-]*@[a-zA-Z0-9-]*\.[a-zA-Z0-9]*$' >/dev/null; then echo ${LINE} WLIST+=${LINE}"," fi fi done < <(cat /etc/magicspam/from_whitelist) WLIST=${WLIST::-1} ${SA_WLIST_ADD}${WLIST} fi echo "DONE!" exit 0 |
Zum Beitrag “MagicSpam: Auto Whitelisting und Log Filter”
Script wurde auf Version 1.07 geupdated.