了解 iptables 中的连接跟踪

hoo*_*enz 5 linux 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
Run Code Online (Sandbox Code Playgroud)
  • 当 conntrack 表填满时,您的防火墙会开始拒绝流量,还是没有状态的规则仍然有效。在这种情况下,我不应该丢弃状态为 INVALID 的数据包,对吗?

看这里:用 iptables 和 kmod 自动加载用脚射击自己

Eve*_*ett 2

第一个问题是conntrack是什么。这是conntrack-tools的网站。考虑到这一点,国家会做什么呢?

州比赛

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

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

NEW 创建新连接的数据包。

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

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

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

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

# iptables -A FORWARD -i ppp0 -m 状态!--state 新-j 丢弃

有关国家和政策的防火墙问题?

因此,为了回答这个问题,conntrack 与 conntrack 工具包一起使用,并在这方面取代了 state。如果您计划使用 conntrack 工具包,这比声明要好。

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

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

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

4 的答案是,conntrack 是与 conntrack 工具包一起使用的,state 是不使用该工具包的。是的,您可以在示例中使用 conntrack,而不会对使用 state 造成任何损失。