1

我正在开展一个项目,以提供在网络连接生命周期的各个阶段拦截源自 Linux 机器并进入 Linux 机器的网络连接的能力。

这些阶段包括:

  1. 就在建立出站网络连接之前 - 即当第一个 SYN 数据包发出时。
  2. 就在建立出站网络连接之后。
  3. 就在连接终止之后。
  4. 建立入站连接时 - 即从外部接收到第一个 SYN 数据包时。

对于上述要求,我正在评估 netfilter_queue 以获取用户空间中的数据包,然后决定是否允许或丢弃数据包。

我主要关心的是,一旦我完成了 netfilter_queue 注册,我将开始获取所有数据包。但我只对控制数据包感兴趣,不希望将数据包发送到用户空间。

所以,我的问题是 - 有没有现有的方法来告诉 netfilter_queue 内核模块只发送控制包而不发送数据包?另外,是否有可能收到有关连接建立和终止的通知?

如果没有现成的方法来实现上述目标,那么修改 libnfnetfilter_queue 和 netfilter_queue 内核模块以根据配置模式集仅提供控制数据包是否有意义,即引入 NFQNL_COPY_CONTROL_PACKET 仅将控制数据包复制到用户空间?

抱歉,如果我的问题看起来很幼稚,因为我仍在探索 netfilter_queue。

我也在 netfilter 邮件列表上发布了同样的问题,但到目前为止没有得到回复:(

感谢所有的帮助。

高拉夫

4

1 回答 1

1

您需要制定一个 iptables 规则来将某些数据包添加到队列中。您可以制定一个规则,只对您想要的数据包进行排队。例如:

ip6tables -I INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j QUEUE

--tcp-flags此页面上描述了这些选项:http: //www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html#ss7.3

于 2014-01-06T16:15:44.183 回答