通過 iptables 阻止 DNS 放大攻擊
上次我從 NFOservers.com DDoS 通知程序收到關於 DNS 放大攻擊的警告
2015-12-30 23:28:52.609178 IP (tos 0x0, ttl 54, id 42635, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX hormel.cpsc.gov. 5, cpsc.gov.[|domain] 2015-12-30 23:28:52.609632 IP (tos 0x0, ttl 54, id 42636, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX stagg.cpsc.gov. 5, cpsc.gov.[|domain] .. 2015-12-30 23:28:52.610109 IP (tos 0x0, ttl 54, id 42637, offset 0, flags [+], proto UDP (17), length 1500) my.dns.ip.addr.53 > 63.251.20.x.18150: 41159| 20/0/1 cpsc.gov. MX hormel.cpsc.gov. 5, cpsc.gov.[|domain]
資訊
my.dns.ip.addr.53 - 我的 VIP - 外部 IP DNS 地址
63.251.20.x.18150 - 不知道這個 IP 地址範圍是什麼
我的伺服器必須為我在 bind9 部分中配置的內部公司網路提供遞歸查詢:
acl "trusted" { 172.16.0.0/16; localhost; localnets; }; options { ... allow-query { any; }; allow-recursion { trusted; }; allow-query-cache { trusted; }; ... }
我還配置了 RRL - 響應率限制:
rate-limit { responses-per-second 5; window 5; };
看起來我的 DNS 伺服器(bind9)拒絕了日誌中的錯誤查詢:http: //pastebin.com/A3XGwh04
但我想通過 iptables 阻止此類查詢。我會做一些研究,發現被 IPTABLES 阻止:
iptables -A INPUT -p udp -m udp --dport 53 -m string --from 50 --algo bm --hex-string '|0000FF0001|' -m recent --set --name dnsanyquery --rsource iptables -A INPUT -p udp -m udp --dport 53 -m string --from 50 --algo bm --hex-string "|0000FF0001|" -m recent --name dnsanyquery --rcheck --seconds 10 --hitcount 1 -j DROP
但是當我使用以下命令從測試機器測試我的伺服器時: dig +nocmd @my.ip.dsn.addr domain.com any +multiline +noall +answer我沒有從 dns 得到任何答案,此外日誌仍然充滿了查詢使用cpsc.gov所以我決定支持我的預設 iptables 配置
下一項研究我發現 conntrack 提出的靈魂,但它可能會導致 NAT 問題。我的 DNS 已經過 NAT
當使用在其他主題上找到的另一個靈魂時:
iptables -A INPUT -p udp --port 53 -m hashlimit --hashlimit 1/minute --hashlimit-burst 5 -j ACCEPT iptables -A INPUT -p udp --port 53 -j DROP
得到 nagios 交戰 - SOA 同步問題,未找到域 SLAVE 等
我的下一次嘗試:
iptables --insert INPUT -p udp --dport 53 -m string --from 40 --to 56 --algo bm --hex-string '|637073632e676f76|' -j DROP -m comment --comment "DROP DNS Q cpsc.gov" iptables --insert INPUT -p udp --dport 53 -m string --from 40 --to 50 --algo bm --hex-string '|6370736303676f763f|' -j DROP -m comment --comment "DROP DNS Q cpsc.gov" -A INPUT -p udp -m udp --dport 53 -m string --string "cpsc.gov" --algo bm --from 40 --to 50 -m comment --comment "DROP DNS Q cpsc.gov" -j DROP
但仍然在日誌中查詢
我仍在研究解決方案,但也許這裡的任何人都對此類攻擊經驗豐富,可以幫助我阻止以下查詢: cpsc.gov
query-errors: info: client 93.48.40.139#54822 (cpsc.gov): rate limit drop REFUSED error response to 93.48.40.0/24
任何幫助表示讚賞。
非常重要: 即使我禁用 ALL 的遞歸,我的日誌也充滿了警告,例如**速率限制下降 REFUSED 錯誤響應,**這就是為什麼我想通過 iptables 阻止它。
老實說,看起來您的 ACL 正在按預期工作:
query-errors: info: client 93.48.40.139#54822 (cpsc.gov): rate limit drop REFUSED error response to 93.48.40.0/24
您仍然收到查詢,但您拒絕為他們提供答案。正在呼叫速率限制程式碼,因為查詢仍在大量湧入並且必須被名稱伺服器拒絕。
至於其餘的,有幾件事:
- 不要
rate-limit
與遞歸名稱伺服器一起使用。它不適用於遞歸名稱伺服器並生成那些不必要的日誌消息。這解決了日誌垃圾郵件。iptables
並不會真正幫助解決這個問題。如果您的目標是使軟體永遠不會看到查詢,即使它們REFUSED
無論如何都會被拒絕,那是善意的但被誤導了。無論哪種方式,您的伺服器都必須處理查詢。一種是讓核心丟棄流量,另一種是讓軟體丟棄流量。防止軟體看到虛假查詢的價值主要在於美觀。大多數 DNS 管理員不會將核心週期浪費在軟體已經在做的事情上。無論您是使用防火牆將流量丟棄在地板上,還是發送 REFUSED 數據包,您的伺服器都已被放入開放解析器列表中,殭屍網路不太可能停止向您發送流量。
如果您真的希望此流量消失,強烈建議您不要在只為您的設備提供服務的遞歸伺服器上提供面向 Internet 的偵聽器。這樣,您的 DNS 伺服器就不必浪費使用者空間 CPU 拒絕流量或核心 CPU 丟棄流量。
即使您將此作為學習練習或根本不發送任何回複數據包的目標,這也是一個無法擴展的解決方案。這些攻擊中使用的 DNS 記錄每天都在變化,經常被欺騙的 IP 地址也是如此。
你向那些“
$$ have $$經歷過此類攻擊”,並且不斷拒絕未經請求的流量對於面向網際網路的 DNS 伺服器來說是很正常的。對於以前是開放解析器的伺服器來說更是如此。這種類型的解決方案是那些管理員通常不會做的,儘管我祝你好運都一樣。