我在网上看到,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
该图显示了 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 是否会停止对原始表中以下规则的评估?
不,它不是一个链终止目标。