Spam mit Postfix abwehren

[vgwort line=“87″ server=“vg05″ openid=“a1d5df9685fd4e43b26a1b658112611c“]

Nach dem Tipp von Daniel hat sich der tägliche Spam auf meinem Server drastisch reduziert. Heute habe ich mir die verbleibenden Mails angesehen und die Liste der smtpd_recipient_restrictions um zwei Einträge erweitert.

Zum einen kamen sehr viele Spam Mails von unbekannten Rechnern. um anderen kamen viele Mails aus Adressbereichen, die eine gültige Adressauflösung aufweisen und in keiner RBL zu stehen scheinen; nachgesehen habe ich allerdings nicht.

Server ohne Reverse-IP

Der Eintrag im Header Received: from example.com (unknown [123.234.123.234]) war ausreichend häufig, um ein paar Gedanken darüber zu verschwenden, hiergegen etwas zu unternehmen. Mit der Restriktion reject_unknown_client hoffe ich diese Eingänge zu reduzieren und frühzeitig abzuwesien.

Eintrag in main.cf

smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unknown_client,
        reject_unauth_destination,
        reject_unauth_pipelining,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_invalid_hostname,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_unknown_address,
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_unverified_recipient,
        check_client_access cidr:/etc/postfix/ip-block,
        permit

IP blacklist für postfix

Für die größten Dreckschleudern habe ich in eine eigene Blacklist ip-bock (siehe Box unten) aus dem empfangenen Spam erstellt. Da nicht davon auszugehen ist, dass ich aus diesen Adressbereichen sinnvolle E-Mails bekomme, also habe gleich ganze Class-C-Netze eingetragen, wenn mehrere Server in einem Netzbereich lagen.

Mit dem folgenden Kommando lassen sich die Einträge „Received:“ aus einer Sammlung von Spam-Mails im mbox-Format extrahieren. Die Ausgabe wird entsprechend der Syntax für die Blacklist formatiert. Manche IP-Adressen kommen mehrfach vor, da sich die Clients mit verschiedenen Namen melden.

grep -A 1 ‚^Received:‘ spam-20160209.mbox | grep -B 1 ‚mail.byggvir.de‘ | grep ‚^Received:‘ | grep -v ‚unknown‘ | sed ’s#.*from \([^ ]*\) (\([^ ]*\) .\([0-9.]*\).*#\3 REJECT \2#‘ | sort -u

In die Datei /etc/postfix/ip-block habe ich dann ausgewählte Adressbereiche aufgenommen. Hier ist Vorsicht geboten, denn im Header finden sich natürlich auch die eigenen Mail-Server und es wäre fatal, diese zu blockieren. Die Datei ip-block wird mit check_client_access cidr:/etc/postfix/ip-block in die Postfixkonfiguration (siehe Box oben) eingebunden. Dazu muss sie wie in postfix üblich nach der Erstellung und jeder Änderung mit postmap ip-block in eine Datenbank umgewandelt werden.

Datei ip-block

67.214.167.0/24 REJECT Colostore.com
69.94.157.0/24  REJECT DATANOC
84.234.221.0/24 REJECT terrahost.no
85.114.137.67   REJECT findermanze.co.ua
89.163.219.0/24 REJECT MYLOC-SUBALLOC-UGS
89.33.193.241   REJECT standing-center.com
91.92.108.0/24  REJECT TopHost LTD
95.140.39.0/24  REJECT TERATRADE-NET
198.49.66.0/24  REJECT DIMENOC
216.108.232.99  REJECT mail.kreabeat.eu

Die erste Spalte gibt die IP-Adresse an, in der zweiten Spalte steht REJECT (oder OK, falls die IP nicht geblockt werden soll) und die dritte Spalte enthält optionalen Text. Diesen nutze ich als Merker für die Quelle des Eintrags. Bei „unknown“ habe ich über whois nach der Organisation gesucht, die das Netzwerk betreibt.

Anmerkung: Natürlich ließen sich dieser Adressbereiche auch gleich komplett in der Firewall sperren.

Ich bin gespannt, wie sich die Änderungen auswirken.