auditd通过监控socket、connect、bind、accept四类系统调用精准捕获网络连接建立行为,需同时配置arch=b64和arch=b32规则以防漏审,并借助ausearch与aureport解析完整上下文。

监控网络连接建立的关键系统调用
连接建立分两类:进程主动发起(如 curl 访问 API)和进程被动等待(如 nginx 监听 80 端口)。需分别抓取对应系统调用:
- socket():所有网络通信起点,创建套接字时即记录协议族(AF_INET/AF_INET6)、类型(SOCK_STREAM/SOCK_DGRAM)
-
connect():最核心的外连行为捕获点,日志中含目标 IP 和端口(经
ausearch -sv可解析出原始地址结构) - bind():识别服务监听行为,可确认哪个进程绑定了哪个本地端口(如 sshd 绑定 22)
- accept():配合 bind 使用,表示服务已实际接受一个入站连接,是“连接建立完成”的强信号
配置双架构规则防漏审
现代 x86_64 系统常运行 32 位兼容程序(如某些旧版 Java 或库),若只配 b64 规则,会漏掉大量调用。必须为每条规则同时指定 arch=b64 和 arch=b32:
在 /etc/audit/rules.d/network.rules 中写入:
-a always,exit -F arch=b64 -S socket -k network_socket<br>-a always,exit -F arch=b32 -S socket -k network_socket<br>-a always,exit -F arch=b64 -S connect -k network_connect<br>-a always,exit -F arch=b32 -S connect -k network_connect<br>-a always,exit -F arch=b64 -S bind -k network_bind<br>-a always,exit -F arch=b32 -S bind -k network_bind<br>-a always,exit -F arch=b64 -S accept -k network_accept<br>-a always,exit -F arch=b32 -S accept -k network_accept
保存后执行:sudo augenrules --load,再用 sudo auditctl -l | grep network 验证是否加载成功。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
查“谁连了某个外网地址”
假设你发现异常流量指向 192.0.2.100:443,可用 ausearch 结合系统调用参数还原上下文:
- 查最近 1 小时内所有 connect 调用:
ausearch -m connect -ts recent -i - 过滤目标地址(需先用
-sv查看原始字段格式):ausearch -m connect -sv --key network_connect | grep "192.0.2.100.*443" - 关联完整事件链(含用户、进程名、命令行):
ausearch -m connect -sv --key network_connect | aureport -f -i
注意:ausearch -sv 输出中的 saddr= 字段即源地址结构,解析后可得目标 IP 和端口;aureport 则自动补全 auid(登录用户 ID)、comm(进程名)、exe(执行路径)等关键字段。
关于“连接断开”事件的说明
auditd 不监控 TCP FIN/RST 或 close() 调用作为“断开”信号——因为 close() 仅释放文件描述符,不代表连接立即终止(TCP 四次挥手由内核异步处理)。实践中,**连接生命周期的审计重点在“建立”而非“断开”**:
- 追踪异常外连只需关注 connect + socket,就能锁定发起者
- 服务侧连接断开无法被可靠审计,但可通过 accept 日志反推活跃连接数趋势
- 如需连接持续时间等指标,应结合 netstat/ss + 时间戳日志,而非依赖 auditd










