Linux

Linux 路由器上 IP 表的 Cisco ACL 樣式規則

  • July 20, 2010

在路由器方面,我比 Linux 有更多的 Cisco 背景。在設計我的防火牆規則時,我習慣於考慮附加到特定介面in的ACL。out

我想我可以通過讓 FORWARD 鏈跳轉到每個介面的自定義鏈來模仿 IP 表的這種行為。

例如(預設策略將是 DROP):

iptables -N INET_IN
iptables -A FORWARD -i eth0 -j INET_IN
iptables -A INET_IN -m tcp -p tcp --dport 80 -d 12.12.12.12 -j ACCEPT

我可能最終會使用狀態檢查,但以上是總體構想。

  1. 是否有任何理由這可能會給我帶來麻煩或無法正常工作?
  2. 如果它行得通,這不是這樣做的方法嗎?我需要一些再教育嗎?

歸根結底,iptables 鏈設計是個人喜好和功能利用的結合。例如,我的做法與您完全相反。我喜歡 iptables 的“隱喻”,討厭 Cisco ACL 的隱喻。我喜歡考慮有狀態的對話而不是數據包流。(如果我必須在帶有防火牆功能集的 Cisco PIX 或路由器與 iptables 之間進行選擇,就管理的樂趣而言,我會隨時使用 iptables…)

“我可能最終會使用狀態檢查……”這句話有點令人困惑。Netfilter 是一個有狀態的包過濾器。您可以編寫一個圍繞其“狀態性”工作的規則集,但這會適得其反。我發現,基於建立連接編寫規則也比嘗試編寫必要的規則和“鏡像”規則來無狀態地管理流量更令人愉快。

您希望數據包遍歷盡可能少的鍊和盡可能少的規則。啟動“過濾器”-m state --state RELATED,ESTABLISHED -j ACCEPT錶鍊將允許狀態檢查引擎通過規則集推送已建立連接的數據包,而無需遍歷整個鏈。

您使用與介面相關的鏈提出的建議可以正常工作,這是一種相當普遍的做法。如果您有一組需要應用於每個介面的通用規則,我會首先將它們放在通用鏈中,然後從那里分支到其他特定於介面或特定於流量類型的鏈。

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