Saya memiliki server nama yang dapat diakses publik karena itu adalah server nama resmi untuk beberapa domain .
Saat ini server dibanjiri dengan ANY
permintaan jenis palsu untuk isc.org, ripe.net dan sejenisnya (itu adalah serangan DoS terdistribusi yang dikenal ).
Server menjalankan BIND dan telah allow-recursion
diatur ke LAN saya sehingga permintaan ini ditolak. Dalam kasus seperti itu, server merespons hanya dengan authority
dan additional
bagian merujuk ke server root.
Dapatkah saya mengonfigurasi BIND sehingga benar-benar mengabaikan permintaan ini, tanpa mengirim jawaban sama sekali?
sumber
iptables -t raw -S PREROUTING
. Output:,-P PREROUTING ACCEPT
diikuti oleh-A PREROUTING -i eth0 -p udp -m udp --dport 53 -m string --hex-string "|01000001000000000000|" --algo kmp --from 30 --to 65535 -j DROP
. Saya menguji bahwa itu berfungsi dengan benarhost -ar exampledomain.com dns-server.example.net
. Tentu saja itu tidak berfungsi dengan benar sampai saya menambahkan-r
opsi.-r
opsi membuat perbedaan. Saya pribadi tidak sukahost
pertanyaan sederhana tidak berfungsi lagi dan ini bisa sangat membingungkan. Meskipun demikian, ini mungkin jawaban yang valid (terbaik sejauh ini) dan saya akan memberi Anda hadiah, karena ini akan kedaluwarsa, bahkan jika saya akan terus menggunakan pendekatan saya sendiri dengan memfilter OUTPUT.Aku akan mencoba:
Respons yang merujuk klien ke server root dikendalikan oleh zona "redirect". Ini seharusnya memberitahu itu untuk tidak membalas mereka.
Itu mengisyaratkan di dalam dokumen Bind9: http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
Anda dapat mengganti
"none"
dengan subnet lokal Anda.Jika Anda sudah memiliki
zone "."
deklarasi, cukup tambahkanallow-query "none";
.sumber
zone "." { type hint; file "/etc/bind/db.root"; };
deklarasi dengan db.root yang mencantumkan server root. Menghapus deklarasi itu berhenti lagi untuk domain asing tetapi server tetap merespons dengan "kegagalan server" dan dengan demikian masih dapat digunakan untuk DoS.allow-query "none";
kezone "."
konfigurasi?Secara umum, saya akan menyarankan:
Nyalakan bind log dan catat ips yang mendapat jawaban ditolak. Instal program fail2ban, tambahkan tindakan blackhole: http://pastebin.com/k4BxrAeG (masukkan aturan dalam file di /etc/fail2ban/actions.d)
Buat file filter bind di /etc/fail2ban/filter.d dengan sesuatu seperti ini (perlu debugging!)
Edit fail2ban.conf, tambahkan bagian:
Semoga ini bisa membantu!
sumber
Ide dasarnya, izinkan bind mengklasifikasikan respons DNS sebagai Ditolak lalu gunakan iptables untuk mengonversi Tolak menjadi diabaikan secara diam-diam.
Menolak adalah bagian yang mudah di bagian names.conf options:
Atau tentu saja ACL favorit Anda untuk pengecualian lokal ...
Selanjutnya sihir iptables gila, sesuaikan atau hapus "-o eth0" sesuai kebutuhan. Perintah ini mengasumsikan header lapisan IPv4 20 byte standar sebelum UDP.
Kunci ini pada bidang bendera respons DNS dengan bit-bit berikut ditetapkan
Pesan log pemberitahuan berjalan mengikat di debug "respons pengiriman kesalahan: host tidak dapat dijangkau" ketika aturan cocok untuk mendapatkan umpan balik untuk pengujian.
Harus mengakui ini semua adalah latihan yang agak tidak berguna. Jika tidak ada amplifikasi, penyerang bisa dengan mudah mencerminkan TCP SYN. DNS pada akhirnya dipecah hanya tidak ada solusi yang layak selain menggunakan TCP atau penyebaran cookie DNS Eastlake.
sumber
Sudahkah Anda mencoba memblokir string isc.org atau memblokir string hex untuknya?
Ini bekerja untuk saya:
sumber
iptables -A OUTPUT -p udp -m string -hex-string "|726f6f742d73657276657273|" –algo bm –to 65535 -j DROP
tapi saya benar-benar lebih suka solusi yang hanya didasarkan pada konfigurasi BIND, jika itu mungkin sama sekali.'bnrexex.www.sf97.net/A/IN' 'whzpkacpxpiuycm.www.tpa.net.cn/A/IN'
Serangan ini disebut Amplified Denial of Service. Anda harus mengonfigurasi bind dengan benar, tetapi lalu lintas itu tidak seharusnya mengikat Anda terlebih dahulu. Blokir di perangkat jaringan pertama yang mampu melakukannya di jaringan Anda. Saya memiliki masalah yang sama dan mengatasinya dengan aturan mendengus tuli:
sumber
Pertama, saya tahu ini adalah pertanyaan lama tapi ...
Saya telah menjalankan server DNS saya sendiri yang otoritatif, non rekursif, selama beberapa dekade, tetapi belum pernah menjadi korban dalam serangan DDoS berbasis DNS - sampai sekarang, ketika saya beralih ke ISP baru. Ribuan kueri DNS palsu membanjiri log saya dan saya benar-benar kesal - tidak begitu banyak tentang dampak pada server saya, melainkan fakta itu mengacaukan log saya dan perasaan tidak nyaman disalahgunakan. Tampaknya penyerang mencoba menggunakan DNS saya dalam " serangan Server Nama Resmi ".
Jadi saya pikir, meskipun saya membatasi permintaan rekursif ke jaringan internal saya (menyangkal semua lainnya), saya lebih suka menghabiskan siklus CPU saya pada pencocokan string di iptables daripada mengirim kembali tanggapan negatif ke alamat IP palsu (kurang berantakan di log saya, kurang lalu lintas jaringan dan tingkat kepuasan saya yang lebih tinggi).
Saya mulai dengan melakukan seperti yang dilakukan semua orang , mencari tahu nama domain yang ditanyakan dan membuat kecocokan string pada domain tersebut dengan DROP target. Tetapi saya segera menyadari bahwa saya akan berakhir dengan sejumlah besar aturan, masing-masing dari mereka mengkonsumsi siklus CPU. Jadi, apa yang harus dilakukan? Karena saya tidak menjalankan server nama rekursif, saya pikir saya dapat melakukan pencocokan pada zona yang sebenarnya. Saya berwenang untuk dan membuang semua yang lain.
Kebijakan default saya di iptables adalah MENERIMA, jika kebijakan Anda adalah DROP, Anda mungkin perlu melakukan beberapa penyesuaian jika Anda ingin menggunakan solusi berikut.
Saya menyimpan konfigurasi zona saya di file terpisah (/etc/bind/named.conf.local), mari kita gunakan ini sebagai contoh:
Perhatikan komentar "// Pribadi" di dua zona pertama saya, saya menggunakan ini dalam skrip berikut untuk mengecualikan mereka dari daftar zona yang valid.
Jalankan skrip di atas dengan file konfigurasi zona sebagai argumen.
Simpan output ke skrip, kirimkan ke shell atau salin dan tempel di terminal Anda untuk membuat rantai baru dan mulai filter semua permintaan DNS yang tidak valid.
jalankan / sbin / iptables -L DNSvalidate -nvx untuk melihat penghitung paket (dan byte) pada setiap aturan dalam rantai baru (Anda mungkin ingin memindahkan zona dengan sebagian besar paket ke bagian atas daftar untuk membuatnya lebih efisien).
Dengan harapan seseorang mungkin menemukan ini berguna :)
sumber