Unabhängig davon, ob Sie einen offenen DNS-Recursor oder einen autorisierenden DNS-Server ausführen, ist das Problem dasselbe und die meisten möglichen Lösungen sind auch gleich.
Die beste Lösung
DNS-Cookies sind ein vorgeschlagener Standard, der DNS-Servern die Möglichkeit gibt, Clients zum Senden eines Cookies aufzufordern, um nachzuweisen, dass die Client-IP-Adresse nicht gefälscht wurde. Dies kostet eine zusätzliche Hin- und Rückfahrt für die erste Suche. Dies ist der niedrigste Overhead, den eine Lösung bieten kann.
Fallback für ältere Kunden
Da DNS-Cookies noch nicht standardisiert sind, wird es natürlich notwendig sein, ältere Kunden jetzt und in den kommenden Jahren zu unterstützen.
Sie können Limitanforderungen von Clients ohne DNS-Cookie-Unterstützung bewerten. Aber Ratenbeschränkungen erleichtern es einem Angreifer, Ihren DNS-Server zu konfigurieren. Beachten Sie, dass einige DNS-Server eine Ratenbeschränkungsfunktion haben, die nur für autorisierende DNS-Server entwickelt wurde. Da Sie nach einem rekursiven Resolver fragen, sind solche Ratenbegrenzungsimplementierungen möglicherweise nicht auf Sie anwendbar. Das Ratenlimit wird automatisch zum Engpass für Ihren Server, sodass ein Angreifer weniger Datenverkehr senden muss, um legitime Anforderungen zu verwerfen, als dies ohne Ratenlimit der Fall wäre.
Ein Vorteil von Ratenbeschränkungen besteht darin, dass für den Fall, dass ein Angreifer Ihren DNS-Server mit DNS-Anfragen überflutet, mit größerer Wahrscheinlichkeit Kapazität übrig bleibt, die es Ihnen ermöglicht, SSH an den Server zu senden und die Situation zu untersuchen. Darüber hinaus können Ratenbeschränkungen so festgelegt werden, dass hauptsächlich Anforderungen von Client-IPs verworfen werden, die viele Anforderungen senden. Dies kann ausreichen, um Sie vor DoS von Angreifern zu schützen, die keinen Zugriff auf gefälschte Client-IPs haben.
Aus diesen Gründen kann eine Geschwindigkeitsbegrenzung, die etwas unter Ihrer tatsächlichen Kapazität liegt, eine gute Idee sein, auch wenn sie nicht wirklich vor Verstärkung schützt.
TCP verwenden
Sie können einen Client zur Verwendung von TCP zwingen, indem Sie einen Fehlercode senden, der angibt, dass die Antwort für UDP zu groß ist. Dies hat einige Nachteile. Es kostet zwei zusätzliche Hin- und Rückfahrten. Und einige fehlerhafte Clients unterstützen es nicht.
Mit diesem Ansatz können die Kosten für zwei zusätzliche Hin- und Rückflüge auf die erste Anforderung beschränkt werden:
Wenn die Client-IP nicht bestätigt wurde, kann der DNS-Server eine abgeschnittene Antwort senden, um den Client zu zwingen, zu TCP zu wechseln. Die gekürzte Antwort kann so kurz sein wie die Anforderung (oder kürzer, wenn der Client EDNS0 verwendet und die Antwort nicht), wodurch die Verstärkung beseitigt wird.
Jede Client-IP, die einen TCP-Handshake durchführt und eine DNS-Anfrage für die Verbindung sendet, kann vorübergehend auf die Whitelist gesetzt werden. Sobald diese IP-Adresse auf die Whitelist gesetzt wurde, kann sie UDP-Anfragen senden und UDP-Antworten mit bis zu 512 Bytes empfangen (4096 Bytes bei Verwendung von EDNS0). Wenn eine UDP-Antwort eine ICMP-Fehlermeldung auslöst, wird die IP erneut aus der Whitelist entfernt.
Die Methode kann auch mithilfe einer Blacklist umgekehrt werden. Dies bedeutet lediglich, dass Client-IPs standardmäßig über UDP abfragen dürfen. Jede ICMP-Fehlermeldung führt jedoch dazu, dass die IP auf die Blacklist gesetzt wird und eine TCP-Abfrage erforderlich ist, um von der Blacklist gestrichen zu werden.
Eine Bitmap, die alle relevanten IPv4-Adressen abdeckt, könnte in einem Speicher von 444 MB gespeichert werden. IPv6-Adressen müssten auf andere Weise gespeichert werden.
Ich weiß nicht, ob ein DNS-Server diesen Ansatz implementiert hat.
Es wurde auch berichtet, dass einige TCP-Stapel bei Amplifikationsangriffen ausgenutzt werden können. Dies gilt jedoch für jeden TCP-basierten Dienst und nicht nur für DNS. Derartige Sicherheitsanfälligkeiten sollten durch ein Upgrade auf eine Kernelversion verringert werden, bei der der TCP-Stack so repariert wurde, dass als Antwort auf ein SYN-Paket nicht mehr als ein Paket gesendet wird.