Iptables

如何阻止點“。”在 iptables 規則中?

  • August 7, 2021

我的 iptables 中有這條規則來阻止以 : 結尾的域.watch

sudo iptables -A OUTPUT -j DROP -m string --string ".watch" --algo kmp

但問題是.無法匹配。所以上面的行不匹配任何東西。但是,如果我從中刪除點.watchwatch它就可以了。

我怎樣才能阻止點“。” 在 iptables 規則中?

從語法上講,這似乎是正確的,但是您的方法不適合此目的。字元串更新檔匹配數據包中任意位置的字元串:

  • 您正在丟棄任何具有watch.watch任何地方的數據包。這很可能導致誤報,甚至引入了新的拒絕服務攻擊向量。
  • 它無法處理加密流量。它無法阻止大部分網路流量
  • bm儘管匹配算法( Boyer–Moore & Knuth–Pratt–Morris)有相對較好的選擇,kmp但字元串過濾器的使用仍然是計算密集型的。

該文件也明確警告這一點:

請謹慎使用此匹配項。很多人想用這個匹配來阻止蠕蟲,以及 DROP 目標。這是一個重大錯誤。它會被任何 IDS 規避方法打敗。

以類似的方式,很多人一直在使用這種匹配作為一種手段,通過丟棄任何包含字元串 POST 的 HTTP 數據包來停止 HTTP 中的特定功能,如 POST 或 GET。請理解,這項工作最好由過濾代理完成。此外,任何帶有 POST 字樣的 HTML 內容都將被前一種方法丟棄。這個匹配被設計成能夠對使用者態感興趣的數據包進行排隊以便更好地分析,僅此而已。基於此丟棄數據包將被任何 IDS 規避方法擊敗。

對於您要實現的目標,有更好的選擇:

  • 基於 DNS 的過濾。任何 DNS 伺服器都可以做到這一點。例如,Dnsmasq是一個常見的輕量級 DNS 轉發器:您可以添加address=/watch/0.0.0.0到它的配置中。
  • 基於 Web 代理的過濾。

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