Domain-Name-System

通過 iptables 阻止 DNS 放大攻擊

  • June 28, 2020

上次我從 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 伺服器來說是很正常的。對於以前是開放解析器的伺服器來說更是如此。這種類型的解決方案是那些管理員通常不會做的,儘管我祝你好運都一樣。

引用自:https://serverfault.com/questions/748021