Episode ini membahas ancaman DNS seperti cache poisoning ala Kaminsky, spoofing, amplification DDoS, dan DNS tunneling, lalu mitigasi dengan DNS Cookies, rate limiting dan dynamic rules di dnsdist, ACL, 0x20 randomization, random source port, serta Response Policy Zones.

DNS adalah infrastruktur paling dipercaya di internet — dan justru karena itu menjadi target empuk. Sebuah server DNS yang tidak di-hardening bisa dipakai untuk meracuni jawaban, memantulkan serangan DDoS, atau menjadi saluran keluar data yang tersembunyi.
Episode 16 membedah ancaman utama DNS lalu memasang pertahanan berlapis: mulai dari perilaku daemon, kebijakan di dnsdist, hingga Response Policy Zones. Tidak ada satu senjata pamungkas — keamanan DNS adalah hasil dari banyak lapisan yang bekerja bersama.
Cache poisoning (dipopulerkan serangan Kaminsky) menyuntikkan jawaban palsu ke cache recursor. Dengan membanjiri query dan menebak ID transaksi, penyerang bisa mengarahkan pengguna ke server jahat. Spoofing bekerja dengan memalsukan paket jawaban sebelum jawaban asli tiba.
sudo tcpdump -i any port 53 -n -vv | grep -m 5 "53 >"Perhatikan port sumber pada jawaban yang masuk: port yang acak dan berbeda-beda adalah salah satu tanda 0x20 randomization bekerja.
Recursor memakai port sumber acak untuk setiap query ke upstream dan 0x20 randomization — acak besar-kecil huruf pada nama query — sehingga penyerang jauh lebih sulit menebak kombinasi yang benar:
min-pool-size: 20000
max-cache-entries: 2000000Dengan min-pool-size, Recursor menjaga kumpulan port sumber selalu cukup besar. Gabungan port acak, ID acak, dan 0x20 membuat kemungkinan berhasil menebak jawaban palsu menjadi sangat kecil.
DNS Cookies adalah mekanisme lightweight: klien mengirim cookie, server memvalidasi dan membalas dengan cookie miliknya. Server yang tidak tahu cookie tidak akan direspons. Recursor 5.4 mendukung DNS cookies, termasuk untuk koneksi outgoing:
use-dns-cookies: truednsdist membatasi kecepatan per klien dan memblokir sumber yang mencurigakan secara dinamis:
rateLimits:
- qps: 50
burst: 100
ipv4mask: 24
ipv6mask: 56rateLimits membatasi 50 query per detik per subnet. Penyerang yang melampaui batas langsung ditekan tanpa mengganggu klien normal.
dynamicRules:
- clientIP: 192.0.2.66/32
action: DropDengan dynamicRules, alamat yang jelas-jelas menyerang bisa di-drop langsung. Kombinasi keduanya menghentikan DDoS DNS di pintu gerbang.
ACL membatasi siapa yang boleh bertanya; selain itu, dnsdist memakai ecs dan validasi sumber untuk mencegah spoofed query:
dnsdist -c
showACL()
addACL("10.0.0.0/8")
quit()RPZ (Response Policy Zones) mengubah jawaban untuk domain yang masuk daftar blokir. Ini seperti firewall untuk DNS: query ke domain malware diarahkan ke NXDOMAIN atau alamat sinkhole.
rpz-file:
- path: /etc/powerdns/rpz.block
zone: rpz.internal
maxTtl: 3600Dengan rpz-file, Recursor memuat daftar domain berbahaya. Saat ada query ke domain dalam daftar, jawaban diubah sesuai policy — pengguna dicegah mengaksesnya tanpa menyadari.
dig @127.0.0.1 malware.example.com A +shortJika malware.example.com ada di daftar RPZ, jawabannya berubah menjadi NXDOMAIN atau alamat sinkhole, bukan IP asli.
Satu lapisan tidak cukup. Gabungkan semuanya:
ACL di recursor dan dnsdist
random source port + 0x20 randomization
DNS cookies aktif
rate limiting di dnsdist
dynamic block rules untuk sumber agresif
RPZ untuk domain berbahaya
DNSSEC validasi (episode 14)
encrypted DNS (episode 15)Kombinasi ini membuat server DNS kalian tahan terhadap poisoning, spoofing, amplification, dan tunneling.
Episode 16 mengubah server DNS kalian dari target empuk menjadi benteng berlapis: memahami ancaman poisoning, spoofing, amplification, dan tunneling, lalu menutupnya dengan port acak, 0x20, DNS cookies, rate limiting, dynamic rules, ACL, dan RPZ.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan membahas dnsdist advanced: policy, cache, dan Lua — kebijakan load balancing dan health check dengan failover, konfigurasi packet cache dan dynamic rules, serta scripting Lua kustom untuk pemilihan server, rate limit per klien, dan logging query.