Якщо ви працюєте з відкритим рекурсором DNS або авторитетним сервером DNS, проблема однакова, і більшість можливих рішень також однакові.
Найкраще рішення
Файли cookie DNS - це запропонований стандарт, який дає серверам DNS спосіб вимагати від клієнтів надіслати печиво, щоб довести, що IP-адреса клієнта не була підроблена. Це обійдеться в один додатковий переїзд для першого пошуку, який є найнижчим накладним витратом будь-якого рішення.
Відступ для старших клієнтів
Оскільки файли cookie DNS ще не стандартизовані, звичайно, потрібно буде підтримувати старших клієнтів зараз і на довгі роки.
Ви можете оцінювати лімітні запити від клієнтів без підтримки файлів cookie DNS. Але обмеження швидкості полегшує зловмиснику DoS для вашого DNS-сервера. Слідкуйте, що деякі сервери DNS мають функцію обмеження швидкості, розроблену лише для авторитетних DNS-серверів. Оскільки ви запитуєте про рекурсивний розв'язник, такі реалізації, що обмежують швидкість, можуть не застосовуватись до вас. Обмеження швидкості за задумом стане вузьким місцем для вашого сервера, і, таким чином, зловмисник повинен буде надіслати вам менше трафіку, щоб викликати відмову від законних запитів, ніж у нього, якби не було обмеження швидкості.
Однією з переваг обмеження швидкості є те, що у випадку, якщо зловмисник заповнить ваш DNS-сервер запитами DNS, у вас більше шансів залишитися ємність, яка дозволить вам перейти на сервер і дослідити ситуацію. Крім того, ліміти швидкості можуть бути розроблені для відхилення запитів від клієнтських IP-адрес, що надсилають багато запитів, що може бути достатньо для захисту від DoS від зловмисників, які не мають доступу до підроблених IP-адрес клієнта.
З цих причин обмеження ставки трохи нижче вашої фактичної потужності може бути хорошою ідеєю, навіть якщо це насправді не захищає від посилення.
Використання TCP
Можна змусити клієнта використовувати TCP, надіславши код помилки, який вказує на те, що відповідь занадто велика для UDP. Це має пару недоліків. Коштує два додаткові переходи. А деякі несправні клієнти цього не підтримують.
Вартість двох додаткових переходів може бути обмежена лише першим запитом, використовуючи такий підхід:
Коли IP-адресу клієнта не підтверджено, DNS-сервер може надіслати усічену відповідь, щоб змусити клієнта перейти на TCP. Урізана відповідь може бути такою ж короткою, як запит (або коротший, якщо клієнт використовує EDNS0, а відповіді немає), що виключає посилення.
Будь-який IP-клієнт, який завершує рукостискання TCP та надсилає запит DNS на з'єднання, може бути тимчасово включений у білий список. Після отримання білого списку цей IP може надсилати UDP-запити та отримувати відповіді UDP до 512 байт (4096 байт, якщо використовується EDNS0). Якщо відповідь UDP викликає повідомлення про помилку ICMP, IP знову видаляється з білого списку.
Метод також може бути відмінений за допомогою чорного списку, що означає, що клієнтські IP-адреси мають змогу здійснювати запит по UDP за замовчуванням, але будь-яке повідомлення про помилку ICMP призводить до того, що IP-адреса буде переведена в чорний список, для виходу із чорного списку потрібний запит TCP.
Растрова карта, що охоплює всі відповідні адреси IPv4, може зберігатися в 444 МБ пам'яті. IPv6-адреси потрібно було б зберігати іншим чином.
Я не знаю, чи реалізував такий підхід який-небудь сервер DNS.
Також повідомлялося, що деякі стеки TCP можуть використовуватися в атаках посилення. Однак це стосується будь-якої послуги на базі TCP, а не лише DNS. Такі вразливості слід зменшити шляхом оновлення до версії ядра, де стек TCP був виправлений, щоб не надсилати більше одного пакета у відповідь на пакет SYN.