iptables,什么是真正的开放?

iptables,什么是真正的开放?

我们有一个 RSA 设备,我检查了该设备上的防火墙规则以确定启用了哪些端口。对我来说,它看起来像是敞开的;但供应商说我对此是错误的,我没有正确阅读它。出于安全原因,我无法发布整个 iptables,但供应商是这么说的:

相信我,它已经被锁定了。我无法对任何客户进行有关 iptables 的培训,但您可以在线参考 iptables 文档,以更好地了解每个规则的设置方式,例如 Linux 防火墙 iptables 初学者指南

下面的示例,这是 DROP 策略而不是允许策略,请注意这一点,而不是在任何地方读取 ACCEPT all 并认为它是开放的。

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

后来他们说

  1. 所有端口都打开吗?

    不。Iptables 不像 pam 配置文件,其中第一条规则满足一个过程。在 iptables 中,必须满足所有规则。如果任何地方都没有接受所有内容,则任何内容都无法通过防火墙。

对我来说,这没有意义。该示例以 开始accept any any any,策略为 drop。从我网上看到的,策略删除只是将其设置为默认拒绝而不是默认接受。我不明白将示例设置为策略删除或接受会如何改变结果。

我缺少什么?

答案1

Iptables 不像 pam 配置文件那样,第一个规则必须满足某个程序。在 iptables 中,所有规则都必须满足。

这是完全错误的。规则按顺序遍历,当匹配的规则跳转到内置目标之一(ACCEPTDROPQUEUE)时,数据包的处理就此结束:不再遍历规则。后来的断言“如果任何地方都没有 ACCEPT,则没有任何东西可以通过防火墙”是正确的(使用 DROP 策略),但是数据包不必匹配所有 ACCEPT 规则才为真,它只需要到达一。

一个数据包可能会被多个匹配规则处理,因为可能有一些规则跳转到用户定义的链(在这种情况下,链中的规则会按顺序尝试),或者根本不跳转并且被仅因其他原因(例如日志记录)而存在。但一旦到达ACCEPTDROP,就这样,数据包要么被发送,要么被丢弃;如果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            

如果规则接受所有流量,您会anyinfrom 列中看到iptables -vL INPUT

相关内容