如何将所有传入的连接数据包传递给 NFQUEUE

How to pass to NFQUEUE all incoming connection packets

我开发了一个应用程序来检查到达 linux 机器的数据包。 我想在 NFQUEUE 中发送所有传入的连接数据包,并且只发送传入的连接数据包。对于由客户端发起的连接,不仅 --state NEW 而且 --state ESTABLISHED, RELATED

最后一件事,要为所有端口进行 tcp 握手,我还需要这条规则才能起作用:

iptables -A PREROUTING -t nat -p tcp -match multiport! --dport 64646 -j REDIRECT --to-ports 1234

如有任何帮助,我们将不胜感激。

谢谢!

如果有人感兴趣,我找到了解决方案。

# Accept our ssh on a modified port
iptables -A PREROUTING -t raw -p tcp --dport 64646 -j ACCEPT

# Mark all packets of incoming NEW connection with mark 1 (netfilter connmark)
iptables -A PREROUTING -t mangle -m state --state NEW -j CONNMARK --set-mark 1

# Push into nfqueue all marked packets (netfilter nfqueue)
iptables -A PREROUTING -t mangle -m connmark --mark 1 -j NFQUEUE --queue-num 0

# Redirect all incoming connections to the userland listener to make TCP handshake
iptables -A PREROUTING -t nat -p tcp --match multiport ! --dport 64646 -j REDIRECT --to-ports 1234

最后所有传入的数据包都进入了 nfqueue,但是如果我在机器上工作(更新、升级、安装...)数据包不符合规则。 此外,重定向在 nfqueue 决定后适用,因此我记录了基本端口(不是 1234)。