Heiko Zimmermann
SAP-Berater, System Engineer und Entwickler.

Weblog

6 December 2014, 22:40

Stop SpamJeder, der einen eigenen Mailserver betreibt, wird früher oder später das Problem antreffen, dass er Spam bekämpfen muss.

Es gibt hierbei verschiedene Ansätze, die sicher alle ihre Berechtigung haben. Man kann einerseits den Content filtern, eine sehr schöne Lösung ist hierbei DSPAN, oder man entscheidet sich für Greylisting und Blacklisting. Natürlich kann man auch mehrere Möglichkeiten kombinieren.

Letztendlich ist das allerdings auch eine Frage des Vertrauens. Beim Content-Filtern und beim Blacklisten vertraue ich auf externe Quellen. Wie "Content" schon sagt, geht es um den Inhalt der E-Mail, der mit externen Quellen abgeglichen und bewertet wird. Beim Blacklisten geht es darum, dass andere Quellen eine IP eines Mailservers als Spammer erkannt haben und diese zeitweise oder dauerhaft als "zu sperren" kennzeichnen. Beim Content kann man natürlich auch eigene Filter trainieren, die nicht auf externe Quellen zurückgreifen. Letztendlich gewinnt immer eine Kombination aus verschiedenen Möglichkeiten.

Beim Greylisten wird eine Methode verwendet, die beim Erstkontakt eines eingehenden Mailservers diesen erstmal abwehrt und ihm sagt, "ich habe einen temporären Fehler". Sprechen wir jetzt mal nicht über RFC-Spezifikationen, um das Ganze nicht zu komplizieren. Der Mailserver wird später nochmal anklopfen und erneut versuchen, zuzustellen. Wenn er das nach einer von uns eingestellten Zeit erneut versucht, erkennen wir ihn als legitim an. Wozu das Ganze? ein Spammer möchte, denn das ist seine Einnahmequelle, möglichst viele Mails in kurzer Zeit versenden. Jede ungewollte Störung kostet Ertrag und wird übergangen. Er wird also keine oder wenige neuer Zustellversuche unternehmen. So die Theorie. Letztendlich ist das ein Balance-Akt, der etwas Erfahrung und auch Experimente benötigt.

Ich selbst setze hierfür spamd von OpenBSD ein. Spamd kann sehr viel. Er übernimmt die Aufgabe des Greylistings und kann auch Blacklisting. Ich kombiniere beides. Wie schon erwähnt, eine Frage die jeder für sich selbst abwägen muss. Ich setze Blacklisten von OpenBSD/Heise ein und noch andere. Darüber hinaus gibt es ein paar echte Hardcore-Spammer. Die Firma Aquatix hat in 5 Minuten über 4 verschiedene IP's versucht, mir 30 Mails zuzustellen. Hier klappt auch kein Content-Filtern, da es heute Warnwesten und morgen Krankenversicherungen sind. Ich habe hierfür einfach alle IP-Ranges der betroffenen Firmen gesperrt und eine eigene Zusatzliste gebaut, in die ich solchen Trash packe. Es sind sehr wenige Einträge, die einem 10 Mails Müll am Tag ersparen. Bei manchen Adressen, bin ich großzügig und sperre mal das ganze Netz des "Spam-Anbieters".

Das Tolle am spamd ist, dass er einen extrem langsamen Mailserver simuliert. Ein Spammer wird bis zu 360 Sekunden gebunden und kann in dieser Zeit keine weiteren Mails, von dieser IP an andere, versenden. Je mehr es nutzen, desto mehr helfen sich gegenseitig! Auf diese Weise war Aquatix bei mir rund 70 Minuten am Tag blockiert. Seit einiger Zeit versuchen sie auch nicht mehr, mich mit Mails zu beglücken. Denn deren Admin analysieren sicher auch ihre Logfiles.

Spamd gibt es für verschiedene BSD's. OpenBSD, FreeBSD und weitere. Es ist relativ einfach einzuseten. Man konfiguriert die /etc/mail/spamd.conf (OpenBSD)

Meine sieht so aus:

all:\
        :uatraps:nixspam:banspam:spamhausdroplist:china:korea:

# University of Alberta greytrap hits.
# Addresses stay in it for 24 hours from time they misbehave.
uatraps:\
        :black:\
        :msg="Your address %A has sent mail to a ualberta.ca spamtrap\n\
        within the last 24 hours":\
        :method=http:\
        :file=www.openbsd.org/spamd/traplist.gz

# Nixspam
# Mirrored from http://www.heise.de/ix/nixspam

nixspam:\
        :black:\
        :msg="Your address %A is in the nixspam list\n\
        See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\
        :method=http:\
        :file=www.openbsd.org/spamd/nixspam.gz

spamhausdroplist:\
        :black:\
        :msg="SPAM. Your address %A is in the Spamhaus \
        drop list\n\ See http://www.spamhaus.org for more details":\
        :method=http:\
        :file=www.spamhaus.org/drop/drop.lasso:
        
# Mirrored from http://www.okean.com/chinacidr.txt
china:\
        :black:\
        :msg="SPAM. Your address %A appears to be from China\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.okean.com/chinacidr.txt:

# Mirrored from http://www.okean.com/koreacidr.txt
korea:\
        :black:\
        :msg="SPAM. Your address %A appears to be from Korea\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.okean.com/koreacidr.txt:
        
# eigene Zusatzliste
banspam:\
        :black:\
        :msg="SPAM. Your address %A is banned":\
        :method=http:\
        :file=www.bsdly.net/~peter/bsdly.net.traplist:

 

Dann muss man man natürlich noch in der /etc/pf.conf (OpenBSD) bekannt geben, dass nur die Whitelist auf den echten Mailserver zugreifen darf. Der Rest nur auf den spamd-Daemon, der einen Mailserver simuliert:

table <spamd-white> persist
pass in log on $if inet proto tcp from <spamd-white> to $if port smtp rdr-to lo0
pass in log on $if inet proto tcp from !<spamd-white> to $if port smtp divert-to lo0 port spamd

(Seit OpenBSD 5.7 current wird für spamd nun divert-to statt rdr-to verwendet)

Und man muss natürlich noch in der /etc/rc.conf.local aktivieren:

spamd_flags="-5 -G25:4:864 -h smtp.example.org -l127.0.0.1 -S12 -s1 -v -w1"
spamlogd_flags="-I -i lo0"


Mein Beitrag ist bewusst nur als Ansatz zu betrachten und nicht als Tutorial, da es je nach Betriebssystem etwas anders aussieht und auch von der eigenen Philosophie im Umgang mit Vertrauen auf externen Quellen abhängt.

Dennoch hoffe ich, einen Ansatz geliefert zu haben :)

Update: der Entwickler Peter Hansteen pflegt auch eine eigene Liste: http://www.bsdly.net/~peter/traplist.shtml