Die letzten 5%
SPAM-Blocking auf der letzten Meile
Jeder gute Admin hat auf seinen Systemen verschiedene Stapel von Spam-Schutz Mechanismen eingebaut. Amavis, Spamassassin, etc. und daneben natürlich auch: Aktuelle Verschlüsselung, Zugangsbeschränkungen, automatische Blocklisten (Spamhouse und Co.), DKIM, etc. PP…
Trotzdem schaffen es einige Spammer doch immer wieder mal ihrem Müll durchzubringen. Ist nicht viel, aber den lieben Admin nerft es dann doch, weil es ihn einfach ärgert.
Was tun?
Man könnte … Nur sind die meisten Maßnahmen entweder nicht überzeugend oder einfach viel zu händisch, und Admin hasst unnötige Arbeit.
Eine Lösung
Für Postfix gibt es Blocklisten. Das sind primär einfache Textfiles, die in binäre DB überführt werden, damit Postfix sie schneller verarbeiten kann.
Dann brauchen wir noch die Spam-Domains, und die liegen sogar schon als gesammelter Spam in Spam-Ordner vor.
Muss Admin also nur noch rauspulen, einfaches Bash-Scripting reicht dafür. Beispiel für MBox-Format:
find $PATH_TO_SPAM_EMAILS -iname '*Junk*' -not -iname '*.msf' | while read F ; do grep -e 'Received: from' "${F}" ; done | awk '{print $3}' | sort | uniq -ci | sort -h
Das gibt uns dann z.B. sowas:
5 blabla.com 6 blabla.at [...] 16 bindoof.li 22 undgemein.es [...] 972 meineserver.tdl
Coool!
Klar meine Server, localhost, etc. nehmen wir über eine Filterliste noch raus und aus den übrigen Ergebnissen, alle ab einer Startzahl - die richtet sich ja nach Vorlieben aber vor allen nach Aufwand, schließlich wollen wir ja keinen sperren der da nur zufällig mal draufgeraten ist. Halt ein möglichst sinnvoller Schwellenwert.
Nun brauchen wir nur noch die Domain'en davon nach /etc/postfix/bogus_senders in der Form:
spamdomain.tdl REJECT You may a Spammer
zu schreiben und mit:
#- erzeugen der binär DB's cd /etc/postfix postmap bogus_senders rcpostfix restart #- ggf. # rcpostfix status
das Ganze zu aktivieren. Ab dann werden alle eingetragenen Domain'en von Postfix (mit genanntem Grund) abgewiesen. Und so gut sie auch waren und sich viell^Whoffentlich richtig viel Arbeit gemacht haben… Ätsch!
Der Lösung zweiter Teil
Den Prozess automatisieren. Ist, je mach Umgebung immer anders, darum nur grob beschrieben.
- Es gibt einen Ordner mit den (durchgekommenen) Spammails. Nur von Menschen erkannter (richtiger) Spam kommt da rein.
- Der wird nach $T Zeit (~=1Tag je nach Aufkommen) auf oben beschriebene Art ausgewertet.
- Aus allen Treffern werden die eingenen Domain'en ausgefiltert.
- Zusätzlich ausgefiltert wird noch die Allow-Liste, wo man z.B. Externe einträgt, die aus Umständen immer wieder zu Unrecht im Spam landen.
- Es gibt eine Last-Seen-Liste, wo alle Domains mit letztem Sichtungsdatum aufgeführt sind. Alle älteren als $TV Verfallszeit, werden gelöscht, nachdem die neuen hinzugekommen sind.
- Eventuell gibt es auch eine Deny-Liste, wo die immer zu blockierenden aufgeführt sind.
- Das Ergebnis wird entsprechend aufbereitet, in die DB geschrieben und aktiviert.
Der Lösung dritter Teil
Um das noch effektiver zu machen, braucht es: Mehr Daten!
Naja, eigentlich mehr Teilnehmer. Was ja auf manchem Hosting durchaus vorkommen soll, dass es viele, möglicherweise sogar als IMAP, betriebene Email-Konten gibt.
Dann kann Admin das nämlich auch als zentralen Spam-Drop allen Nutzern zu Verfügung stellen. (!) Achtung! Sollte gegen Automatismen möglichst gesperrt sein. Dadurch werden es mehr Treffer und in der Folge sinkt die Rate der False-Posivives, so die Schwellenwerte richtig angepasst werden.
Fazit
Alles nicht so schwer. Bildung hilft. Nachdenken auch.
Viel Spaß damit!