最近我朋友架的 DNS Server 被大量的 DNS query 要求所苦,Vigor2910 的連線數拚命地達到所限制的量(1500)。雖然我在 Vigor2910 設定了防火牆規則來阻擋來源 IP,但因為來源 IP 會變動,所以還是很容易收到警告信。
我朋友問我說有沒有解決的方法,所以我便到 DNS Server 看一下記錄來找找看囉!因為我有對 DNS 的記錄做過些設定(去 TWNIC 上課所教的),所以便去看一下 /var/log/dns-query.log 檔的內容:
哇!一堆怪怪的 DNS 查詢在這記錄上,正常的查詢記錄要像紅色線框的那樣吧!上網問一下 Google 大帝囉!所幸找到了一篇來自 Tom Hayward 部落格的文章。
文章中說這個記錄,query: . IN NS,就是在向 root name Server 查詢,這個查詢封包很小,但卻要花很多的時間去找答案回覆(it has a very short query packet but a pretty long answer.)。這種大量的查詢,可視為是 DoS(阻斷式攻擊)。
作者有去抓這個 query 封包,發現了它有一個特性,就是它的總長度是 45 bytes,所以就可以在 iptables 執行下列的指令來進行封包丟棄的動作:
# Blocking Recursive Root DNS Queries
iptables -A INPUT -i eth0 -p udp --dport 53 -m length --length 45 -j DROP
哈!果然就恢復正常的情形了。
不過,Vigor2910 那邊的就要把「NAT 連線數限制」停用,要不然,警告信還是會寄。
拿掉後再去看「資料流量監控」,NAT 連線線就大概在 1200~1500 之間,暫時先這樣囉!
20100728
