代码之家  ›  专栏  ›  技术社区  ›  Adam Liss

除了iptables之外的数据包管理工具?[关闭]

  •  14
  • Adam Liss  · 技术社区  · 17 年前

    我正在寻找一个linux实用程序,它可以根据一组规则更改网络数据包的有效载荷。理想情况下,我会使用 iptables 以及 netfilter 内核模块,但它们不支持通用的有效载荷管理: 防火墙 将改变各种 头球 字段(地址、端口、TOS等),它可以 比赛 数据包中的任意字节,但显然无法 改变 数据包内的任意数据。

    内核模块将是一个很大的优势,因为效率是一个问题,但我很乐意探索任何其他可以完成这项工作的选项。

    谢谢你的想法!


    逾期已久的更新:

    我们选择使用 NFQUEUE 模块,这是Robert Gamble建议的QUEUE模块的最新实现。它看起来相当简单,允许我们的代码在用户空间而不是内核空间中运行会带来安全性。

    如果我们只是想改变有效载荷而不改变其大小,那么实现几乎是微不足道的。在这种情况下,我们定义一个 iptables 规则为我们选择“有趣”的数据包,并向它们发送 NFQUEUE 目标。我们将编写一个回调函数,用于检查来自 NFQUEUE ,根据需要修改数据,并重新计算其TCP和IP标头中的校验和。

    然而,我们的用例涉及向数据流中注入额外的字符。这有一个稍微明显的副作用,即增加TCP流中相应的SEQ/ACK号,而混淆 conntrack 模块足以完全破坏NAT。a之后 许多 经过研究、挠头和实验,最方便的解决方案是禁用这些特定数据包的连接跟踪(使用 NOTRACK 目标在 raw 表)并在我们的回调中处理它。 保存你的西红柿和讨厌的邮件;我一点也不自豪能让你了解情况,但这是在下一个冰河时代之前为客户提供可靠产品的唯一途径。这是一个好故事。但我真的很感激并分享你的衷心感受。

    版本2将利用我们新发现的启示,替换我们的回调和几个 防火墙 具有自定义NAT和/或 conntrack helper 我们相信,当前的练习为我们提供了足够的经验,可以创建一个内核模块,该模块将有机地融入netfilter架构中,以解决我们遇到的问题。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Robert Gamble    17 年前

    我没有用过,但是 QUEUE netfilter目标看起来可能有效。它使用nflink套接字和注册到套接字的用户空间应用程序来执行有效负载修改。

    这个 libipq 手册页详细介绍了如何使用它,并提供了一个简单的示例。

        2
  •  1
  •   Adam Liss    17 年前

    决心

    我们最终为netfilter开发了一个自定义模块,这显然是该任务的“正确”工具。