Domain-Name-System

如何防止公開遞歸 DNS 伺服器被濫用進行 DNS 放大

  • January 3, 2017

我有提供開放和遞歸 DNS 的業務需求。這個 DNS 當然被 DNS 放大攻擊嚴重濫用,導致 5-10 Mbps 的持續出站負載僅由欺騙的 ANY 請求引起。因此,我必須找到一種解決方案來解決這個問題,至少要達到最小程度的濫用。我假設其他人也有同樣的問題,所以我想分享我的方法,因為它似乎是唯一一種超出通常建議“不要操作開放遞歸 DNS”的公開共享方法“……這根本沒有幫助。

因此,我正在尋找能夠讓我維持可操作的開放遞歸 DNS 的方法,同時最大限度地減少任何嘗試利用可能產生的影響。

有誰知道任何其他解決方案?

當我發現放大攻擊時,我的方法只是自動化我手動執行的操作:

  • 執行 tcpdump 以確定傳出流量的特徵。一旦您確信這確實是 DNS ANY 請求,請使用以下命令擷取它們:tcpdump -n udp dst port 53 | grep ANY
  • 然後使用 iptables 丟棄具有上述特徵的傳出流量。

我發現絕大多數腳本小子使用我只能推測的一些開箱即用的 DNS amp 模板腳本,它可能有一個“在此處插入目標埠”行……因此將輸出限制為一個特定的目標埠。在這種情況下,它就像辨識該埠一樣簡單,並阻止從埠 53 (DNS) 到該目標埠的任何 UDP 流量。如果做不到這一點,您可以將所有流量丟棄到您的 tcpdump 顯示為“請求”重複任何 DNS 查詢的目標 IP 地址 - 無論如何,沒有多少合法使用。

您有可能會阻止合法流量,也有可能在 tcpdump 擷取時間之間仍然允許一些濫用。但考慮到替代方案,這是一個很小的代價。

您沒有提及您執行的名稱伺服器軟體,但如果它有一些響應速率限制方案,那可能是幫助解決這種情況的良好開端。

另一種選擇是引入一些額外的層來進行速率限制/阻止,但我建議使用一些深度 DNS 感知工具而不是自己滾動。

看看dnsdist,一個非常靈活的 DNS 代理/負載均衡器(文件/配置範例)。

當然,如果可能的話,簡單地鎖定對已知客戶端的遞歸訪問會容易得多。

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