我们有一个 RSA 设备,我检查了该设备上的防火墙规则以确定启用了哪些端口。对我来说,它看起来像是敞开的;但供应商说我对此是错误的,我没有正确阅读它。出于安全原因,我无法发布整个 iptables,但供应商是这么说的:
相信我,它已经被锁定了。我无法对任何客户进行有关 iptables 的培训,但您可以在线参考 iptables 文档,以更好地了解每个规则的设置方式,例如 Linux 防火墙 iptables 初学者指南
下面的示例,这是 DROP 策略而不是允许策略,请注意这一点,而不是在任何地方读取 ACCEPT all 并认为它是开放的。
Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere
后来他们说
所有端口都打开吗?
不。Iptables 不像 pam 配置文件,其中第一条规则满足一个过程。在 iptables 中,必须满足所有规则。如果任何地方都没有接受所有内容,则任何内容都无法通过防火墙。
对我来说,这没有意义。该示例以 开始accept any any any
,策略为 drop。从我网上看到的,策略删除只是将其设置为默认拒绝而不是默认接受。我不明白将示例设置为策略删除或接受会如何改变结果。
我缺少什么?
答案1
Iptables 不像 pam 配置文件那样,第一个规则必须满足某个程序。在 iptables 中,所有规则都必须满足。
这是完全错误的。规则按顺序遍历,当匹配的规则跳转到内置目标之一(ACCEPT
、DROP
或QUEUE
)时,数据包的处理就此结束:不再遍历规则。后来的断言“如果任何地方都没有 ACCEPT,则没有任何东西可以通过防火墙”是正确的(使用 DROP 策略),但是数据包不必匹配所有 ACCEPT 规则才为真,它只需要到达一。
一个数据包可能会被多个匹配规则处理,因为可能有一些规则跳转到用户定义的链(在这种情况下,链中的规则会按顺序尝试),或者根本不跳转并且被仅因其他原因(例如日志记录)而存在。但一旦到达ACCEPT
或DROP
,就这样,数据包要么被发送,要么被丢弃;如果QUEUE
达到,则数据包被传递到用户态进行进一步处理;无论哪种方式,都不会为此数据包处理更多规则。最后,当(且仅当)处理到达内置链的末尾时,才会应用该链的策略。
例如,假设iptables -L
显示
Chain INPUT (policy DROP) target prot opt source
destination ACCEPT all -- anywhere anywhere
由于策略是DROP
,只有被某些规则明确接受的数据包才会通过。一条规则看起来就像它接受一切,但情况不一定如此:可能存在iptables -L
省略的条件。运行iptables -vL
打印出所有条件。一个常见的省略条件是接口;拥有接受所有环回流量的规则是很常见的。你会看到类似的东西
# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
# iptables -vL INPUT
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
如果规则接受所有流量,您会any
在in
from 列中看到iptables -vL INPUT
。