binden: Schwarzes Loch für ungültige rekursive Abfragen?

binden: Schwarzes Loch für ungültige rekursive Abfragen?

Ich habe einen Nameserver, der öffentlich zugänglich ist, da erist der autoritative Nameserver für einige Domänen.

Derzeit ist der Server überflutet mit gefälschten Typ- ANYAnfragen für isc.org, ripe.net und ähnliche (das ist einBekannter verteilter DoS-Angriff).

Der Server führt BIND aus und ist allow-recursionauf mein LAN eingestellt, so dass diese Anfragen abgelehnt werden. In solchen Fällen antwortet der Server nur mit authorityund additionalAbschnitten, die auf die Root-Server verweisen.

Kann ich BIND so konfigurieren, dass es diese Anfragen vollständig ignoriert, ohne überhaupt eine Antwort zu senden?

Antwort1

Angesichts des gleichen Problems habe ich beschlossen, alle rekursiven Anfragen zu ignorieren. Alle Resolver senden eine nicht rekursive Abfrage, wenn sie meinen Server als autoritativen Server verwenden möchten. Nur falsch konfigurierte Clients und Angreifer, wie in meinem Fall, verwenden rekursive Abfragen.

Leider habe ich keine Möglichkeit gefunden, BIND dies tun zu lassen, aber falls iptables für Sie gut genug ist, habe ich

iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
    -m string --algo kmp --from 30 \
    --hex-string "|01000001000000000000|" -j DROP

Antwort2

Ich würde versuchen:

zone "." {
  type redirect;
  allow-query "none";
}

Die Antworten, die Clients an die Root-Server verweisen, werden durch die „Redirect“-Zone gesteuert. Dies sollte bedeuten, dass auf diese nicht geantwortet werden soll.

Darauf wird in den Bind9-Dokumenten hingewiesen:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674

"none"Sie können durch Ihr lokales Subnetz ersetzen .

Sollten Sie bereits eine zone "."Erklärung haben, ergänzen Sie allow-query "none";diese einfach.

Antwort3

Haben Sie versucht, die Zeichenfolge isc.org oder die Hex-Zeichenfolge dafür zu blockieren?

Das hat bei mir funktioniert:

iptables -A INPUT -p udp -m string --hex-string "|03697363036f726700|" --algo bm -j DROP

Antwort4

Die Grundidee besteht darin, dass Bind die DNS-Antwort als abgelehnt klassifizieren und dann iptables verwenden, um die abgelehnte Antwort in eine stillschweigend ignorierte Antwort umzuwandeln.

Abgelehnt ist der einfache Teil im Optionsabschnitt von named.conf:

allow-recursion { none;};

Oder natürlich Ihre bevorzugten ACLs für lokale Ausnahmen ...

Als nächstes die verrückte iptables-Magie: Passen Sie „-o eth0“ nach Bedarf an oder entfernen Sie es. Dieser Befehl setzt einen standardmäßigen 20-Byte-IPv4-Layer-Header vor UDP voraus.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP

Dieser Schlüssel basiert auf dem Flag-Feld der DNS-Antwort mit den folgenden gesetzten Bits

  • DNS-Antwort
  • Rekursive Abfrage
  • Antwortcode abgelehnt

Beim Ausführen von Bind im Debug wurde die Protokollnachricht „Fehler beim Senden der Antwort: Host nicht erreichbar“ bemerkt, wenn die Regel übereinstimmt, um Feedback zum Testen zu erhalten.

Ich muss zugeben, dass das alles ziemlich sinnlos ist. Wenn es keine Verstärkung gibt, könnte ein Angreifer genauso gut TCP SYN reflektieren. Letztendlich ist DNS kaputt, es gibt einfach keine praktikable Lösung außer der Verwendung von TCP oder der Bereitstellung von Eastlakes DNS-Cookies.

verwandte Informationen