Ich habe einen Nameserver, auf den öffentlich zugegriffen werden kann, da er für einige Domains der maßgebliche Nameserver ist .
Derzeit ist der Server mit gefälschten ANY
Typanforderungen für isc.org, mature.net und ähnliches überflutet (dies ist eine bekannte verteilte DoS-Attacke ).
Der Server führt BIND aus und hat allow-recursion
sich auf mein LAN eingestellt, damit diese Anfragen abgelehnt werden. In solchen Fällen antwortet der Server nur mit authority
und additional
Abschnitten, die auf die Stammserver verweisen.
Kann ich BIND so konfigurieren, dass diese Anforderungen vollständig ignoriert werden, ohne dass eine Antwort gesendet wird?
quelle
iptables -t raw -S PREROUTING
. Ausgabe:-P PREROUTING ACCEPT
gefolgt von-A PREROUTING -i eth0 -p udp -m udp --dport 53 -m string --hex-string "|01000001000000000000|" --algo kmp --from 30 --to 65535 -j DROP
. Ich habe getestet, dass es richtig funktionierthost -ar exampledomain.com dns-server.example.net
. Natürlich hat es nicht richtig funktioniert, bis ich die-r
Option hinzugefügt habe .-r
Option macht den Unterschied. Ich persönlich mag es nicht, dass einfachehost
Abfragen nicht mehr funktionieren und das kann sehr verwirrend sein. Dies ist wahrscheinlich eine gültige (bisher beste) Antwort, und ich gebe Ihnen das Kopfgeld, da es im Begriff ist, abzulaufen, auch wenn ich weiterhin meinen eigenen Ansatz durch Filtern von OUTPUT verwende.Ich würde versuchen:
Die Antworten, die Clients an die Root-Server weiterleiten, werden von der "Redirect" -Zone gesteuert. Dies sollte es sagen, nicht auf diese zu antworten.
Dies ist in den Bind9-Dokumenten angedeutet: http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
Sie können mit durch
"none"
Ihr lokales Subnetz ersetzen .Wenn Sie bereits eine
zone "."
Erklärung haben, fügenallow-query "none";
Sie diese einfach hinzu .quelle
zone "." { type hint; file "/etc/bind/db.root"; };
Deklaration mit db.root, in der die Stammserver aufgelistet sind. Das Entfernen dieser Deklaration beendet die Antwort für fremde Domains, der Server reagiert jedoch mit einem "Serverausfall" und kann daher weiterhin für DoS verwendet werden.allow-query "none";
, derzone "."
Konfiguration etwas hinzuzufügen ?Generell würde ich vorschlagen:
Aktivieren Sie Bindungsprotokolle und zeichnen Sie IPS auf, deren Antwort abgelehnt wird. Installieren Sie das fail2ban-Programm und fügen Sie eine Blackhole-Aktion hinzu: http://pastebin.com/k4BxrAeG ( fügen Sie die Regel in die Datei in /etc/fail2ban/actions.d ein)
Erstellen Sie eine Bindungsfilterdatei in /etc/fail2ban/filter.d mit so etwas (muss getestet werden!)
Editiere fail2ban.conf, füge Abschnitt hinzu:
Hoffe das wird helfen!
quelle
Grundlegende Idee: Lassen Sie Bind die DNS-Antwort als "Abgelehnt" klassifizieren und verwenden Sie dann iptables, um "Abgelehnt" in "Im Hintergrund ignoriert" zu konvertieren.
Abgelehnt ist der einfache Teil im Abschnitt named.conf options:
Oder natürlich Ihre bevorzugten ACLs für lokale Ausnahmen ...
Als nächstes magische verrückte iptables, passe "-o eth0" nach Bedarf an oder entferne es. Bei diesem Befehl wird ein Standard-20-Byte-IPv4-Schicht-Header vor UDP vorausgesetzt.
Dieser Schlüssel im Flags-Feld der DNS-Antwort enthält die folgenden gesetzten Bits
Bemerkte Protokollnachricht, die beim Debuggen bind ausgeführt wird "Fehler beim Senden der Antwort: Host nicht erreichbar", wenn die Regel übereinstimmt, um Feedback zum Testen zu erhalten.
Ich muss zugeben, dass dies alles eine etwas sinnlose Übung ist. Wenn es keine Verstärkung gibt, kann ein Angreifer genauso gut TCP SYN widerspiegeln. Letztendlich ist DNS einfach keine praktikable Lösung außer der Verwendung von TCP oder der Bereitstellung von Eastlake-DNS-Cookies.
quelle
Haben Sie versucht, die Zeichenfolge isc.org zu blockieren oder die Hex-Zeichenfolge dafür zu blockieren?
Das hat bei mir funktioniert:
quelle
iptables -A OUTPUT -p udp -m string -hex-string "|726f6f742d73657276657273|" –algo bm –to 65535 -j DROP
Ich würde jedoch eine Lösung vorziehen, die nur auf der BIND-Konfiguration basiert, sofern dies überhaupt möglich ist.'bnrexex.www.sf97.net/A/IN' 'whzpkacpxpiuycm.www.tpa.net.cn/A/IN'
Dieser Angriff wird als Amplified Denial of Service bezeichnet. Sie sollten die Bindung richtig konfigurieren, aber dieser Datenverkehr sollte nicht an erster Stelle zu Ihrer Bindung gelangen. Blockieren Sie es auf dem ersten Netzwerkgerät, das es in Ihrem Netzwerk ausführen kann. Ich hatte das gleiche Problem und behandelte es mit taubem Schnauben:
quelle
Erstens weiß ich, dass dies eine alte Frage ist, aber ...
Ich habe jahrzehntelang meinen eigenen autorisierenden, nicht rekursiven DNS-Server betrieben, war aber noch nie Opfer von DNS-basierten DDoS-Angriffen - bis jetzt, als ich zu einem neuen ISP wechselte. Tausende von gefälschten DNS-Abfragen überfluteten meine Protokolle und ich ärgerte mich sehr - nicht so sehr über die Auswirkungen auf meinen Server, sondern vielmehr über die Tatsache, dass meine Protokolle überfüllt sind und das unangenehme Gefühl, missbraucht zu werden. Es scheint, dass der Angreifer versucht, mein DNS in einem " Authoritative Name Server-Angriff " zu verwenden.
Obwohl ich rekursive Abfragen auf mein internes Netzwerk beschränke (alle anderen verweigere), verbringe ich meine CPU-Zyklen lieber damit, Zeichenfolgen in iptables abzugleichen, als negative Antworten auf die gefälschten IP-Adressen zurückzusenden (weniger Unordnung in meinen Protokollen, weniger) Netzwerkverkehr und eine höhere Zufriedenheit von mir).
Ich begann damit, wie es alle anderen zu tun scheinen , herauszufinden, welche Domainnamen abgefragt werden, und eine Zeichenfolgenübereinstimmung für diese Domain mit einem Ziel-DROP zu erstellen. Aber mir wurde schnell klar, dass ich am Ende eine Menge Regeln haben würde, die jeweils CPU-Zyklen beanspruchen. Also, was ist zu tun? Da ich keinen rekursiven Nameserver betreibe, habe ich mir vorgenommen, den Abgleich für die tatsächlichen Zonen vorzunehmen, für die ich zuständig bin, und alles andere zu löschen.
Meine Standardrichtlinie in iptables ist ACCEPT. Wenn Ihre Richtlinie DROP ist, müssen Sie möglicherweise einige Anpassungen vornehmen, wenn Sie die folgende Lösung verwenden möchten.
Ich behalte meine Zonenkonfiguration in einer separaten Datei (/etc/bind/named.conf.local), verwenden wir dies als Beispiel:
Beachten Sie den Kommentar „// Privat“ zu meinen ersten beiden Zonen. Ich verwende diesen im folgenden Skript, um sie aus der Liste der gültigen Zonen auszuschließen.
Führen Sie das obige Skript mit der Zonenkonfigurationsdatei als Argument aus.
Speichern Sie die Ausgabe in einem Skript, leiten Sie sie an eine Shell weiter oder kopieren Sie sie und fügen Sie sie in Ihr Terminal ein, um die neue Kette zu erstellen und alle ungültigen DNS-Abfragen herauszufiltern.
Führen Sie / sbin / iptables -L DNSvalidate -nvx aus , um die Paket- (und Byte-) Zähler für jede Regel in der neuen Kette anzuzeigen (möglicherweise möchten Sie die Zone mit den meisten Paketen an den Anfang der Liste verschieben, um sie effizienter zu gestalten).
In der Hoffnung, dass jemand dies nützlich finden könnte :)
quelle