为什么 iptables 丢弃所有数据包?

为什么 iptables 丢弃所有数据包?

我设置这个角色用于丢弃无效数据包:

iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP

但它丢弃了所有数据包。这是我的所有 iptables 规则: iptables

答案1

因为你选择标记全部TCP 第一个连接数据包(带有 SYN 标志的数据包)为不跟踪,意味着你的连接永远不可能有正确的 conntrack 状态,并且第一个数据包之后的所有数据包都会得到无效的状态,你将其丢弃。

  • 第一个带有 SYN 标志的 TCP 数据包被标记为未追踪生的桌子,
  • 跟踪 TCP 数据包,不能新的因为它们没有 SYN 标志。它们不能处于已确立的说明因为已确立的关注新的(更不用说实际的重要意义:之前应该有一个 conntrack 条目被创建,但它不在这里,所以找不到有效的条目)。所以他们的状态变成无效的
  • 你的新规则-A PREROUTING -m conntrack --ctstate INVALID -j DROP失效了无效的状态:最后所有 TCP 流量都被丢弃(第一个 SYN 除外),当使用或SYN_RECV检查时可能会得到很多这样的流量。netstat -tnss -tn

建议:从头开始重新制定你的规则,因为你似乎并没有掌握它们的效果,而且你也没有解释为什么或如何得到它们。连接跟踪应该负责 TCP 的所有状态和标志,但您仍然有至少 13 条规则检查这些状态。然后您使用类似连接跟踪或者连接限制依赖于 Netfilter 的连接跟踪才能正常工作。不要使用连接跟踪不再使用(包括:不要使用连接限制,不勾选连接跟踪的状态了,比如新的无效的...) 在任何规则中,或者删除所有不兼容的规则。

相关内容