Niezależnie od tego, czy prowadzisz otwarty rekursor DNS, czy autorytatywny serwer DNS, problem jest taki sam, a większość możliwych rozwiązań jest również taka sama.
Najlepszym rozwiązaniem
Pliki cookie DNS to proponowany standard, który umożliwia serwerom DNS wymaganie od klientów wysłania pliku cookie w celu udowodnienia, że adres IP klienta nie został sfałszowany. Będzie to kosztowało jedną dodatkową podróż w obie strony dla pierwszego wyszukiwania, co jest najniższym kosztem, jaki może zaoferować każde rozwiązanie.
Awaryjne dla starszych klientów
Ponieważ pliki cookie DNS nie są jeszcze znormalizowane, konieczne będzie oczywiście wsparcie starszych klientów teraz i przez wiele lat.
Możesz oceniać żądania limitów od klientów bez obsługi plików cookie DNS. Jednak limity prędkości ułatwiają atakującemu wykonanie DoS twojego serwera DNS. Uwaga: niektóre serwery DNS mają funkcję ograniczenia prędkości przeznaczoną tylko dla autorytatywnych serwerów DNS. Ponieważ pytasz o rekurencyjny resolver, takie implementacje ograniczające szybkość mogą nie mieć zastosowania. Limit prędkości z założenia stanie się wąskim gardłem dla twojego serwera, dlatego atakujący będzie musiał wysłać ci mniej ruchu, aby spowodować odrzucenie uzasadnionych żądań, niż gdyby miałby to miejsce, gdyby nie było ograniczenia prędkości.
Jedną z zalet limitów prędkości jest to, że w przypadku, gdy osoba atakująca zalej Twój serwer DNS żądaniami DNS, istnieje większe prawdopodobieństwo, że pozostanie pojemność, która pozwoli ci ssh do serwera i zbadać sytuację. Dodatkowo można zaprojektować limity stawek, aby przede wszystkim usuwać żądania z adresów IP klientów wysyłających wiele żądań, co może wystarczyć do ochrony przed atakiem DoS przed atakami, którzy nie mają dostępu do fałszywych adresów IP klientów.
Z tych powodów ograniczenie prędkości nieco poniżej rzeczywistej pojemności może być dobrym pomysłem, nawet jeśli tak naprawdę nie chroni przed wzmocnieniem.
Korzystanie z TCP
Można zmusić klienta do korzystania z protokołu TCP, wysyłając kod błędu wskazujący, że odpowiedź jest zbyt duża dla protokołu UDP. Ma to kilka wad. Kosztuje dwa dodatkowe okrążenia. I niektórzy wadliwi klienci nie obsługują tego.
Koszt dwóch dodatkowych podróży w obie strony można ograniczyć tylko do pierwszego zapytania przy użyciu tego podejścia:
Gdy adres IP klienta nie zostanie potwierdzony, serwer DNS może wysłać skróconą odpowiedź, aby zmusić klienta do przełączenia się na TCP. Skrócona odpowiedź może być tak krótka jak żądanie (lub krótsza, jeśli klient używa EDNS0, a odpowiedź nie), co eliminuje wzmocnienie.
Dowolny adres IP klienta, który zakończy uzgadnianie TCP i wyśle żądanie DNS dla połączenia, może zostać tymczasowo umieszczony na białej liście. Raz na białej liście, że IP może wysyłać zapytania UDP i odbierać odpowiedzi UDP do 512 bajtów (4096 bajtów, jeśli używasz EDNS0). Jeśli odpowiedź UDP wyzwala komunikat o błędzie ICMP, adres IP jest ponownie usuwany z białej listy.
Metodę można również odwrócić za pomocą czarnej listy, co oznacza po prostu, że adresy IP klientów są domyślnie dozwolone do wysyłania zapytań przez UDP, ale każdy komunikat o błędzie ICMP powoduje, że adres IP jest na czarnej liście i wymaga zapytania TCP, aby zejść z czarnej listy.
Mapa bitowa obejmująca wszystkie istotne adresy IPv4 może być przechowywana w 444 MB pamięci. Adresy IPv6 musiałyby być przechowywane w inny sposób.
Nie wiem, czy jakikolwiek serwer DNS wdrożył to podejście.
Doniesiono również, że niektóre stosy TCP mogą być wykorzystywane w atakach wzmacniających. Dotyczy to jednak każdej usługi opartej na TCP, a nie tylko DNS. Takie luki należy ograniczyć, aktualizując do wersji jądra, w której stos TCP został naprawiony tak, aby nie wysyłał więcej niż jednego pakietu w odpowiedzi na pakiet SYN.