下面是一个示例,说明 `iptables` 与 `firewalld` 在配置防火墙规则时的区别:
一、使用 iptables 配置防火墙规则
1. **安装 iptables-services**:
sudo yum install -y iptables-services
2. **启动 iptables 服务**:
sudo systemctl start iptables
sudo systemctl enable iptables
3. **设置默认策略**
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
4. **开放特定端口**:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
5. **保存规则**:
sudo service iptables save
6. **查看规则**:
sudo iptables -L
二、使用 firewalld 配置防火墙规则
1. **查看默认区域**:
sudo firewall-cmd --get-default-zone
2. **开放特定端口**(永久生效):
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
3. **重新加载 firewalld 使规则生效**:
sudo firewall-cmd --reload
4. **查看区域信息**:
sudo firewall-cmd --zone=public --list-all
5. **添加自定义服务**:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
6. **查看服务是否已添加**:
sudo firewall-cmd --zone=public --list-services
三、主要区别
1. **配置方式**:
- `iptables`:直接操作内核中的规则链,配置较为底层和复杂。
- `firewalld`:基于服务和区域的配置,更加人性化和易于管理。
2. **持久化**:
- `iptables`:需要手动保存规则到文件中,通常使用 `iptables-save` 命令。
- `firewalld`:配置更改默认为永久生效,无需额外保存。
3. **动态更新**:
- `iptables`:修改规则后需要手动重载或重启服务。
- `firewalld`:支持动态更新规则,修改后使用 `--reload` 即可立即生效。
4. **区域概念**:
- `iptables`:没有区域概念,需要手动管理规则。
- `firewalld`:引入了区域(zone)的概念,可以针对不同网络接口设置不同的防火墙策略。
5. **服务管理**:
- `iptables`:通常需要自定义规则来管理服务。
- `firewalld`:提供了预定义的服务,如 http、https、ssh 等,可以直接添加到区域中。
6. **工具和界面**:
- `iptables`:主要通过命令行进行管理。
- `firewalld`:提供了命令行工具 `firewall-cmd` 和图形界面工具 `firewall-config`。
通过这个示例,你可以看到 `iptables` 和 `firewalld` 在配置防火墙规则时的不同之处。`firewalld` 提供了更加现代和灵活的管理方式,而 `iptables` 则更加底层和灵活。