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

时间:2018-04-24 08:59:19

标签: linux iptables

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

最后一件事,为了对所有端口进行tcp握手,我需要这条规则另外工作:

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

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

# 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)。