Linux 路由器上 IP 表的 Cisco ACL 样式规则

Linux 路由器上 IP 表的 Cisco ACL 样式规则

在路由器方面,我更了解思科,而不是 Linux。在设计防火墙规则时,我习惯于将inACLout附加到特定接口。

我想我可以通过让 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. 如果它可行,那么这是否不是正确的做法,我需要再教育?

答案1

归根结底,iptables 链设计是个人偏好和功能利用的混合体。例如,我的看法与您完全相反。我喜欢 iptables “隐喻”,讨厌 Cisco ACL 隐喻。我喜欢考虑有状态的对话,而不是数据包流。(如果我必须在 Cisco PIX 或具有防火墙功能集的路由器与 iptables 之间做出选择,从管理的乐趣来看,我随时都会选择 iptables...)

“我可能最终会使用状态检测……”这句话有点令人困惑。Netfilter 是一个状态数据包过滤器。您可以编写一个围绕其“状态性”工作的规则集,但这样做会适得其反。我发现,基于连接的建立编写规则也比尝试编写必要的规则和“镜像”规则来无状态管理流量更令人愉快。

您希望数据包遍历尽可能少的链和尽可能少的规则。以 开始您的“过滤”表链-m state --state RELATED,ESTABLISHED -j ACCEPT将允许状态检测引擎通过规则集推送已建立连接的数据包,而无需遍历整个链。

您提议的与接口相关的链将很好地发挥作用,这是一种相当常见的做法。如果您有一组需要应用于每个接口的通用规则,我会先将它们放在通用链中,然后从那里分支到其他特定于接口或特定于流量类型的链。

相关内容