Linux防火墙黑名单需结构化管理:用YAML定义IP/用户封禁规则,脚本自动适配iptables/ufw/firewalld执行,强制持久化、差异回滚与操作日志审计。

Linux 防火墙黑名单更新不能靠人工一条条敲命令,尤其在多台服务器或高频封禁场景下。核心思路是:把“封谁、为什么封、怎么封”结构化,再用脚本驱动防火墙工具执行,最后验证结果是否落地。
明确黑名单对象和生效层级
先区分你要拦的是 IP 还是用户,二者技术路径完全不同:
-
IP 黑名单:作用于网络层,用
iptables、ufw或firewall-cmd添加拒绝规则,适用于暴力破解、扫描、CC 攻击等; -
用户黑名单:作用于系统层,没有原生“黑名单”机制,需通过
usermod -L锁账户、usermod -s /sbin/nologin禁 shell、或/etc/ssh/sshd_config的DenyUsers控制登录,适用于离职人员、高危账号等。
用结构化文件定义黑名单清单
别直接改防火墙配置文件。推荐用 YAML 统一管理,例如 blacklist.yaml:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
entries:
- ip: "192.168.5.101"
reason: "repeated SSH brute-force"
action: "drop_input"
- ip: "203.0.113.44"
reason: "scanning /wp-login.php"
action: "reject_http"
- user: "dev_test_old"
reason: "contract expired"
action: "lock_shell"
该文件可存入 Git,每次变更触发 CI 流水线,避免误操作。
编写通用更新脚本(以 iptables + ufw 双支持为例)
一个脚本应能自动识别系统环境,并按清单逐条执行:
- 检测当前防火墙服务:
systemctl is-active ufw或systemctl is-active firewalld或 fallback 到iptables; - 对每个
ip条目:- 若用
ufw:运行ufw deny from $ip; - 若用
iptables:运行iptables -I INPUT -s $ip -j DROP,并保存至/etc/sysconfig/iptables(CentOS)或iptables-save > /etc/iptables/rules.v4(Debian);
- 若用
- 对每个
user条目:调用id $user && usermod -L $user -s /sbin/nologin 2>/dev/null,失败时记录警告; - 执行后校验:用
ufw status verbose | grep $ip或iptables -nL INPUT | grep $ip确认规则已加载。
配套必须做的三件事
光执行不等于生效,缺一不可:
-
持久化保存:ufw 自带持久化;iptables 必须显式执行
iptables-save并写入对应规则文件,否则重启丢失; -
差异比对与回滚:脚本开头读取当前生效的黑名单(如
ufw status | awk '/DENY/ {print $4}'),执行后比对新增项,异常时自动回退上一版本; -
日志与审计留痕:每条操作记录时间、操作人(如 Git commit author)、IP/user、reason 到
/var/log/firewall-blacklist.log,方便事后追溯。

















