mav*_*rik 1 linux networking kernel
我希望能够拦截连接建立,例如想知道某个进程(任何进程)何时建立连接。有没有办法实现这一目标?
我唯一能想到的就是拦截connect()
系统调用。但可能还有其他方法吗?可能是在内核中创建网络上下文时?
目标是根据某些要求过滤进程并实时启用/禁用连接建立。
提前致谢。
PS 我这样做是出于绝对合法的目的。
PPS 我在谷歌搜索过,但只找到了如何拦截已经建立的连接(不完全是我想要的)。我要的是一个想法,一个搜索方向,而不是一个代码。
对于仅提取信息的方面,可以使用 AUDIT 匹配(如果不需要大量信息,则可能使用 LOG 匹配)使用 iptables 来完成。
对于基于一些复杂规则实时允许或禁止连接的情况,我不确定您是否可以在 Linux 上可靠地做到这一点。选项包括:
dlopen()
任何 libc 并以这种方式进行调用)。net_cls
对照组。这需要设置防火墙,可能会影响活动连接,并且可能无法完全按照您的意愿工作(它将需要一个守护进程,在进程启动时将进程移动到适当的控制组中)。也就是说,您可能需要重新评估为什么需要它。除非您通过神经网络或其他启发式方法(由于多种原因,这两种方法都是有问题的选择)来提供决策,否则您几乎总是最好将东西直接编码到防火墙中(iptables 可以做到)一些非常复杂的东西,例如仅将使用特定 IP 协议的连接与特定 UID 以均匀分布的随机速率启动的特定端口匹配,并将不匹配的数据包发送到不同的目的地),或使用调度工具或其他钩子来更新防火墙动态规则(例如,在系统不使用时更改防火墙规则,或仅在该用户登录时允许来自给定 UID 的新连接)。
归档时间: |
|
查看次数: |
292 次 |
最近记录: |