Meine eigne DNS-Blacklist

Aus Debacher-Wiki
Wechseln zu: Navigation, Suche

Schon seit langer Zeit nutze ich auf allen Servern DNS-based Blackhole List (DNSBL) wie cbl.abuseat.org, ix.dnsbl.manitu.net und bl.spamcop.net. Mit diesen Diensten lässt sich der größte Teil der Spammails vermeiden. Leider müssen diese Anbieter recht zurückhaltend agieren und blocken die Spammer teilweise auch nur für relativ kurze Zeit. Dazu gibt es auch Mailabsender, die einfach nur nerven, wo man nicht ganz klar als Spam klassifizieren kann.

Auf alle Fälle tauchte bei mir der Wunsch auf eine eigene RBL-Liste pflegen zu können.

RBLDNSD

Nach einigen Experimenten, u.a. mit PowerDNS bin ich dann dazu übergegangen eine spezielle Software für DNSBL zu nehmen und zwar RBLDNSD von der Seite http://www.corpit.ru/mjt/rbldnsd.html . Dort habe ich mir die Datei http://www.corpit.ru/mjt/rbldnsd/rbldnsd-0.997a.tar.gz heruntergeladen, die ist zwar vom 27.07.2013 aber das scheint kein größeres Problem zu sein. Diese Datei habe ich dann heruntergeladen, entpackt und compiliert und an die richtige Stelle kopiert:

cd /tmp/
wget http://www.corpit.ru/mjt/rbldnsd/rbldnsd-0.997a.tar.gz
tar xvfz rbldnsd-0.997a.tar.gz
cd rbldnsd-0.997a
./configure
make
cp rbldnsd /usr/sbin/

Dann noch den Benutzer anlegen und sein Home-Verzeichnis einrichten

groupadd rbldns
useradd -g rbldns -d /var/lib/rbldns -r rbldns
mkdir  /var/lib/rbldns
touch /var/lib/rbldns/rbl.log
touch /var/lib/rbldns/rbl.stats
chown rbldns.rbldns /var/lib/rbldns

In diesem Paket sind aber keine weiteren Dateien zur Konfiguration vorhanden, insofern habe ich mir auch noch ein (älteres und nicht direkt nutzbares) RPM-Pkate geladen und daraus einige Dateien extrahiert:

cd /tmp/
wget http://www.corpit.ru/mjt/rbldnsd/rbldnsd-0.996a-1.i386.rpm
rpm2cpio /tmp/rbldnsd-0.996a-1.i386.rpm | cpio -idmv

Hierbei entstehen im Verzeichnis /tmp die Unterverzeichnisse etc und usr

cp etc/sysconfig/rbldnsd /etc/sysconfig/
cp etc/init.d/rbldnsd /etc/init.d/
cp usr/share/man/man8/rbldnsd.8.gz /usr/share/man/man8/
cp -a usr/share/doc/rbldnsd-0.996a /usr/share/doc/packages/

Nachtrag

Inzwischen habe ich unter http://download.opensuse.org/repositories/home:/rusjako/openSUSE_13.2/x86_64/rbldnsd-0.996c-5.1.x86_64.rpm auch eine passende Datei für OpenSuSE gefunden. Muss ich bei Gelegenheit ausprobieren.

Die Konfigurationsdatei

Die Konfiguration ist bei diesem System in /etc/sysconfig/rblnsd abgelegt. Diese Datei besteht nur aus Kommentaren mit Beispielen. Ich habe einfach meine Konfiguration angehängt.

RBLDNSD="dsbl -r /var/lib/rbldns -q -4 -b 85.214.xxx.yyy -l rbl.log -s rbl.stats -u rbldns dnsbl.zzz-server.de:ip4set:dnsbl.zzz-server.de" 

Die Parameter haben hier folgende Bedeutung:

-r Rootdir
-q Quick and Quiet Start
-4 nur IPv4 kein IPv6
-b bindet an IP-Adresse und ggf. IP-Adresse/Port (mit / und nicht :)
-l Logfile
-s Statsfile
-u User
zone:Typ:dateiname

Weitere Hinweise sind zu finden mittels

man rbldnsd

Die Zonendatei

Die eigentlichen Einträge finden sich in der Zonendatei /var/lib/rbldns/dnsbl.zzz-server.de

$SOA 300 85.214.xxx.yyy debacher@netthelp.de 0 600 300 8640 300
:127.0.0.2:Der Absender ist als Spammer aufgefallen und wird hier geblockt
192.168/16
10/8

Die erste Zeile beinhaltet den SOA-Record, mit einigen Einstellungen über die Lebensdauer der Einträge. Danach folgen Zeilen der Form:

IP-Adresse (oder Bereich):Rückmelde-IP:Text

Hier kann viel entfallen. In der ersten Zeile fehlt z.B. die IP-Adresse, es taucht nur die Rückmeldeadresse und der Text auf. Dafür steht in den folgenden Zeilen immer nur ein IP-Block oder eine IP-Adresse. Den Rest ergänzt der rbldnsd dann entsprechend.

Start des Dienstes

Der rbldnsd lässt sich nach dieser Konfiguration starten mit:

/etc/init.d/rbldnsd start

und Stoppen mit

/etc/init.d/rbldnsd stop

Lokal lässt sich das Funktionieren des Dienstes testen mittels

dig @85.214.xxx.yyy  3.1.168.192.dnsbl.zzz-server.de ANY

Es sollte sich eine Antwort ergeben, wie:

; <<>> DiG 9.9.6-P1 <<>> @85.214.xxx.yyy 3.1.168.192.dnsbl.zzz-server.de ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25921
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;3.1.168.192.dnsbl.zzz-server.de. IN   ANY

;; ANSWER SECTION:
3.1.168.192.dnsbl.zzz-server.de. 2100 IN A     127.0.0.2
3.1.168.192.dnsbl.zzz-server.de. 2100 IN TXT   "Der Absender ist als Spammer aufgefallen und wird hier geblockt"

;; Query time: 0 msec
;; SERVER: 85.214.xxx.yyy#53(85.214.xxx.yyy)
;; WHEN: Tue Aug 25 19:57:20 CEST 2015
;; MSG SIZE  rcvd: 142


Einstellungen beim Provider

Für die DNSBL haben wir nur die 3d-Level dnsbl.zzz-server.de benutzt, nicht die die komplette Domain. Damit wird es relativ einfach den eigenen Nameserver (das ist rbdnsl natürlich) für den Bereich zuständig zu machen. Beim Domain-Provider, ich benutze dafür am liebsten Domainfactory, muss man zwei Einträge vornehmen:

dns.zzz-server.de 	A 	  	85.214.xxx.yyy 	        Editieren  Löschen
dnsbl.zzz-server.de 	NS 	  	dns.zzz-server.de 	Editieren  Löschen

Der Nameserver-Eintrag (NS) muss ein Cname sein, keine IP-Adresse. Also muss man zuerst einen passenden A-Record anlegen, hier dns.zzz-server.de, der dann im NS-Record eingetragen werden kann. Nach einer gewissen Wartezeit werden dann alle Anfragen für dnsbl.zzz-server an den eigenen Nameserver weitergeleitet.

Für eine komplette Domain wäre das viel aufwändiger, man benötigt dann zwei Nameserver, die synchron gehalten werden müssen und vom Denic.de akzeptiert werden müssen. Daher bietet es sich an, wie hier beschrieben, mit einer Subdomain zu arbeiten.

Links


Honigtop

Zum Abschluss noch ein kleiner Honigtopf für Spammer: honigtopf@debacher.de