我想仔细检查 iptables (Ubuntu 22.04) 中 TCP 连接中的 NEW 状态的行为是什么。
它只接受 tcp 标志中的 SYN=1 和 ACK=0/FIN=0/RST=0 吗?
更详细的示例 - 假设我的服务器上有以下规则:
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j ACCEPT
客户端发送 SYN=1 AND 的数据包,例如:FIN=1 或 RST=1。这样的数据包会被上面的 ACCEPT 规则匹配吗?
我正在阅读一些旧的 iptables 文档,下面的部分让我思考这是否仍然是 Ubuntu 中最近的内核/实现需要担心的问题:https: //www.frozentux.net/iptables-tutorial/iptables-tutorial.html #NEWNOTSYN
SYN=1 AND 的 TCP 数据包 FIN=1 或 RST=1 将不符合您的规则:
实验测试:
我编写了这个示例 iptables 规则集,其中仅记录数据包,不接受或丢弃。
然后我曾经
hping3
从另一台计算机发送带有所需测试标志的 TCP 数据包:测试 1:SYN=1 且 FIN=1:
通过 tcpdump 我得到:
还有 iptables:
通过数据包计数器观察,数据包状态被分类为无效。
测试 2:SYN=1 且 RST=1:
通过 tcpdump 我得到:
还有 iptables:
观察到还有另一个无效数据包。
测试 2:SYN=0 且 ACK=1:
通过 tcpdump 我得到:
还有 iptables:
观察数据包被分类为 NEW,但也被规则捕获
NEW TCP no SYN
,通常会被丢弃。条目
/var/log/syslog
:另请参阅。