【问题标题】:NFQUEUE/IPtables - Suricata Inline With Python Intercept for DNSNFQUEUE/IPtables - Suricata 内联 Python 拦截 DNS
【发布时间】:2015-01-19 14:05:33
【问题描述】:

这就是我想要实现的目标。我有一个运行 Suricata 的内联 linux 盒子,它能够丢弃数据包。这适用于将所有流量放在 NFQUEUE 0 上然后设置 suricata 监听的标准方法。

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

到目前为止,我已经研究出如何将 DNS 和 Kerberos 流量切断到不同的 NFQueue,因此 suricata 侦听 NFQUEUE 1 而我的程序侦听 NFQUEUE 2,我需要一种使用 iptables 将流量从一个NFQUEUE 到另一个。

类似这样的:

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

我可能缺少后路由的某些内容,(例如与我的原始 DNS/Kerboros 规则匹配的出站数据包被放置到 NFqueue,但这会在我测试时创建一个循环)

感谢您的宝贵时间。

【问题讨论】:

    标签: python linux iptables


    【解决方案1】:

    有几种方法:

    您可以编辑 suricata.yaml 并在 nfq: 下,将 mode: routeroute-queue 设置为相应的 DNS/Kerberos 队列。这将在 Suricata 处理完数据包后传递数据包。

    标记数据包并在 1 上排队到 Suricata(即-m mark ! --mark 0x1/0x1 -j NFQUEUE --queue-num 1)。

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

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

    mode: repeat
      repeat-mark: 1
      repeat-mask: 1
    

    干杯。

    【讨论】:

      【解决方案2】:

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

      我希望这是有道理的。希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多