Ich habe keine Kommentarfunktion auf dieser Seite, aber ich antworte auf jede freundliche Mail und ich freue mich über jede Mail die mir Fehler aufzeigt, oder wie jetzt, mich darauf aufmerksam macht, daß ich ganz offensichtlich etwas total verschlafen habe….
Also hier stand eine Seite, die gezeigt hat, wie man mit Listen aus verschiedenen Quellen eine Blocklist erzeugt, mit der Bind Domains ins Nirvana umleiten kann.
Ende November 2020 ist eine dieser Quellen, malwaredomains.com, eingestellt worden und ich habe hier meine neue Präferenz, blocklistproject, eingebaut. Dort werden deutlich mehr Listen geführt, nach Schlagwörtern getrennt. Das Umschreiben in meine Blocklistdatei hat dann eine Liste mit über 800.000 Domains erzeugt, um danach in einem äusserst vollen RAM zu enden.
Wie ich hier aber auch schrieb, habe ich schon länger einen Raspberry mit Pi-Hole im Einsatz, der seine Aufgabe trotz schmalem RAM gut meistert.
Der vollständigkeithalber lasse ich die alte Seite einfach HIER stehen.
Also RPZ = Response Policy Zones
extra für diese Zwecke wohl seit Bind9 Version 9.8 eingerichtet. Inzwischen sind wir bei 9.11.
Dazu brauchen wir jetzt eine Zonendatei rpz0.db im Format:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS gateway.erstes.netz.
hier ZWEI leere Zeilen!
Dann unser altes Script im Prinzip genauso mit ein paar Änderungen:
#!/bin/bash # generate a Zone for Blocking Nameresolution HOME=/etc/bind ADLISTURL="https://blocklistproject.github.io/Lists/alt-version/ads-nl.txt" MWLISTURL="https://blocklistproject.github.io/Lists/alt-version/malware-nl.txt" PILISTURL="https://blocklistproject.github.io/Lists/alt-version/phishing-nl.txt" TRACKLISTURL="https://blocklistproject.github.io/Lists/alt-version/tracking-nl.txt" ADLISTFILE="ad-blacklist" MWLISTFILE="mw-blacklist" PILISTFILE="pi-blacklist" TRACKLISTFILE="track-blacklist" DBFILE="rpz0.db" BLFILE="blacklist" RPZFILE="rpz.db" wget -O $ADLISTFILE $ADLISTURL wget -O $MWLISTFILE $MWLISTURL wget -O $PILISTFILE $PILISTURL wget -O $TRACKLISTFILE $TRACKLISTURL awk '{ print ""$1" CNAME ." }' $ADLISTFILE $MWLISTFILE $PILISTFILE $TRACKLISTFILE | sort | uniq > $BLFILE sed -i '/\. CNAME/ d' $BLFILE sed -i '/#/ d' $BLFILE sed -i '/_/ d' $BLFILE sed -i '/>/ d' $BLFILE cp $DBFILE $RPZFILE cat $BLFILE >> $RPZFILE rm $ADLISTFILE $MWLISTFILE $PILISTFILE $TRACKLISTFILE $BLFILE
OK, was passiert:
Mit der Shebang legen wir wieder die Bash als ausführendes Organ fest.
Dann einige Variablen:
HOME= wo wird gearbeitet, bzw. wo liegen Dateien und wo werden sie erstellt.
[X]LISTURL= welche Listen wollen wir wo holen und
[X]LISTFILE= so wollen wir sie speichern
dabei ist zunächst nur die DBFILE=rpz0.db von uns vorbereitet
wget -O – holen und speichern
awk – erstellt nun aus den 4 geholten Dateien/Listen die neue Datei blacklist im Format Listeneinträge 1.Spalte ($1) plus ( CNAME .), sortiert alphabetisch ( sort ) und schmeisst doppelte Einträge raus ( uniq )
Leider ist Bind auch in dieser Konfiguration recht pingelig, was den Listenaufbau angeht, also mit sed wieder alle störenden Zeilen rausschmeissen:
sed -i ‚regex d‘ Datei
hier ein paar Zeilen wo die Domainnamen mit einem Punkt enden,
Zeilen die mit der Raute (#) anfangen, am Anfang der geholten Listen,
Domainnamen mit Unterstrich (_), findet Bind nicht gut
Zeilen die mit (>) beginnen, wo auch immer die herkommen.
Dann nehmen wir unsere Vorlage rpz0.db und kopieren die zu rpz.db ( cp ), unsere neue Zonendatei.
Dann nehmen wir den Inhalt unserer bearbeiteten und bereinigten blacklist und hängen ihn unter den vorbereiteten Teil der rpz.db ( cat >> ).
Dabei ist es wichtig, daß die rpz.db vorher mit zwei! Leerzeilen endet, damit die neue Liste nach einer Leerzeile beginnt.
Zum Schluss löschen wir alles, was wir nicht mehr brauchen ( rm )
Jetzt müssen wir Bind nur noch von der neuen Zone erzählen:
In die Datei
named.conf.options über die Zeile
listen-on port 53 {….
eine neue Zeile eintragen:
response-policy { zone „rpz“; };
In die Datei
named.conf.local
zone „rpz“ {
type master;
file „/etc/bind/rpz.db“;
};
einfügen.
Nun wird Bind einmal neugestartet und mit
cat /var/log/syslog | grep named
kontrolliert ob alle Zonen sauber eingebunden werden:
named[22153]: zone rpz/IN: sending notifies (serial 2)
Gut. Jetzt noch eine beliebige Domain aus der Liste im Browser aufrufen und keine Seite bekommen….
Wer tiefer in die Materie einsteigen möchte:
BIND9 – Configuring a DNS firewall with RPZ
next > pihole