Mam serwer nazw, który jest publicznie dostępny, ponieważ jest to autorytatywny serwer nazw dla kilku domen .
Obecnie serwer jest zalewany fałszywymi typami ANY
żądań dla isc.org, mature.net i podobnych (jest to znany rozproszony atak DoS ).
Serwer uruchamia BIND i allow-recursion
ustawił na moją sieć LAN, więc te żądania są odrzucane. W takich przypadkach serwer odpowiada tylko sekcjami authority
i additional
sekcjami odnoszącymi się do serwerów głównych.
Czy mogę skonfigurować BIND, aby całkowicie ignorował te żądania, bez wysyłania odpowiedzi?
źródło
iptables -t raw -S PREROUTING
. Dane wyjściowe:,-P PREROUTING ACCEPT
a następnie-A PREROUTING -i eth0 -p udp -m udp --dport 53 -m string --hex-string "|01000001000000000000|" --algo kmp --from 30 --to 65535 -j DROP
. Testowałem, czy działa poprawniehost -ar exampledomain.com dns-server.example.net
. Oczywiście nie działało to poprawnie, dopóki nie dodałem-r
opcji.-r
opcja robi różnicę. Osobiście nie podoba mi się to, że prostehost
zapytania już nie działają i może to być bardzo mylące. Jest to prawdopodobnie prawidłowa (jak dotąd najlepsza) odpowiedź i dam ci nagrodę, ponieważ wkrótce wygaśnie, nawet jeśli nadal będę stosować własne podejście, filtrując WYJŚCIE.Spróbowałbym:
Odpowiedzi kierujące klientów do serwerów głównych są kontrolowane przez strefę „przekierowania”. To powinno powiedzieć mu, żeby nie odpowiadał na nie.
Jest to wskazane w dokumentach Bind9: http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
Możesz zastąpić
"none"
swoją lokalną podsiecią.Jeśli masz już
zone "."
deklarację, po prostu dodajallow-query "none";
ją.źródło
zone "." { type hint; file "/etc/bind/db.root"; };
deklarację z db.root zawierającą listę serwerów głównych. Usunięcie tej deklaracji zatrzymuje odpowiedzi na obce domeny, ale serwer mimo to reaguje „awarią serwera” i dlatego może być nadal używany do DoS.allow-query "none";
dozone "."
konfiguracji?Ogólnie sugerowałbym:
Włącz dzienniki powiązań i zapisz IP, który zostanie odrzucony. Zainstaluj program fail2ban, dodaj akcję blackhole: http://pastebin.com/k4BxrAeG (umieść regułę w pliku w /etc/fail2ban/actions.d)
Utwórz plik filtra powiązań w /etc/fail2ban/filter.d z czymś takim (wymaga debugowania!)
Edytuj fail2ban.conf, dodaj sekcję:
Mam nadzieję, że to pomoże!
źródło
Podstawowy pomysł pozwala powiązać klasyfikację odpowiedzi DNS jako odrzuconą, a następnie użyć iptables do konwersji odrzuconej na dyskretnie ignorowaną.
Odmowa jest łatwą częścią sekcji opcji named.conf:
Lub oczywiście twoje ulubione listy ACL dla lokalnych wyjątków ...
Następnie zwariuj iptables, dostosuj lub usuń „-o eth0” w razie potrzeby. To polecenie zakłada standardowy 20-bajtowy nagłówek warstwy IPv4 przed UDP.
Ten klucz w polu flagi odpowiedzi DNS z ustawionymi następującymi bitami
Zauważyłem komunikat dziennika z uruchomionym wiązaniem podczas debugowania „błąd podczas wysyłania odpowiedzi: host nieosiągalny”, gdy reguła pasuje, aby uzyskać informacje zwrotne do testowania.
Trzeba przyznać, że jest to trochę bezcelowe ćwiczenie. Jeśli nie ma wzmocnienia, atakujący może równie łatwo odzwierciedlić TCP SYN. Ostatecznie DNS jest zepsuty, po prostu nie ma realnego rozwiązania innego niż użycie TCP lub wdrożenie plików cookie DNS firmy Eastlake.
źródło
Czy próbowałeś zablokować ciąg isc.org lub zablokować ciąg szesnastkowy?
To działało dla mnie:
źródło
iptables -A OUTPUT -p udp -m string -hex-string "|726f6f742d73657276657273|" –algo bm –to 65535 -j DROP
ale naprawdę wolałbym rozwiązanie oparte tylko na konfiguracji BIND, jeśli to w ogóle możliwe.'bnrexex.www.sf97.net/A/IN' 'whzpkacpxpiuycm.www.tpa.net.cn/A/IN'
Ten atak nazywa się Amplified Denial of Service. Powinieneś poprawnie skonfigurować powiązanie, ale ten ruch nie powinien dostać się do twojego powiązania. Zablokuj na pierwszym urządzeniu sieciowym, które może to zrobić w twojej sieci. Miałem ten sam problem i poradziłem sobie z nim z głuchą regułą prychnięcia:
źródło
Po pierwsze wiem, że to stare pytanie, ale ...
Od dziesięcioleci prowadzę własny autorytatywny, nierekurencyjny serwer DNS, ale nigdy nie padłem ofiarą ataków DDoS opartych na DNS - do tej pory, kiedy przestawiłem się na nowego dostawcę usług internetowych. Tysiące sfałszowanych zapytań DNS zalało moje logi i bardzo mnie to zirytowało - nie tyle na temat wpływu na mój serwer, co raczej zaśmiecenie moich logów i niewygodne uczucie bycia wykorzystywanym. Wygląda na to, że atakujący próbuje użyć mojego DNS w „ autorytatywnym ataku na serwer nazw ”.
Pomyślałem więc, że chociaż ograniczam zapytania rekurencyjne do mojej sieci wewnętrznej (zaprzeczając wszystkim innym), wolę spędzać cykle procesora na dopasowywaniu ciągów znaków w iptables niż wysyłaniu negatywnych odpowiedzi na sfałszowane adresy IP (mniej bałaganu w moich logach, mniej ruch w sieci i mój własny wyższy poziom satysfakcji).
Zacząłem od zrobienia tego, co wszyscy inni robią , aby dowiedzieć się, które nazwy domen są wyszukiwane, i utworzyłem ciąg znaków w tej domenie z docelowym DROP. Ale wkrótce zdałem sobie sprawę, że skończy się z ogromną ilością reguł, z których każda pochłania cykle procesora. Co więc robić? Ponieważ nie prowadzę rekurencyjnego serwera nazw, pomyślałem, że mogę dopasować rzeczywiste strefy, dla których jestem autorytatywny, i porzucić wszystko inne.
Moją domyślną polityką w iptables jest AKCEPTUJ, jeśli twoją polisą jest DROP, prawdopodobnie musisz wprowadzić pewne zmiany, jeśli chcesz skorzystać z następującego rozwiązania.
Trzymam konfigurację strefy w osobnym pliku (/etc/bind/named.conf.local), wykorzystajmy to jako przykład:
Zwróć uwagę na komentarz „// Private” do moich pierwszych dwóch stref. Korzystam z tego w poniższym skrypcie, aby wykluczyć je z listy prawidłowych stref.
Uruchom powyższy skrypt z plikiem konfiguracji strefy jako argumentem.
Zapisz dane wyjściowe w skrypcie, potokuj je do powłoki lub skopiuj i wklej w terminalu, aby utworzyć nowy łańcuch i rozpocząć filtrowanie wszystkich nieprawidłowych zapytań DNS.
uruchom / sbin / iptables -L DNSvalidate -nvx, aby zobaczyć liczniki pakietów (i bajtów) dla każdej reguły w nowym łańcuchu (możesz chcieć przenieść strefę z większością pakietów na górę listy, aby była bardziej wydajna).
Mam nadzieję, że ktoś może uznać to za przydatne :)
źródło