应监控本机网卡是否非预期进入混杂模式并实时告警:用ip link show | grep -b1 'promiscuity 1'或ifconfig | grep -a1 'promisc'筛查,结合定时脚本巡检、auditd审计关键命令、最小权限控制及进程上下文分析来识别异常。

新手配置Linux网卡混杂模式本身不难,但“告警及时发现嗅探”不是靠开启混杂模式实现的——恰恰相反,混杂模式是被嗅探的前提条件。真正要做的是:监控本机网卡是否**非预期地进入混杂模式**,并在发生时立即告警。这属于安全审计范畴,不是网络配置任务。
确认当前哪些网卡处于混杂模式
这是所有后续动作的基础。混杂模式会在接口标志中体现为 PROMISC(ifconfig)或 promiscuity 1(ip link)。推荐用以下命令快速筛查:
-
用 ip 命令检查(推荐,现代系统默认支持):
ip link show | grep -B1 'promiscuity 1' -
用 ifconfig 检查(兼容老系统):
ifconfig | grep -A1 'PROMISC' -
只列出疑似异常的接口(排除 lo):
ip -br link | awk '$1 !~ /^lo$/ && $3 ~ /PROMISC/ {print $1}'
设置定时巡检并触发告警
混杂模式本应由管理员主动启用(如运行 tcpdump、Wireshark),若无人操作却突然出现,极可能意味着主机已被入侵或恶意程序在后台抓包。建议每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 - 添加到 cron(以 root 运行):
sudo crontab -e,加入一行:*/5 * * * * /usr/local/bin/check-promisc.sh
限制非授权进程启用混杂模式
仅靠巡检不够,需从源头降低风险:
-
最小权限原则:禁止普通用户执行
ifconfig或ip link set ... promisc。可通过chmod u-s /sbin/ifconfig /sbin/ip去掉 setuid 位(注意:某些发行版依赖此机制,操作前先测试) -
审计系统调用:启用 auditd 监控关键命令:
sudo auditctl -a always,exit -F path=/sbin/ifconfig -F perm=x和sudo auditctl -a always,exit -F path=/sbin/ip -F perm=x,再用ausearch -m execve -i | grep -i promisc追溯谁执行了混杂操作 -
禁用未使用的网卡:物理或逻辑关闭闲置接口(
ip link set eth1 down),减少攻击面
区分合法与可疑的混杂行为
不是所有混杂模式都危险。需结合上下文判断:
-
可信场景:你刚运行
sudo tcpdump -i eth0;或 IDS(如 Snort)服务正在运行;或调试时手动启用了ip link set eth0 promisc on -
高危信号:混杂模式出现在无相关服务运行的时刻;出现在非管理网卡(如 docker0、virbr0)上;与未知进程关联(用
lsof -i -n -P | grep "eth0"或ss -tulpn | grep promisc辅助排查) -
辅助验证:执行
ps aux --forest | grep -E "(tcpdump|wireshark|tshark|snort|zeek)"确认是否有已知抓包进程存活











