Domain-Name-System

對抗傳入 DNS 反射攻擊的對策

  • August 6, 2014

我目前正在經歷對我的伺服器的 DNS 反射攻擊。我通過 UDP 從埠 53 獲得了大量我的伺服器從未要求過的答案:

02:53:57.626156 IP (tos 0x0, ttl 50, id 0, offset 0, flags

$$ DF $$, proto UDP (17), 長度 267) REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.11803: 30781-q: RRSIG? . 0/13/1 納秒:。NS A.SOMENAMESERVER.NET., .$$ |domain $$ 02:53:57.626382 IP (tos 0x0, ttl 50, id 0, offset 0, flags

$$ DF $$, proto UDP (17), 長度 267) REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.11803: 30781-q: RRSIG? . 0/13/1 納秒:。NS B.SOMENAMESERVER.NET., .$$ |domain $$ 02:53:57.627804 IP (tos 0x0, ttl 50, id 0, offset 0, flags

$$ DF $$, proto UDP (17), 長度 267) REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.24188: 30781-q: RRSIG? . 0/13/1 納秒:。NS C.SOMENAMESERVER.NET., .$$ |domain $$

所以我想到的對策是限制源埠為53的傳入數據包的數量。iptables應該沒問題吧?

所以我把它和我的小 iptables 技能放在一起:

-A 輸入 -s A.TRUSTED.NAMESERVER -j 接受

-A 輸入 -s B.TRUSTED.NAMESERVER -j 接受

-A 輸入 -s C.TRUSTED.NAMESERVER -j 接受

-A INPUT -p udp -m udp –sport 53 -m limit –limit 10/min -j LOG –log-prefix “53 DENY FROM:” –log-level 7

-A INPUT -p udp -m udp –sport 53 -m limit –limit 10/min –limit-burst 20 -j ACCEPT

記錄攻擊並在攻擊過多時將其爆發。好吧,如果成功了,我就不會在這裡寫了。

一定有什麼問題,我不知道是什麼。它正確記錄,但即使數量大於突發限制,它也不會丟棄任何包。

我非常感謝您的幫助。

問候馬塞爾

我在您的規則中看不到任何 DROP。也許你想追加

-A INPUT -p udp -m udp --sport 53 -j DROP

在你的規則結束?

如果反射的數據包被發送到一個關閉的 UDP 埠,那麼接收端的核心將生成一個 ICMP 錯誤消息。這種處理非常便宜,因此處理 UDP 數據包和發送 ICMP 錯誤所需的處理時間可能是您最不關心的問題。

在某些情況下,ICMP 錯誤消耗的上行頻寬可能是一個真正的問題。在這種情況下,可能需要對 ICMP 錯誤進行速率限制。

但是,不建議在不發送 ICMP 錯誤的情況下靜默丟棄所有 UDP 數據包。ICMP 錯誤是相關 DNS 伺服器的所有者擁有的唯一信號,可以告訴他們他們的 DNS 伺服器參與了反射攻擊。換句話說,通過默默地丟棄數據包,您可以將攻擊隱藏在可以減輕攻擊的人面前。

從技術上講,設計一個能夠自動緩解反射攻擊的 DNS 伺服器是可行的。然而,這種緩解必須依賴 ICMP 錯誤消息。如果這種緩解方法變得普遍,您可以通過靜默丟棄所有攻擊流量,讓自己更容易成為 A DDoS 攻擊的目標。

如果反射的 UDP 數據包將到達一個開放的 UDP 埠,那麼處理這些反射的數據包將在 CPU 時間方面變得更加昂貴。在這種情況下,建議使用 iptables 規則來拒絕源埠為 53 的數據包或反射攻擊中經常濫用的服務使用的任何其他數據包,並且其目標埠是您正在執行的服務的埠。我仍然不會丟棄它們,而是使用REJECT目標產生與在封閉埠上看到的相同的 ICMP 錯誤。

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