NFQUEUE/IPtables-Suricata与用于DNS的Python截获内联

NFQUEUE/IPtables-Suricata与用于DNS的Python截获内联,python,linux,iptables,Python,Linux,Iptables,以下是我正在努力实现的目标。我有一个运行Suricata的内联linux机器,能够丢弃数据包。这与将所有流量置于NFQUEUE 0上,然后在该队列上设置suricata侦听的标准方法一起工作 我正在编写的代码需要能够截获NFQUEUE 1上的DNS和Kerberos数据包,但它仍然需要与Suricata内联扫描,因此需要将数据包传递回Suricata正在侦听的另一个NFQUEUE,因为我认为这两个程序不能在同一队列上充当使用者 到目前为止,我已经研究出如何将DNS和Kerberos通信切断到不同

以下是我正在努力实现的目标。我有一个运行Suricata的内联linux机器,能够丢弃数据包。这与将所有流量置于NFQUEUE 0上,然后在该队列上设置suricata侦听的标准方法一起工作

我正在编写的代码需要能够截获NFQUEUE 1上的DNS和Kerberos数据包,但它仍然需要与Suricata内联扫描,因此需要将数据包传递回Suricata正在侦听的另一个NFQUEUE,因为我认为这两个程序不能在同一队列上充当使用者

到目前为止,我已经研究出如何将DNS和Kerberos通信切断到不同的NFQueue,因此suricata监听NFQueue 1,我的程序监听NFQueue 2,我需要的是一种使用iptables将通信从一个NFQueue放到另一个NFQueue的方法

大概是这样的:

iptables-I NFQUEUE--queue num 1-j NFQUEUE--queue num 2

我可能缺少post路由(类似于将符合我的原始DNS/Kerboros规则的出站数据包放在NFqueue上,但这将在我测试它时创建一个循环)


谢谢您的时间。

在我完成的网络中,您需要将2个NFQUEUE命令放入不同的表/链元组中,例如,一个在filter/FORWARD中,另一个在mangle/PREROUTING中。基本上,一旦数据包进入表/链组合中的单个NFQUEUE,就完成了该表/链的操作,并完全退出主链。我个人的建议是将NFQUEUE放入mangle/PREROUTING,它将在大多数其他表之前调用(假设您将Suricata NFQUEUE语句放入filter表)


我希望这是有道理的。希望有帮助

有几种方法可以做到这一点:

您可以编辑suricata.yaml,并在
nfq:
下,将
模式:路由
路由队列
设置为相应的DNS/Kerberos队列。这将在Surigta完成数据包后传递数据包

将数据包和队列标记为1上的Suricata(即,
-m标记!--标记0x1/0x1-j NFQUEUE-队列编号1

接下来,那些未被Suricata丢弃的数据包将返回到链,并移动到下一个规则,在该规则中,您可以在2上排队到DNS/Kerberos

在suricata.yaml中,您需要编辑nfq:

mode: repeat
  repeat-mark: 1
  repeat-mask: 1
干杯