Meine eigne DNS-Blacklist

Aus Debacher-Wiki
Zur Navigation springenZur Suche springen
Die Druckversion wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

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.


Nachtrag 2017

Bei Ubuntu ist die Software im Paket rbldnsd vorhanden und muss nur installiert werden.

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

Bei der Logdatei gibt es noch eine kleine Besonderheit. Die Ausgabe ist gepuffert, es kann also dauern, bis eine Anfrage hier auftaucht. Man kann also entweder den Daemon mit einem Reload veranlassen die Datei zu schreiben, oder generell vor dem Dateinamen ein + setzen, also z.B. -l +brl.log dann ist die Pufferung deaktiviert.

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@<domain>.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

Von einem beliebigen Rechner aus kann man gut gegen den Google-Dienst testen:

dig @8.8.8.8  3.1.168.192.dnsbl.zzz-server.de ANY

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.

RBLDNSD unter Ubuntu

Bei Ubuntu 16.04 ist das notwendige Paket vorhanden und kann über den Paketmanager nachinstalliert werden. Es sin nur folgende Schritte notwendig:

In der Datei /etc/default/rbldns wird die Konfiguration nach dem Muster oben erstellt.

Die Zonendatei kommt dann in das Verzeichnis /var/lib/rbldns/, so wie oben beschrieben.

Dann muss dieses Verzeichnis noch dem Benutzer übereignet werden, den Ubuntu erstellt hat:

chown -R rbldns.rbldns rbldns/

Danach wird der Dienst neu gestartet:

service rbldnsd restart

Dann muss natürlich noch die Firewall geöffnet werden.

ufw allow 53/udp

Testen kann man dann wieder von einem anderen Rechner aus mit

dig @8.8.8.8  3.1.168.192.dnsbl.zzz-server.de ANY


RBLDNSD unter Ubuntu 20.04

Die bei Ubuntu 20.04 mitgelieferte Version von RBLDNSD habe ich nicht zum Laufen bekommen. Es gab immer eine Fehlermeldung im Zusammenhang mit Sockets. Auch der Text unter /usr/share/doc/rbldnsd/README.Debian hat mich nicht wirklich weiter gebracht.

Im Changelog der 20.04 Version steht ein verdächtiger Eintrag

2019-08-29 - Marco d'Itri <md@linux.it>
rbldnsd (0.999~20180516-1) unstable; urgency=medium
* New upstream snapshot.
* Added support for systemd and socket activation.

Ich habe dann das Paket deinstalliert und das Paket der Version 18.04 installiert.

https://packages.ubuntu.com/bionic/amd64/rbldnsd/download

Das Pakte habe ich dann auf dem Server gespeichert und mittels:

dpkg -i rbldnsd_0.998b~pre1-1_amd64.deb

installiert.

Bei erneuten Startversuch gab es dann die Fehlermeldung, dass der Dienst maskiert sei. Zum Glück hatte ich so etwas schon mal gesehen, und dann also:

rm /etc/systemd/system/rbldnsd.service
rm  /etc/systemd/system/rbldnsd.socket
systemctl daemon-reload

sauberer wäre wohl

systemctl unmask rbldnsd.service
systemctl unmask rbldnsd.socket


Danach ließ sich der Dienst ganz normal starten.

Links


Honigtopf

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