我开发了一个应用程序来检查到达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)。

08-28 10:44