首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核钩子,它知道套接字的目标进程

Linux内核钩子,它知道套接字的目标进程
EN

Stack Overflow用户
提问于 2018-12-05 22:07:10
回答 1查看 759关注 0票数 12

我正在寻找一个特定的位置来向linux内核添加某种钩子,这将允许我执行以下操作:

  • 仅检测TCP连接返回的情况(127.0.0.1)
  • 检测数据包的源进程是否与目标进程相同。
  • 如果是这种情况,则允许连接,拒绝任何其他回送连接(一个进程到另一个进程)。

我一直在看网络过滤器挂钩,但它们似乎不符合需要。bpf过滤器只查看数据包本身。

我还在看套接字连接的LSM挂钩。我可以尝试从套接字连接挂钩实现这一点,方法是查看请求的端口电流绑定到哪个进程来预测连接的位置,这听起来很麻烦。

EN

回答 1

Stack Overflow用户

发布于 2018-12-21 23:04:07

一种简单的方法可以是使用Linux网络名称空间。

Linux网络命名空间

顾名思义,网络名称空间将网络的使用--设备、地址、端口、路由、防火墙规则等--划分为单独的盒子,实质上是在一个运行中的内核实例中虚拟化网络。网络命名空间进入内核在2.6.24,.

请参阅https://lwn.net/Articles/580893/

取消共享

unshare()允许进程(或线程)断开其执行上下文中当前与其他进程(或线程)共享的部分。

请参阅http://man7.org/linux/man-pages/man2/unshare.2.html

Testcase

由于程序应该能够与自己结合,我们需要一个通过套接字与自己通信的程序。有一个很酷的答案,它显示了一个简单的Java程序,它可以传输文本“Hello!”通过套接字到自身,请参见这里的https://stackoverflow.com/a/8119708

代码语言:javascript
复制
/usr/bin/java SendReceive

按预期工作,并输出“Hello!”

使用-n选项,可以取消共享网络命名空间。

代码语言:javascript
复制
unshare -n -- sh -c '/usr/bin/java SendReceive'

给出一个SocketException:网络是不可访问的,因为没有对回送设备的访问。

代码语言:javascript
复制
unshare -n -- sh -c 'ip link set dev lo up; /usr/bin/java SendReceive'

最后转到“你好世界!”再次通过一个回送接口。顺便说一句:这是一个私人的回环装置。无法访问标准回送设备上的打开端口。

还请参见这个酷酷的Unix答案:https://unix.stackexchange.com/a/83348:阻止进程的网络访问?

截图

这里是上面提到的在Ubuntu18.10上执行的测试用例的屏幕截图:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53641491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档