核心是监控非预期混杂模式并实时告警:用ip -br link | awk '$1 !~ /^lo$/ && $3 ~ /PROMISC/ {print $1}'筛查异常接口,结合每5分钟巡检脚本、auditd审计、最小权限控制及进程上下文分析溯源。

新手要实现“开启网络接口混杂模式告警、及时发现内网嗅探风险”,核心不是去主动开混杂模式,而是建立对非预期混杂状态的实时监控和响应机制。因为混杂模式本身是嗅探行为的技术前提——正常运维中极少长期启用,一旦它在无人操作时突然出现,极可能意味着主机已被入侵、恶意进程正在后台抓包。
快速确认当前哪些网卡处于混杂模式
这是所有后续动作的基础。混杂模式会在接口状态中标明,推荐用以下命令筛查(注意排除回环接口 lo):
-
现代系统首选:
ip -br link | awk '$1 !~ /^lo$/ && $3 ~ /PROMISC/ {print $1}' -
兼容老系统:
ifconfig | grep -A1 'PROMISC' | grep -v 'lo\|^\s*$'
输出为空表示当前无异常;若返回类似 eth0 或 ens33,说明该接口已处于混杂模式,需立即排查。
设置每5分钟自动巡检并触发告警
手动检查不可靠,必须靠脚本+定时任务实现持续监控。建议步骤如下:
- 新建检测脚本
/usr/local/bin/check-promisc.sh,内容为:
ACTIVE_PROMISC=$(ip link show | awk '/promiscuity [1-9]/ {print $2}' | sed 's/://')
if [ -n "$ACTIVE_PROMISC" ]; then
logger -t "PROMISC-ALERT" "Unexpected promiscuous interfaces: $ACTIVE_PROMISC"
echo "$(date): ALERT — promisc mode detected on: $ACTIVE_PROMISC" | mail -s "PROMISC ALERT on $(hostname)" admin@example.com
fi
- 赋予执行权限:
sudo chmod +x /usr/local/bin/check-promisc.sh - 添加到 root 的 cron:
sudo crontab -e,加入一行:*/5 * * * * /usr/local/bin/check-promisc.sh
限制非授权启用混杂模式的能力
仅靠事后告警不够,还要从源头降低风险:
-
最小权限控制:普通用户不应能直接调用
ifconfig或ip link set promisc。可考虑移除 setuid 位:sudo chmod u-s /sbin/ifconfig /sbin/ip(操作前请在测试环境验证是否影响系统服务) -
审计关键操作:启用 auditd 记录谁执行了相关命令:
sudo auditctl -a always,exit -F path=/sbin/ifconfig -F perm=xsudo auditctl -a always,exit -F path=/sbin/ip -F perm=x
之后可用ausearch -m execve -i | grep -i promisc追溯调用来源
结合进程与上下文做异常分析
发现混杂接口后,不能只停在那里。要立刻查清“谁干的”:
- 运行
sudo lsof -i -P -n | grep LISTEN看是否有可疑监听进程 - 用
sudo ss -tulpn查看绑定到网卡的用户态程序 - 检查最近启动的进程:
ps -eo pid,ppid,cmd,lstart --sort=-lstart | head -20 - 特别关注
tcpdump、tshark、Wireshark、ngrep等工具的非交互式调用
如果这些命令由非管理员用户、未知路径或异常父进程(如 bash 被 python 启动)调用,高度可疑。

















