Domain-Name-System

使 iptables 更易於維護

  • November 14, 2014

除了一些列入白名單的網站外,我的網路已完全鎖定。這一切都是通過 iptables 完成的,它看起來像這樣:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

顯然,這些地址是假設的,但你明白了。我的防火牆變得巨大。如果我可以這樣做,維護起來會容易得多:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

我相信這是可能的,因為man iptables說:

地址可以是網路名稱、主機名(請注意,使用遠端查詢(如 DNS)指定要解析的任何名稱是一個非常糟糕的主意)、網路 IP 地址(使用 /mask)或純 IP 地址。

但我擔心的是“指定要解析的任何名稱…… DNS 是一個非常糟糕的主意”的部分。為什麼這是個壞主意?它只會減慢一切嗎?

如果我真的不應該在 iptables 規則中使用主機名,那麼我應該怎麼做才能簡化我的防火牆?

  • 在添加規則時解析 DNS 名稱,而不是在檢查數據包時解析。這違背了大多數人的期望。

    • 該規則不會更新以反映更改的 DNS 結果。添加時已解決,僅此而已。您將需要定期重新載入規則,否則某些網站可能會中斷。
  • 存在一些安全問題,因為您基本上是將防火牆規則的控制權委託給外部實體。

    • 如果您的父 DNS 伺服器遭到入侵並返回錯誤數據怎麼辦。

如果您的目的是阻止 HTTP 訪問,那麼您通常最好設置一個設計用於在該級別進行過濾的軟體(例如 squid+squidquard)。

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