iptables:关于 raw 表的问题

iptables:关于 raw 表的问题

我在网上看到,iptables raw 表仅用于指定是否不应应用连接跟踪。但是,当 raw 表中的规则目标是 -j DROP 时,数据包将被丢弃,一切似乎都正常。

关于此主题,我有以下一系列问题:

  • 当我在原始表中使用 -j DROP 操作删除一个数据包时,连接跟踪会混乱吗?可以假设内核首先检查 DROP 目的地,当到达 mangle/PREROUTING 时,根据“互联网”首先允许丢弃数据包,因此它会得到连接跟踪。
  • 在原始表中使用 -j SYNPROXY 目标是否可行?
  • 在原始表中使用像 -j ACCEPT 这样的最终目的地是否也会导致连接跟踪?
  • 使用 -j NOTRACK 是否会停止对原始表中以下规则的评估?

我的目标是使用性能最高的 iptables,因为我需要设置一个 Linux 路由器,该路由器需要保护 10 GbE 互联网连接。我希望在原始表中丢弃数据包而不先指定 -j NOTRACK,然后在稍后阶段丢弃数据包就可以了。我知道我无法在原始表中使用连接跟踪模块的问题。我的目标是将其用作第一道防线,并配合一些通用的 hashlimit、SYNPROXY 和 DROP 规则。

答案1

Netfilter 数据包流图

该图显示了 Linux 内核 Netfilter 子系统中数据包的流动,对于理解不同规则如何影响网络流量非常有用。

现在回答你的问题:

当我在原始表中使用 -j DROP 操作删除一个数据包时,连接跟踪会混乱吗?

当在表中丢弃数据包时raw,该数据包将永远不会到达conntrack模块。这意味着在数据包沿阻塞方向流动期间不会创建/查询任何连接跟踪条目。

但是,当流量流向相反方向时,可能会出现创建连接跟踪条目的情况。系统conntrack知道这种情况会发生,并具有INVALID这些连接的状态。

因此,conntrack不会“困惑”。但是,您可能会遇到一些意外行为,因为不同的规则会影响一个连接上不同方向的数据包。

在原始表中使用 -j SYNPROXY 目标是否可行?

根据https://patchwork.ozlabs.org/patch/53494/SYNPROXY目标是设计到表PREROUTING的链上RAW。所以,答案是肯定的。

在原始表中使用像 -j ACCEPT 这样的最终目的地是否也会导致连接跟踪?

ACCEPT是一个“本地”的最终目的地,也就是说,当数据包击中ACCEPT链中的规则时,它将离开当前链并根据图表转到下一个链。

因此,它将导致连接跟踪,除非您输入NOTRACK作为跳转目标。

使用 -j NOTRACK 是否会停止对原始表中以下规则的评估?

不,它不是一个链终止目标。

相关内容