«

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。

常见坑

  1. 添加规则忘记 --permanent,重启服务器后封禁失效。
  2. 加完永久规则不 --reload,运行态没加载,IP 仍能访问。
  3. reject 写成 drop 也能拒绝,但 reject 会返回拒绝响应,drop 直接丢弃,按需选择。
  4. remove 规则串与原规则空格、引号不一致,导致删除失败。
  5. 云服务器还有控制台安全组,firewalld 只封本机,安全组要另行配置。
  6. 大批量 IP 封禁应配合 fail2ban 自动拉黑,手动逐条 rich-rule 难以维护。
  7. 误封自己的办公 IP 会导致 SSH 失联,操作前先确认来源,保留备用连接。

总结

CentOS7 永久封禁 IP 的标准命令是 firewall-cmd --permanent --add-rich-rule 加 reject 规则,再 --reload 生效,用 --list-rich-rules 核对、--remove-rich-rule 解除。单机封禁适合少量恶意 IP,规模化防护交给 fail2ban,云环境再叠加安全组形成多层拦截。

遇到问题加QQ23979811 协助处理

标签: 安全 firewalld CentOS7 封禁IP