CentOS7防火墙永久封禁单个IP完整命令
时间:2026-11-14 07:09 作者:emer 分类: Linux
前言
服务器日志里经常看到某个 IP 反复爆破 SSH、爬接口、刷恶意请求,需要在防火墙层面把它永久封禁,而不是只靠应用层拉黑。CentOS7 使用 firewalld,封禁 IP 有临时规则和永久规则两种,只加临时规则重启后失效。本文给出 rich-rule 永久封禁、查看已封禁列表、解除封禁的完整命令,同时说明与 fail2ban、安全组的配合关系。
操作步骤
1. 永久封禁单个 IP
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'
2. 重载防火墙让规则生效
firewall-cmd --reload
--permanent 必须配合 --reload,否则规则只在运行态存在。
3. 查看所有已封禁的 rich 规则
firewall-cmd --permanent --list-rich-rules
4. 封禁整个 IP 段(示例 /24)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.0/24" reject'
firewall-cmd --reload
5. 解除某个 IP 的封禁
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'
firewall-cmd --reload
remove 后面的规则串必须和添加时完全一致,否则匹配不到。
6. 临时封禁(重启失效,用于应急)
firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'
不加 --permanent 即为运行态临时规则。
7. 验证规则是否生效
firewall-cmd --permanent --list-all
在 rich rules 段可看到被拒 IP。
常见坑
- 添加规则忘记 --permanent,重启服务器后封禁失效。
- 加完永久规则不 --reload,运行态没加载,IP 仍能访问。
- reject 写成 drop 也能拒绝,但 reject 会返回拒绝响应,drop 直接丢弃,按需选择。
- remove 规则串与原规则空格、引号不一致,导致删除失败。
- 云服务器还有控制台安全组,firewalld 只封本机,安全组要另行配置。
- 大批量 IP 封禁应配合 fail2ban 自动拉黑,手动逐条 rich-rule 难以维护。
- 误封自己的办公 IP 会导致 SSH 失联,操作前先确认来源,保留备用连接。
总结
CentOS7 永久封禁 IP 的标准命令是 firewall-cmd --permanent --add-rich-rule 加 reject 规则,再 --reload 生效,用 --list-rich-rules 核对、--remove-rich-rule 解除。单机封禁适合少量恶意 IP,规模化防护交给 fail2ban,云环境再叠加安全组形成多层拦截。
遇到问题加QQ23979811 协助处理