了解 iptables 中的连接跟踪

了解 iptables 中的连接跟踪

我希望对 iptables 中的状态/连接跟踪有一些了解。

  • 这两条规则有什么区别?

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    当指定 -m state 或 -m conntrack 时,两者似乎都会加载 nf_conntrack 模块。这两个选项都会打开状态或连接跟踪。

注意:我不是在问 conntrack 做什么,我只是在问它们是否等效。我已经知道 conntrack 模块具有更多功能。

  • 如果以上是等价的,那么使用conntrackd时是否需要使用conntrack版本?

  • 当第一次匹配包含 -m state --state BLA 的数据包时,连接跟踪是否会打开,还是对于所有流量,连接跟踪是否始终打开?

    例如,在 FreeBSD PF 下,您可以在规则上指定 keepstate 来跟踪状态。netfilter 是否也是如此?即,模块加载后,它是否对所有流都有效?

  • 连接跟踪可以/应该用于如下所示的快速匹配吗? 如果不按如下所示使用,是否意味着防火墙将再次遍历规则集以寻找数据包的匹配项,而不是仅仅命中第一个 ESTABLISHED 规则?[如果属实,许多示例似乎没有利用这一点]

例如,假设这是某种路由器/防火墙(无nat)。

# Default DROP policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Drop invalid
iptables -A FORWARD -m state --state INVALID -j DROP

# Accept established,related connections
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow ssh through, track connection 
iptables -A FORWARD -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT
  • 当 conntrack 表填满时,您的防火墙会开始拒绝流量吗?或者没有状态的规则是否仍然有效。在这种情况下,我不应该丢弃具有无效状态的数据包,对吗?

看这里:使用 iptables 和 kmod 自动加载会自食其果

答案1

第一个问题是连接跟踪。这是conntrack 工具. 考虑到这一点,国家该做什么?

州际比赛

最有用的匹配标准由 ip_conntrack 模块提供state' extension, which interprets the connection-tracking analysis of the 。强烈推荐。

指定-m state' allows an additional“--state”选项,它是要匹配的状态的逗号分隔列表(“!”标志表示不匹配这些状态)。这些状态包括:

NEW 创建新连接的数据包。

已建立属于现有连接的数据包(即回复数据包或已看到回复的连接上的传出数据包)。

相关 (RELATED) 与现有连接相关但不是其一部分的数据包,例如 ICMP 错误,或(插入 FTP 模块)建立 ftp 数据连接的数据包。

无效 由于某种原因无法识别的数据包:包括内存不足和与任何已知连接不对应的 ICMP 错误。通常应丢弃这些数据包。

这种强大的匹配扩展的一个例子是:

# iptables -A FORWARD -i ppp0 -m state !--state NEW -j DROP

有关状态和政策的防火墙问题?

因此,要回答这个问题,conntrack 与 conntrack 工具包一起使用并取代状态在这方面。如果您打算使用 conntrack 工具包,那么它比 state 更好。

连接跟踪针对流量流开启,它不断尝试将流量与规则进行匹配。

针对问题 2 的答案是,是的,使用 conntrack

回答问题 3,哪种情况?状态的答案在上面的定义中。

4 的答案是,conntrack 适用于 conntrack 工具包,state 适用于不使用工具包。是的,在您的示例中,您可以使用 conntrack,而不会比使用 state 受到任何影响。

相关内容