最近,我遇到了防火墙阻止两台服务器之间的通信的问题,我想检查 iptables 如何处理应用于同一 IP 的多个规则。如果我运行,iptables -L -n | grep 1.2.3.4
我会看到以下输出:
ACCEPT all -- 1.2.3.4 0.0.0.0/0
DROP all -- 1.2.3.4 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 1.2.3.4
DROP all -- 0.0.0.0/0 1.2.3.4
iptables 将如何处理这些规则?来自 1.2.3.4 的所有流量都会被丢弃吗?
答案1
很难说,因为您没有显示这些规则适用于哪些连锁店。
简单地说:对于防火墙,你必须从 FORWARD 链开始,并遵循按顺序匹配的所有规则,直到你遇到 ACCEPT、DROP 或 REJECT
如果您以这种方式到达所有规则的末尾,则 FORWARD 的默认策略将适用。
答案2
运行iptables -L -n
不会为您提供规则可能已定义为条件的接口名称。具有不同目标的规则可能针对不同的接口进行条件处理,除非它们已被写入
A)匆忙
b)由心不在焉的管理员
C)作为某事的临时解决办法或
d)上述所有的
改用iptables -L -v -n
。
回答你的问题:数据包的命运取决于第一的匹配规则带有一个终端目标(ACCEPT 和 DROP 就是这样的目标,但还有其他目标,如 RETURN,它们不是终端,因此处理会继续)。如果没有这样的规则,则应用链默认策略,这是ACCEPT
默认的,可以通过 进行更改iptables -P <ACCEPT, DROP>
。
看这个相当不错的工作流程文档了解详情。
答案3
我个人最喜欢的理解 iptables 规则集的命令是iptables-save
,它将所有规则转储到 stdout。这有助于了解规则的正确顺序。
iptables 中数据包遍历的完整图如下:http://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg