bind9: Loggen von Anfragen für nicht existente Namen?
bind9: Loggen von Anfragen für nicht existente Namen?
Guten Abend
Wir erhalten DNS-Attakten in Form von Anfragen für zufällige (und somit nicht existierende) Domänen-Namen wie z.B.
qE3LuA.domain.de
EvwGU.domain.de
643AFs.domain.de
Ich habe alle bind9 Logging-Kategorien auf Stufe debug 3 aktiviert und erhalte MByte-weise Logfiles - aber finde keinen Eintrag, der Abfragen für nicht existierende Namen markiert, so dass man die IP-Adressen automatisch blockieren kann.
Kenn jemand einen Weg, um diese Anfragen zu filtern?
Vielen Dank für jeden Tipp!,
Tom
Wir erhalten DNS-Attakten in Form von Anfragen für zufällige (und somit nicht existierende) Domänen-Namen wie z.B.
qE3LuA.domain.de
EvwGU.domain.de
643AFs.domain.de
Ich habe alle bind9 Logging-Kategorien auf Stufe debug 3 aktiviert und erhalte MByte-weise Logfiles - aber finde keinen Eintrag, der Abfragen für nicht existierende Namen markiert, so dass man die IP-Adressen automatisch blockieren kann.
Kenn jemand einen Weg, um diese Anfragen zu filtern?
Vielen Dank für jeden Tipp!,
Tom
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Du möchtest also abfragen Blöcken die nach einer nicht existierenden domain fragen? Aber du bzw der pc weiss doch gar nicht ob sie existieren oder nicht das findet er ja noch raus. Aber du solltest BIND so einstellen können das er nur domain eigene Sachen beantwortet und den Rest weiterleitet.. Ansonsten wäre evtl noch fail2ban ne Idee aber das kann schnell nach hinten los gehen..
Debian-Nutzer
ZABBIX Certified Specialist
ZABBIX Certified Specialist
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Aschenputtelmethode, die guten ins Töpfchen, die schlechten ins andere Log
http://www.bind9.net/arm99.pdf Chapter 6
Code: Alles auswählen
logging {
channel query.log {
file "/var/log/bind/query.log";
severity dynamic;
print-category yes;
};
channel notfoundquery.log {
file "/var/log/bind/notfoundquery.log";
severity debug 4;
print-category yes;
};
category queries { query.log; };
category query-errors { notfoundquery.log; };
}
Aber bist Du wirklich sicher, dass das ne gute Idee ist? Vertippt sich da mal einer Deiner braven User, und schon landet er auf der Blacklist ... ups.At the debug levels of 3 or higher, the same messages as those at the debug 1 level are logged for other
errors than SERVFAIL. Note that negative responses such as NXDOMAIN are not regarded as errors
here.
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Vielen Dank für Deine Antwort!, unsere Benutzer kennen unsere Domain-Namen, d.h. es gibt keinen Grund, alle paar ms nach der Auflösung eines unbekannten Namens zu fragen.Colttt hat geschrieben:Aber du bzw der pc weiss doch gar nicht ob sie existieren oder nicht das findet er ja noch raus.
Der Trick der Attacke liegt ja darin, unbekannte Namen in *unserer* Domain abzufragen, d.h. wir können diese Anfragen nicht weiterleiten. Das hat zur Folge, dass es bis zu 10s dauert, bis wir eine Antwort für einen gültigen Namen erhalten.Colttt hat geschrieben:Aber du solltest BIND so einstellen können das er nur domain eigene Sachen beantwortet und den Rest weiterleitet.. Ansonsten wäre evtl noch fail2ban ne Idee aber das kann schnell nach hinten los gehen..
Danke für den Tipp mit fail2ban!, ich hatte vor, es einzusetzen - dafür brauche ich aber Logeinträge, damit ich die Attackierer finden und blockieren kann.
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Vielen Dank für Deine ausführliche Antwort!!, ich hoffe, fail2ban so einrichten zu können, dass erst z.B. nach 100 falschen Anfragen die IP-Adresse blockiert wird - ich hoffe keiner der User versucht sich so ofteggy hat geschrieben:Aber bist Du wirklich sicher, dass das ne gute Idee ist? Vertippt sich da mal einer Deiner braven User, und schon landet er auf der Blacklist ... ups.
Ich werde Deine Log-Konfiguration gleich mal testen...
Vielen Dank und liebe Grüsse, Tom
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Nur ein Feedback fürs andere Leser:
Die nachfolgende Lösung funktioniert leider nicht: Anfragen für undefinierte Namen einer Domäne, die bind9 selber verwaltet, werden komischerweise nicht als Fehler behandelt. Ich versuchte severity debug 1 bis 4 - notfoundquery.log blieb leer, während im query.log alle paar ms Anfragen aufgezeichnet werden, die nicht aufgelöst werden können.
Die nachfolgende Lösung funktioniert leider nicht: Anfragen für undefinierte Namen einer Domäne, die bind9 selber verwaltet, werden komischerweise nicht als Fehler behandelt. Ich versuchte severity debug 1 bis 4 - notfoundquery.log blieb leer, während im query.log alle paar ms Anfragen aufgezeichnet werden, die nicht aufgelöst werden können.
Trotzdem vielen Dank!, ich habe wieder eine neue Log-Kategorie entdeckteggy hat geschrieben:Aschenputtelmethode, die guten ins Töpfchen, die schlechten ins andere LogCode: Alles auswählen
logging { channel query.log { file "/var/log/bind/query.log"; severity dynamic; print-category yes; }; channel notfoundquery.log { file "/var/log/bind/notfoundquery.log"; severity debug 4; print-category yes; }; category queries { query.log; }; category query-errors { notfoundquery.log; }; }
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Ich habs jetzt nicht weiter getestet, aber eigentlich sollte das auch "lokal" klappen. Die üblichen Stolpersteine hast Du bedacht? touch $logfile && chown bind $logfile && /etc/init.d/bind9 restart ... Oder evtl noch wo anders Logging aktiviert, das sich hiermit in die Haare kommt? Die logging Direktive darf, soweit ich mich erinnere, nur einmal vorkommen, steht im Syslog beim Dienst restart irgendwas warum da was nicht passt?
Mal darüber nachgedacht lokale und remote Anfragen zu trennen? Dann hast Du zumindest lokal (falls Dir das wichtiger sein sollte) nen "stabileren Service" (ja ändert nichts am Problem, nimmt aber evtl etwas Druck raus). Bind9x bringt n bisschen was an ACL und Ratelimits mit (Chapter 6.2.16.21, Response Rate Limiting) vielleicht hilft davon schon was?
Mal darüber nachgedacht lokale und remote Anfragen zu trennen? Dann hast Du zumindest lokal (falls Dir das wichtiger sein sollte) nen "stabileren Service" (ja ändert nichts am Problem, nimmt aber evtl etwas Druck raus). Bind9x bringt n bisschen was an ACL und Ratelimits mit (Chapter 6.2.16.21, Response Rate Limiting) vielleicht hilft davon schon was?
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Vielen Dank, eggy, für Deine Antwort und Deine Ideen!,
im query-errors Logfile hat es inzwischen Einträge, jedoch betrachtet bind9 nicht auflösbaren Namen tatsächlich nicht als Fehler - obwohl solche Anfragen in der Regel keinen Sinn machen . D.h. Anfragen für nicht definierte Namen werden mit query-erros nicht erfasst.
Ich habe den internen und externen DNS Server bereits getrennt .
Ich teste mal PowerDNS - es scheint, als hätten sie diese Art Attacke bereits im Griff.
Vielen Dank und liebe Grüsse,
Tom
im query-errors Logfile hat es inzwischen Einträge, jedoch betrachtet bind9 nicht auflösbaren Namen tatsächlich nicht als Fehler - obwohl solche Anfragen in der Regel keinen Sinn machen . D.h. Anfragen für nicht definierte Namen werden mit query-erros nicht erfasst.
Ich habe den internen und externen DNS Server bereits getrennt .
Ich teste mal PowerDNS - es scheint, als hätten sie diese Art Attacke bereits im Griff.
Vielen Dank und liebe Grüsse,
Tom
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Rate-limiting aktivieren und auf die Frequenz dieser Anfragen anpassen - ich gehe mal aus eigener Erfahrung davon aus, dass du mehrere anfragen/Sekunde bekommst, davon viele aufeinanderfolgende von der selben IP. Das wird vom Rate-limiting einwandfrei abgefangen.
Ein ausgelöstes limit erzeugt eine Fehlermeldung in den logs (auch ohne debuglevel das dir schnell die /var/log volllaufen lassen kann!!), lässt sich also sehr leicht mit fail2ban auslesen und entsprechend in eine iptables-regel umsetzen. So erstickt man auch amplification-attacken bereits im Keim und hat schnell mehrere tausend geblockte IPs in den iptables die sich schön sammeln und auswerten lassen für persistente Regeln auch an anderen Diensten/Servern! (Z.B. IPs die mehrmals und an verschiedenen Tagen auftauchen)
Falls andere Nameserver diesen hier als forwarder nutzen, können sie vom rate-limiting ausgeschlossen werden (IIRC via whitelisting möglich, ansonsten evtl einen eigenen view für die anderen NS anlegen).
Ein ausgelöstes limit erzeugt eine Fehlermeldung in den logs (auch ohne debuglevel das dir schnell die /var/log volllaufen lassen kann!!), lässt sich also sehr leicht mit fail2ban auslesen und entsprechend in eine iptables-regel umsetzen. So erstickt man auch amplification-attacken bereits im Keim und hat schnell mehrere tausend geblockte IPs in den iptables die sich schön sammeln und auswerten lassen für persistente Regeln auch an anderen Diensten/Servern! (Z.B. IPs die mehrmals und an verschiedenen Tagen auftauchen)
Falls andere Nameserver diesen hier als forwarder nutzen, können sie vom rate-limiting ausgeschlossen werden (IIRC via whitelisting möglich, ansonsten evtl einen eigenen view für die anderen NS anlegen).
Re: bind9: Loggen von Anfragen für nicht existente Namen?
Herzlichen Dank r4pt0r, für Deine ausführliche Antwort!, ich brauchte etwas Zeit für die Umsetzung - und Deine Lösung klappt sehr gut.
Fürs Protokoll: hier ist eine gute Ausgangslage zur Konfiguration bind-rate-limit und fail2ban:
http://gergernaut.de/bind-ratelimiting-fail2ban/
Vielen Dank und liebe Grüsse,
Tom
Fürs Protokoll: hier ist eine gute Ausgangslage zur Konfiguration bind-rate-limit und fail2ban:
http://gergernaut.de/bind-ratelimiting-fail2ban/
Vielen Dank und liebe Grüsse,
Tom