Linux下检测防火墙状态并异常告警的核心是判断服务运行、规则生效,并通过日志、邮件或Webhook通知;需先识别firewalld/ufw/iptables类型,再分步检测服务状态、自启配置及规则有效性,最后用cron定时执行带锁机制的脚本。

Linux 下检测防火墙状态并异常告警,核心是判断防火墙服务是否运行、规则是否生效,并在异常时及时通知(如发邮件、写日志或调用 API)。不依赖图形界面,纯命令行 + Shell 脚本即可实现。
确认当前使用的防火墙类型
不同发行版默认防火墙不同:CentOS/RHEL 7+ 默认用 firewalld,Ubuntu/Debian 多用 ufw,老系统或自定义环境可能直接用 iptables。脚本开头需先识别:
- 检查 firewalld:
systemctl is-active firewalld(返回active表示运行中) - 检查 ufw:
ufw status | grep -q "Status: active" - 检查 iptables 规则是否非空:
iptables -L -n | grep -q "^[[:space:]]*Chain"
编写基础检测逻辑
脚本需分三步:探测服务状态 → 验证规则有效性 → 判定是否异常。例如 firewalld 场景:
- 服务是否启动:
systemctl is-active --quiet firewalld - 是否启用开机自启:
systemctl is-enabled --quiet firewalld - 是否有活跃 zone 或规则:
firewall-cmd --get-active-zones | grep -q .或firewall-cmd --list-all &>/dev/null - 若任一条件失败,即视为异常状态
配置告警方式(轻量实用)
生产环境推荐至少两种告警路径,避免单点失效:
-
本地日志记录:用
logger -t "firewall-check" "firewalld down at $(date)",日志自动进入/var/log/messages或 journal -
邮件通知:确保已配置
mail命令(如 msmtp 或 mailutils),执行echo "Firewall offline!" | mail -s "ALERT: Firewall Down" admin@example.com -
简单 webhook(如钉钉/企业微信):用
curl -X POST -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content":"Firewall abnormal!"}}' https://your-webhook-url
部署为定时任务
把脚本保存为 /usr/local/bin/check-firewall.sh,加执行权限:chmod +x /usr/local/bin/check-firewall.sh。再通过 cron 每 5 分钟运行一次:
建议首次手动运行测试输出,确认日志或邮件能正常触发。可加锁机制(如 flock)防止重复执行冲突。


















