V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Supershell
V2EX  ›  程序员

Linux 系统中,有什么监控工具可以一直监控系统中的流量,匹配到某些特征后自动定位发起流量的进程?

  •  
  •   Supershell · 89 天前 · 2162 次点击
    这是一个创建于 89 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有些时候主机会请求一些恶意域名,但是不知道是哪个进程发起的,想通过流量监控工具对这个域名进行监控,从而定位到具体的发起流程,
    18 条回复    2024-01-31 11:02:21 +08:00
    xucancan
        1
    xucancan  
       89 天前
    可以用 strace 实现一个小工具
    lechain
        2
    lechain  
       89 天前   ❤️ 2
    你是不是在寻找 ebpf ?/doge
    Supershell
        3
    Supershell  
    OP
       89 天前
    @xucancan strace 确实可以实现这样的功能,通过跟踪进程的流量日志,我想实现的是从流量特征定位具体进程,strace 所有进程我先去研究一下,感谢提示。还有一个工具可能跟 strace 相似,不过梗简便,就是 yara 。
    en1ac
        4
    en1ac  
       89 天前
    有个叫 zeek 的流量分析工具,可以通过写 lua 脚本来进行流量分析
    dode
        5
    dode  
       89 天前
    hook linux 系统 dns 接口
    mawen0726
        6
    mawen0726  
       89 天前
    iftop 能监听流量,看到是什么 ip 什么端口的流量,不知道适不适合你的场景
    4rat
        8
    4rat  
       89 天前
    @Supershell yara 可以吗?我咋感觉 yara 不行。
    xucancan
        9
    xucancan  
       88 天前   ❤️ 1
    @Supershell 个人的浅薄理解仅供参考
    到了网络传输层面操作系统的进程信息是丢失的,举个例子,从路由器层面可以观测到主机哪个主机对哪些域名进行访问( dns 查询数据是明文的),但不包含进程相关的信息,因为网络通讯和进程属于两个不同的域,上下文是不互通的,也确实不需要
    横向比较,题主目的有点像 GFW 识别翻墙流量,有从流量特征层面识别的方法,例如 LTS in LTS 的包长度特征,或者代理协议的握手特征,但这都是基于“明确证明目标”的,但对于你的场景可能问题都无法被描述
    xucancan
        10
    xucancan  
       88 天前   ❤️ 1
    @Supershell 综上,我觉得首先要明确问题的解决域,它是操作系统和网络交集区域,那么对于 Linux 来讲就是系统内核了,所以 strace 、epbf 这类工具看起来是比较合适的
    salmon5
        11
    salmon5  
       88 天前   ❤️ 2
    IceFox99
        12
    IceFox99  
       88 天前
    知道恶意的域名就好说了,tcpstat 或者 tcpdump 根据域名 ip 写一下 filter expression ,然后只要检测到输出就 hook 到 netstat 或者 ss 上,然后输出那一瞬间的所有 socket 的端口,通信和进程信息,应该足够用了。应该用不到 strace ,epbf 这类内核工具,感觉写个 Shell script 就够用了。

    我自己就拿 tcpstat 和 chart.js 写过一个把流量按端口,网卡(默认和 vpn 虚拟网卡等等),IP 等等信息分类显示的网页小组件,用来分辨 nas 上 bt,nginx,samba,webdav 等各种流量以及各种用户的实时速度,这种思路是可行的而且效果还行。
    salmon5
        13
    salmon5  
       88 天前   ❤️ 1
    https://my.oschina.net/u/3681970/blog/9698278
    长期监控 现在流行可观测性

    短期分析 strace,bcc sslsniff,ecapture
    Supershell
        15
    Supershell  
    OP
       88 天前
    @xucancan 确实如你所说,本是两个维度的事情,没有关联性,无法从流量上面关联进程,我想只能主动监听所有系统进程来实现我的需求,不过这样对主机的资源性能就不友好了。相当于装了一个杀软,实时监控系统进程,但这样就有点重,如果能有个轻量级的就好了。
    dhb233
        16
    dhb233  
       88 天前
    如果要不漏的获取每一个,应该就是 ebpf 这种了。一般发包用的是进程的上下文,ebpf 过滤到特定报文的时候,获取下当前进程号,如果不是常驻进程,还要获取 cmd 之类的?至少要知道执行的哪个文件吧。

    tcpdump 再用 ss 分析,也是可以的,但是可能会漏。毕竟有个延迟,可能请求的进程已经不在了
    dhb233
        17
    dhb233  
       88 天前
    用 ebpf 这种,性能应该不是什么大的问题,性能影响相当于多加了一条 iptables 规则
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3158 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.