Spam Bekämpfung

Ein Mailserver für mehrere Domains läuft hier unter Postfix für Linux. Die eingesetzte Version (2.3.2) unterstützt das sleep-Kommando. Mit diesem Befehl kann man RFC-konform die einzelnen Schritte beim SMTP-Dialog verzögern. Das sleep-Kommando wartet zwischen den Dialogschritten (z.B. helo, mail from, rcpt to) den konfigurierten Zeitraum ab, bevor postifx ein OK auf das angeforderte SMTP-Komanndo gibt. Einige Spambots steigen hier aus, weil sie nicht so lange warten wollen oder nicht RFC-konform programmiert sind.

In der main.cf von postfix sieht das dann so aus:
smtpd_client_restrictions =     permit_mynetworks,
				sleep 25 
smtpd_helo_restrictions =       permit_mynetworks,
				sleep 25
smtpd_sender_restrictions =     permit_mynetworks,
                                permit_sasl_authenticated,
				sleep 32
Ein Problem hierbei ist, dass die eigenen Mailversender ebenfalls in die Schlafzeit fallen, denn diese sind erst ab smtpd_sender_restrictions authentifiziert. Aus diesem Grund müssen nun noch whitelists hinzugefügt werden.
smtpd_client_restrictions =     permit_mynetworks,
				check_client_access cidr:/etc/postfix/client-access-whitelist-nosleep.cidr,
				check_client_access regexp:/etc/postfix/client-access-whitelist-nosleep.regex,
				sleep 25
In den Whitelists sind nun die gewünschten Bereiche entweder als IP-Bereich in CIDR-Notation eingetragen oder per Regular Expression auf den DNS-Namen.
Die Angabe von Whitelists muss bei jedem SMTP-Schritt neu angegeben werden, also nicht nur bei smtpd_client_restrictions sondern auch bei smtpd_helo_restrictions usw.

Viele Spambots überstehen leider den Versuch mittels sleep sie zu blocken. Aus diesem Grund werden also zusätzlich Blocklisten eingebunden, die per DNS abgefragt werden können. Hierbei wird die IP-Adresse des Clients umgekehrt und als prefix an die DNS-Abfrage vorangestellt.
Sollte also ein Zustellversuch von IP-Adresse 214.34.74.2 kommen und die Blockliste zen.spamhaus.org danach befragt werden, sieht die zugehörige DNS-Anfrage so aus:

2.74.34.214.zen.spamhaus.org

Liefert die Anfrage ein postives Ergebnis, kann der Client geblockt werden. Diesen Mechanismus hat postifx bereits eingebaut und ist somit fähig DNS-Blocklisten abzufragen.

Derzeit werden folgende DNS Blocklisten abgefragt:
  • zen.spamhaus.org
  • bl.spamcop.net
  • ix.dnsbl.manitu.net
  • wormrbl.imp.ch
  • spamrbl.imp.ch
  • socks.dnsbl.sorbs.net
  • http.dnsbl.sorbs.net
  • misc.dnsbl.sorbs.net
  • web.dnsbl.sorbs.net
  • virbl.dnsbl.bit.nl
  • korea.services.net
  • rhsbl.sorbs.net
  • bogusmx.rfc-ignorant.org
  • dsn.rfc-ignorant.org
Die letzten drei Listen sind ähnlich der IP-Blocklisten. Jedoch wird bei denen anstelle der IP-Adresse der Domainname des Senders abgefragt. Es gibt beispielsweise Domains deren MX-Record auf localhost zeigt oder die gar keinen MX-Record besitzen. Solche Sender können wir also auch blocken.
Die entsprechende main.cf sieht dann so aus: (Ausschnitt)
smtpd_recipient_restrictions =  permit_sasl_authenticated,
                                permit_mynetworks,
                                check_client_access regexp:/etc/postfix/client-access.domain.whitelist.regex,
                                check_client_access cidr:/etc/postfix/client-access-whitelist.cidr,
                                reject_unauth_destination,
                                reject_rbl_client zen.spamhaus.org,
                                reject_rbl_client bl.spamcop.net,
                                reject_rbl_client ix.dnsbl.manitu.net,
                                reject_rbl_client wormrbl.imp.ch,
                                reject_rbl_client spamrbl.imp.ch,
                                reject_rbl_client socks.dnsbl.sorbs.net,
                                reject_rbl_client http.dnsbl.sorbs.net,
                                reject_rbl_client misc.dnsbl.sorbs.net,
                                reject_rbl_client web.dnsbl.sorbs.net,
                                reject_rbl_client new.spam.dnsbl.sorbs.net,
                                reject_rbl_client virbl.dnsbl.bit.nl,
                                reject_rbl_client korea.services.net,
                                reject_rhsbl_sender rhsbl.sorbs.net,
                                reject_rhsbl_sender bogusmx.rfc-ignorant.org,
                                reject_rhsbl_sender dsn.rfc-ignorant.org,
                                reject_invalid_hostname,
                                reject_non_fqdn_hostname,
                                check_client_access cidr:/etc/postfix/client-access.cidr,
                                check_client_access regexp:/etc/postfix/client-access.domain.regex

Zusätzlich werden noch folgende Listen zur Spam-Bekämpfung benutzt:
Zumeist enthalten diese Listen Dial-Up oder IP-Pool Bereiche, von denen auch ausgegangen werden kann, dass dort keine Mail-Server betrieben werden.