openEuler 系统IP黑名单配置完整操作指南
1. 概述
在 openEuler 操作系统中,管理IP黑名单(即拒绝特定IP地址访问)主要有两种方法:
1. 使用 firewalld 防火墙(推荐):功能全面、控制力度细,适用于所有网络服务。
2. 使用 /etc/hosts.deny 文件:简单快速,但仅适用于支持 libwrap 库的传统服务(如 sshd, vsftpd)。
你可以根据以下决策树快速选择:
flowchart TD
A[开始:需配置IP黑名单] --> B{主要保护什么?}
B -->|SSH或FTP等传统服务| C[快速简单方案]
B -->|Web/数据库等所有服务<br>或需复杂规则| D[通用强大方案]
C --> E[使用 /etc/hosts.deny]
D --> F[使用 firewalld]
E --> G[操作:编辑文件,添加一行规则]
F --> H[操作:使用 firewall-cmd 命令]
G & H --> I[完成配置]
2. 方法一:使用 firewalld 防火墙(推荐)
2.1 核心概念
firewalld 是 openEuler 默认的防火墙管理器。配置黑名单的核心是使用 “富规则” ,并通过 priority 参数控制规则的优先级(数值越小,优先级越高)。
2.2 操作步骤
步骤1:确认 firewalld 服务状态
sudo systemctl status firewalld
确保服务状态为 active (running)。如果未运行,使用 sudo systemctl start firewalld 启动。
步骤2:添加黑名单规则
- 拒绝单个IP:
bash sudo firewall-cmd --zone=public --add-rich-rule='rule priority="-100" family="ipv4" source address="192.168.1.100" reject' - 拒绝一个IP段:
bash sudo firewall-cmd --zone=public --add-rich-rule='rule priority="-100" family="ipv4" source address="10.0.0.0/24" reject'
步骤3:配置默认允许规则
为确保黑名单外的IP能正常访问,可添加一条低优先级允许规则。
sudo firewall-cmd --zone=public --add-rich-rule='rule priority="100" family="ipv4" source address="0.0.0.0/0" accept'
注意:如果防火墙的默认策略已是 accept,此步骤可省略。
步骤4:使规则永久生效并重载
以上命令添加的规则是临时的。要永久保存,需添加 --permanent 参数,或执行:
# 将当前所有临时规则转为永久规则
sudo firewall-cmd --runtime-to-permanent
# 或直接添加永久规则(需重载)
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule priority="-100" family="ipv4" source address="192.168.1.100" reject'
sudo firewall-cmd --reload
步骤5:验证规则
# 查看所有富规则
sudo firewall-cmd --zone=public --list-rich-rules
# 查看防火墙全部配置
sudo firewall-cmd --zone=public --list-all
3. 方法二:使用 /etc/hosts.deny 文件
3.1 核心概念
此方法由 TCP Wrappers 提供,检查顺序为:
1. 匹配 /etc/hosts.allow -> 允许。
2. 匹配 /etc/hosts.deny -> 拒绝。
3. 均不匹配 -> 允许。
3.2 操作步骤
步骤1:编辑 hosts.deny 文件
sudo vi /etc/hosts.deny
步骤2:添加规则
在文件末尾按格式添加规则,立即生效。
# 拒绝单个IP访问SSH
sshd : 192.168.1.100
# 拒绝整个网段访问所有服务
ALL : 192.168.1.0/24
步骤3:验证(可选)
# 查看特定服务是否受TCP Wrappers保护(有libwrap依赖)
ldd $(which sshd) | grep libwrap
# 查看文件内容
cat /etc/hosts.deny
4. 两种方法对比与总结
| 特性 | /etc/hosts.deny |
firewalld (推荐) |
|---|---|---|
| 控制范围 | 仅限使用 libwrap 库的服务 |
所有网络流量和连接 |
| 功能灵活性 | 仅能控制服务与IP | 支持端口、协议、时间、连接状态等多维度 |
| 规则优先级 | 固定(hosts.allow > hosts.deny) |
可通过数值精细控制 |
| 配置持久化 | 文件修改即永久生效 | 需明确使用 --permanent 或 --runtime-to-permanent |
| 管理便利性 | 直接编辑文件,适合简单列表 | 专用命令行工具,适合复杂、动态规则 |
| 系统推荐度 | 逐渐淘汰,用于特定场景 | 主流和标准方案 |
5. 重要注意事项
- 规则优先级是核心:在
firewalld中,高优先级(数值小)的reject规则会先于低优先级(数值大)的accept规则执行。 - 永久生效:使用
firewall-cmd时,如果不加--permanent或转换,重启后临时规则会丢失。 - 立即测试:添加规则后,务必从被拒绝的IP尝试访问,以验证规则是否生效。
- 服务依赖:
/etc/hosts.deny对 Nginx、Apache(默认编译)、数据库等多数现代网络服务无效。
6. 故障排查
- 规则未生效:
- 检查 firewalld 服务状态。
- 用
sudo firewall-cmd --list-all确认规则已加载。 - 检查规则优先级是否被更高规则覆盖。
- 误封锁自己:
- 如果是 firewalld,通过物理控制台或虚拟机控制界面登录,移除错误规则。
- 如果是 hosts.deny,同样通过控制台编辑文件,在对应行前加
#注释掉。
最佳实践建议:对于生产服务器,统一使用
firewalld管理所有网络访问控制。仅在需要快速临时屏蔽某个IP访问 SSH 时,可考虑使用/etc/hosts.deny作为补充。