【问题标题】:Packet mangling utilities besides iptables? [closed]除了 iptables 之外的数据包处理工具? [关闭]
【发布时间】:2010-09-20 14:51:09
【问题描述】:

我正在寻找一个 linux 实用程序,它可以根据一组规则更改网络数据包的有效负载。理想情况下,我会使用 iptablesnetfilter 内核模块,但它们不支持通用的有效负载修饰:iptables 将改变各种 header 字段(地址、端口、TOS 等),并且它可以匹配数据包中的任意字节,但它显然无法更改数据包中的任意数据。

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

感谢您的想法!


迟来的更新:

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

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

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

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

【问题讨论】:

  • 这是我的待办事项列表中的第三优先级。同时,我们也在考虑修复 netfilter 模块本身,因为这将是最好的答案。当我有信息时会更新,可能不会在几周内。 :-(
  • @Adam,你是只为修改后的数据包增加 ACK/SEQ,还是确实需要跟踪整个 ACK​​/SEQ 聊天?谢谢。
  • SEQ/ACK 数字计算该端口上整个流中的字节数。所以一旦你改变了一个数据包的大小,你需要保持新的 SEQ/ACK 号直到连接关闭。
  • @Adam Liss,谢谢.. 您的产品是否公开可用?有兴趣看看你选择放入这些数据包中的内容。我运行了一个小型研究项目,收集了此类软件,并尝试破解 Netfilter ......
  • (没有恶意。等待答案的人往往比发布答案的人更频繁地检查!)我不再与制造这个产品的公司有任何关系,也没有关注它的可用性,所以恐怕我无能为力。就数据包内容而言,我们在低吞吐量流中遇到目标字节序列后插入了一个短标签。

标签: linux networking iptables packet-mangling


【解决方案1】:

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

libipq 手册页包含有关如何使用它的详细信息并提供了一个简单的示例。

【讨论】:

    【解决方案2】:

    分辨率:

    我们最终得到了一个用于 netfilter 的自定义模块,这显然是完成这项工作的“正确”工具。

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多