linux端口安全审计可用auditd闭环实现:启用服务后,通过bind系统调用规则捕获监听行为,用ausearch和aureport生成带用户、端口、进程的csv报告。

Linux 系统网络端口的安全审计,核心是“谁在监听、监听什么端口、由哪个用户启动、是否合法授权”。不依赖第三方平台,用系统自带的 auditd + ausearch + aureport 就能闭环完成:从规则配置、实时捕获、手动验证到定时报告。
启用并确认 auditd 服务运行
这是所有端口审计的前提。多数发行版已预装,但需确保服务已启用且持续运行:
- Ubuntu/Debian:执行
sudo systemctl enable --now auditd,再运行sudo systemctl status auditd,看到 active (running) 即表示就绪 - CentOS/RHEL:同样执行
sudo systemctl enable --now auditd;若提示未安装,先运行sudo yum install audit audit-libs audispd-plugins - 检查日志路径是否写入磁盘:
sudo grep "log_file" /etc/audit/auditd.conf,默认为/var/log/audit/audit.log,确保该目录可写
添加端口绑定行为的持久化审计规则
端口监听本质是进程调用 bind() 系统调用,auditd 可直接捕获该行为。规则必须写入 /etc/audit/rules.d/ 下的独立文件,才能重启后仍生效:
- 新建规则文件:
sudo nano /etc/audit/rules.d/port_bind.rules - 填入以下两行(兼容 x86_64 和 i386 架构):
-a always,exit -F arch=b64 -S bind -k network_bind-a always,exit -F arch=b32 -S bind -k network_bind - 加载规则:
sudo augenrules --load(推荐)或重启服务:sudo systemctl restart auditd - 验证加载结果:
sudo auditctl -l | grep bind,应输出两条含network_bind的规则
手动触发并验证端口记录是否真实捕获
这一步不能跳过——否则后续报告全是空数据:
- 快速起一个监听服务:
python3 -m http.server 8080 &(后台启动 HTTP 服务,会调用bind(8080)) - 立即查询最近的绑定事件:
sudo ausearch -k network_bind -ts recent | head -5 - 成功标志:输出中包含
type=SYSCALL msg=audit.* syscall=bind,且comm="python3"、port=8080、auid=1000(对应启动用户)等字段 - 若无结果:检查 SELinux 是否拦截(
sudo ausearch -m avc -ts recent),或确认augenrules --load执行时无报错(如 “No rules added” 表示规则语法错误)
生成每日端口使用明细与统计报告
用原生命令组合导出结构化 CSV,便于人工审查或导入表格工具分析:
- 导出今日所有 bind 事件明细(含时间、进程名、端口、用户 UID、命令行):
sudo ausearch -k network_bind -ts today --raw | aureport -f -i --output csv > /var/log/audit/reports/port_bind_$(date +%Y%m%d).csv - 生成端口使用摘要(按端口号分组计数,显示最常监听的端口):
sudo ausearch -k network_bind -ts today --raw | aureport -f -i -key network_bind --summary | grep port > /var/log/audit/reports/port_summary_$(date +%Y%m%d).txt - 建议配合 cron 每日凌晨执行:
0 0 * * * /bin/bash -c 'sudo ausearch -k network_bind -ts today --raw | aureport -f -i --output csv > /var/log/audit/reports/port_bind_$(date +\%Y\%m\%d).csv'
整个流程不需要写 Python 脚本、不依赖数据库、不安装额外组件。关键在于规则精准匹配 bind 系统调用,并通过 -k network_bind 统一标记,后续所有提取和汇总都基于这个关键字。定期翻看 CSV 文件,就能清晰掌握哪些服务在监听、谁启动了它们、有没有异常端口(比如非标准端口上跑数据库或 SSH),真正实现端口级的可追溯审计。











