【问题标题】:netfilter event on packet locally processed ( netfilter C kernel module code)本地处理的数据包上的 netfilter 事件(netfilter C 内核模块代码)
【发布时间】:2011-02-04 03:55:02
【问题描述】:

如果传入的数据包进来并在本地处理,有没有办法得到 通知该事件?

我目前正在使用 NF_IP_LOCAL_IN 挂钩。但看起来这给出了所有发往该接口的数据包。例如假设 tcp 数据包 X 到达端口 5000,并且有一个套接字在端口 5000 上侦听。我想接收该事件。

澄清一下,我的意思是我只想接收数据包 X 事件。所有其他未在本地处理的数据包(即那些生成 ICMP 目标无法到达的数据包,我不想收到通知)

【问题讨论】:

  • 所以你想在端口 5000 上有进程监听时得到通知,如果没有进程监听时不得到通知?这超出了 netfilter 的知识范围。
  • @ninjalj 连接跟踪怎么样。这不是跟踪当前正在播放的侦听套接字吗?
  • @ajpyles:不,根据看到的 TCP 段跟踪推断的 TCP 状态。
  • @ninjalj 好的,谢谢。我需要想出我自己的检查机制,这可能会很昂贵。是否可以复制传入的数据包以进行后期处理? IE。发送 NF_accept 但继续异步处理数据包。
  • @ajpyles:不,我的意思是,这取决于您需要做什么,也许用户空间上的 AF_PACKET 套接字就足够了?

标签: linux linux-kernel netfilter


【解决方案1】:

Netfilter 位于 L3/L4,因此它只能访问 L4 之前的信息。 OTOH,LSM(Linux 安全模块)几乎无处不在,包括socket_recvmsg,我认为应该只为您感兴趣的数据包调用它。

现在,您是否可以使用它取决于您的情况。您的环境中是否已经运行了 LSM?如果答案是肯定的,您能否为您的 LSM 制定并插入一个足以满足您的目的的策略?

【讨论】:

  • 这看起来很有趣你能解释一下 LSM 是什么意思吗?
  • @ajpyles:扩展缩写。 LSM 的一个例子是 Selinux。
【解决方案2】:

嗯,界面一定是lo。

或者我不明白为什么 LOCAL_IN 钩子不能满足你。

【讨论】:

  • 例如,假设我在端口 5000 上只有一个侦听套接字。数据包 X 进入端口 5000,数据包 Y 进入端口 5001。这两个事件都将显示在 LOCAL_IN 挂钩中。但我只想得到数据包 X 进来的事件(因为它是在本地处理的)。
  • 有“socket”匹配模块(xt_socket.c)。也许会有所帮助。
猜你喜欢
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2018-08-18
  • 2014-07-17
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多