我一直认为 IPv4 连接跟踪(又名conntrack
)是一个被动模块,它只读取数据包并跟踪它们,所以后来其他模块可以使用收集到的信息来决定相关数据包(例如属于同一 L4 连接的数据包)的命运。
然而,最近我偶然发现了这条评论conntrack
评论源代码:
“连接跟踪可能会丢弃数据包,但永远不会改变它们,因此请将其作为第一个钩子。”
..这表明它conntrack
不仅仅是一个被动的观察者,而且它实际上可以丢弃数据包!
什么情况下会出现这种情况?
答案1
考虑操作顺序。Conntrack 无论如何都需要相对较早。如果它不修改数据包,那就更好了;假设原始数据包必须简化一些事情。
如果连接跟踪失败,除了丢弃未跟踪的数据包,还能做什么呢?自动允许对您的流做出响应的防火墙策略不再起作用。
netfilter FAQ 提到了一些失败的原因,因为 NAT 也可能出现这种情况。我认为对于某些特定工作负载来说,这会很烦人,因为conntrack 不再扩展。