Apakah Anda menjalankan recursor DNS terbuka atau server DNS resmi, masalahnya adalah sama dan sebagian besar solusi yang mungkin juga sama.
Solusi terbaik
Cookie DNS adalah standar yang diusulkan yang memberikan server DNS cara untuk meminta klien mengirim cookie untuk membuktikan bahwa alamat IP klien belum dipalsukan. Ini akan dikenakan biaya satu perjalanan pulang pergi tambahan untuk pencarian pertama, yang merupakan biaya overhead terendah yang bisa ditawarkan oleh solusi apa pun.
Pengembalian untuk klien yang lebih tua
Karena cookie DNS belum distandarisasi, tentu saja akan diperlukan untuk mendukung klien yang lebih tua sekarang dan untuk tahun-tahun mendatang.
Anda dapat menilai permintaan batas dari klien tanpa dukungan cookie DNS. Tetapi batas nilai memudahkan penyerang untuk melakukan DNS server DNS Anda. Berhati-hatilah karena beberapa server DNS memiliki fitur batas laju yang dirancang hanya untuk server DNS otoritatif. Karena Anda bertanya tentang penyelesai rekursif, implementasi pembatasan tarif semacam itu mungkin tidak berlaku untuk Anda. Batas nilai menurut desain akan menjadi hambatan bagi server Anda, dan dengan demikian seorang penyerang perlu mengirimkan lebih sedikit lalu lintas untuk menyebabkan permintaan sah dibatalkan daripada yang akan ia miliki jika tidak ada batas nilai.
Salah satu keuntungan dari batas nilai adalah jika penyerang membanjiri server DNS Anda dengan permintaan DNS, Anda lebih mungkin memiliki kapasitas tersisa yang akan memungkinkan Anda untuk melakukan ssh ke server dan menyelidiki situasinya. Selain itu, batas nilai dapat dirancang untuk terutama membatalkan permintaan dari IP klien yang mengirim banyak permintaan, yang mungkin cukup untuk melindungi Anda dari DoS dari penyerang yang tidak memiliki akses ke spoof IP klien.
Karena alasan itu, batas nilai sedikit di bawah kapasitas Anda yang sebenarnya mungkin merupakan ide yang baik, bahkan jika itu sebenarnya tidak melindungi terhadap amplifikasi.
Menggunakan TCP
Dimungkinkan untuk memaksa klien menggunakan TCP dengan mengirimkan kode kesalahan yang menunjukkan bahwa jawabannya terlalu besar untuk UDP. Ini memiliki beberapa kekurangan. Biayanya dua pulang pergi tambahan. Dan beberapa klien yang salah tidak mendukungnya.
Biaya dua pulang pergi tambahan dapat dibatasi hanya untuk permintaan pertama menggunakan pendekatan ini:
Ketika IP klien belum dikonfirmasi, server DNS dapat mengirim respons terpotong untuk memaksa klien untuk beralih ke TCP. Respons terpotong dapat sesingkat permintaan (atau lebih pendek jika klien menggunakan EDNS0 dan respons tidak) yang menghilangkan amplifikasi.
IP klien apa pun yang menyelesaikan jabat tangan TCP dan mengirim permintaan DNS pada koneksi dapat sementara masuk daftar putih. Setelah masuk daftar putih IP dapat mengirim permintaan UDP dan menerima tanggapan UDP hingga 512 byte (4096 byte jika menggunakan EDNS0). Jika respons UDP memicu pesan kesalahan ICMP, IP akan dihapus dari daftar putih lagi.
Metode ini juga dapat dibalik menggunakan daftar hitam, yang hanya berarti bahwa IP klien diizinkan untuk melakukan permintaan lebih dari UDP secara default tetapi pesan kesalahan ICMP menyebabkan IP menjadi daftar hitam yang memerlukan permintaan TCP untuk keluar dari daftar hitam.
Bitmap yang mencakup semua alamat IPv4 yang relevan dapat disimpan dalam memori 444MB. Alamat IPv6 harus disimpan dengan cara lain.
Saya tidak tahu apakah ada server DNS yang menerapkan pendekatan ini.
Juga telah dilaporkan bahwa beberapa tumpukan TCP dapat dieksploitasi dalam serangan amplifikasi. Namun itu berlaku untuk layanan berbasis TCP dan bukan hanya DNS. Kerentanan tersebut harus dikurangi dengan meningkatkan ke versi kernel di mana tumpukan TCP telah diperbaiki untuk tidak mengirim lebih dari satu paket sebagai tanggapan terhadap paket SYN.