Spamassassin hat die Blacklist von
http://uribl.com/ automatisch aktiviert. Blöd nur, dass es ein Limit für Anfragen pro IP gibt. Manch einer mag sich gewundert haben, dass URIBL_BLOCKED (Anfrage wurde blockiert) immer zutrifft, obwohl der eigene Mailserver doch nur so wenig Traffic hat.
URIBL_BLOCKED ist nur eine Information für Admins, kein eigentliches Ergebnis:
ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information.
Warum trifft das oft bzw. immer zu? Die Antwort ist ganz einfach: wenn dein Server bei einem ISP mit viel Traffic steht und du seine Nameserver verwendest, übersteigen deren Anfragen ständig das Limit. Es können ja hunderte, wenn nicht tausende Mailserver im gleichen Netz die selben Nameserver verwenden.
Was tun? Leider ist die entsprechende Dokumentation auf http://wiki.apache.org/spamassassin/CachingNameserver etwas dürftig und angestaubt.
Es gibt mehrere Lösungsansätze:
- Dein Mailserver hat etwas mehr Traffic und es rentiert ein extra Dienst für Blacklists: rbldnsd (es gibt Debian Pakete aus den default Repos)
- Dein Mailserver hat wirklich wenig Mailtraffic - dnsmasq (es gibt auch dafür Debian Pakete aus den default Repos)
- UPDATE - das einfachste ist unbound als eigener Resolver (Debian: apt-get install unbound, resolv.conf anpassen, erledigt)
Ersteres macht für meinen Mailserver keinen Sinn.
Zweiteres ist für diesen Use-Case schlecht dokumentiert, aber bei Weitem die einfachste Lösung.
Und so gehts:
Schritt 1 - Paket installieren
wie üblich... apt-get install dnsmasq (Debian, Ubuntu)
Schritt 2 - dnsmasq konfigurieren
In /etc/dnsmasq.conf
resolv-file=/etc/resolv.conf.dnsmasq
server=/multi.uribl.com/54.93.83.147
server=/multi.uribl.com/54.93.185.237
Dann /etc/resolv.conf umbenennen zu /etc/resolv.conf.dnsmasq (da stehen die Nameserver des ISP drin).
Dann eine neue Datei /etc/resolv.conf erstellen mit dem Inhalt
nameserver 127.0.0.1
Das war's eigentlich schon, Problem gelöst.
Jetzt fungiert dnsmasq als lokaler DNS-Cache, was auch abgesehen von der Spamfilterung vorteilhaft sein kann.
Damit die Blacklist von uribl.com wieder funktioniert, wird für die Domain direkt deren Nameserver angegeben (server=), dnsmasq leitet die Anfragen also nicht an einen Nameserver deines ISPs weiter, sondern fragt direkt einen Nameserver von uribl.com. Deine IP hat ja nur wenige Requests.
Wie komme ich auf die zwei IPs?
host -t ns multi.uribl.com
multi.uribl.com name server hh.uribl.com.
multi.uribl.com name server cc.uribl.com.
multi.uribl.com name server bb.uribl.com.
multi.uribl.com name server dd.uribl.com.
multi.uribl.com name server ff.uribl.com.
multi.uribl.com name server gg.uribl.com.
multi.uribl.com name server ee.uribl.com.
multi.uribl.com name server aa.uribl.com.
Das sind jeweils wieder Pools.
In den Pools habe ich dann mit GeoIP die nächstgelegenen Nameserver herausgefischt, dnsmasq nimmt an dieser Stelle ja nur IPs.
Nach dem Durchstarten von dnsmasq kann getestet werden.
Du brauchst ein paar Urls aus Spammails, hier als Platzhalter "schmodder.tld".
host schmodder.tld.multi.uribl.com
Interessant sind jetzt die Antworten:
- 127.0.0.1 - da hat was nicht geklappt, deine Anfrage wird immer noch geblockt
- Host schmodder.tld.multi.uribl.com not found - es klappt, aber die URL ist nicht auf der Blacklist
- 127.0.0.2 - ist auf der URIBL_BLACK
- 127.0.0.4 - ist auf der URIBL_GREY
- 127.0.0.8 - ist auf der URIBL_RED
Auch mit spamassassin kann mit irgendeinem Testmail, am besten Spam, getestet werden:
spamassassin -D < whatevertest.eml > /dev/null
Bei unklarheiten bezüglich dnsmasq:
man dnsmasq