centos 7无法直接审计网卡promisc状态,因内核未将其作为独立审计事件暴露;需组合监控setsockopt/ioctl系统调用、网络脚本文件及ip/tcpdump等工具执行。

CentOS 7 不支持对「启用混合模式的网卡」本身设置审计规则——auditd 无法监控 promisc 状态切换行为,但可以审计触发该行为的系统调用和关键配置文件变更。
为什么不能直接 audit 网卡是否处于 promisc 模式
Linux 内核不将「网卡是否开启混杂模式」作为可审计的独立事件暴露给 audit subsystem。即使你运行了 ip link set eth0 promisc on,auditd 默认不会记录这条命令执行本身,除非你显式审计其调用的系统调用或配置文件。
-
ip命令本质是调用setsockopt()或ioctl(SIOCSIFFLAGS),这些属于系统调用层面 -
/etc/sysconfig/network-scripts/ifcfg-*文件若被修改以固化PROMISC=yes(虽极少用),则该文件变更可被监控 - auditd 的
-w规则只能监听文件访问/修改,不能监听内核接口状态变化
审计 promisc 操作必须捕获的三个关键点
要实际发现谁、何时、如何启用了混杂模式,需组合以下三类规则:
- 监控
setsockopt和ioctl系统调用,过滤含IFF_PROMISC标志的操作:-a always,exit -F arch=b64 -S setsockopt -F a2&0x100 -k promisc_syscall-a always,exit -F arch=b64 -S ioctl -F a2&0x100 -k promisc_syscall - 监控网络脚本文件是否被篡改(防止持久化混杂配置):
-w /etc/sysconfig/network-scripts/ -p wa -k promisc_config - 监控常用工具二进制文件执行(如
ip、ifconfig、tcpdump):-w /usr/sbin/ip -p x -k promisc_tool-w /usr/sbin/tcpdump -p x -k promisc_tool
规则写入与生效的实操要点
不要直接编辑 /etc/audit/rules.d/audit.rules 后仅 reload,必须确保规则持久且架构匹配:
- 所有规则必须保存到
/etc/audit/rules.d/promisc.rules(后缀必须为.rules),而非追加到主文件 - 必须区分
arch=b64和arch=b32;CentOS 7 默认为 x86_64,但若运行 32 位程序(如某些旧版抓包工具),需补b32规则 - 加载后检查是否生效:
sudo auditctl -l | grep promisc;若无输出,说明规则未加载或语法错误 - 重启
auditd服务不是必须操作,sudo augenrules --load即可重载全部/etc/audit/rules.d/下的规则
验证与日志排查最容易忽略的一环
即使规则正确加载,ausearch -m avc -ts recent 或 ausearch -k promisc_syscall 可能查不到记录——因为默认 auditd 不记录非 SELinux AVC 事件的详细参数。你需要确认:
-
/etc/audit/auditd.conf中log_format = ENRICHED(推荐)或至少为RAW,避免丢失a2等字段 -
ausearch -i -k promisc_syscall要加-i才能解析符号(如把a2=256翻译成IFF_PROMISC) - 手动测试时用
sudo ip link set eth0 promisc on,再立刻查日志;别依赖脚本或后台进程,它们可能绕过 audit 路径
真正难的不是加几行规则,而是确认内核真的把那个标志位变化转化成了 audit 事件——这依赖于系统调用路径是否被 audit 子系统拦截,而某些容器或 namespace 环境下会失效。











