在 CentOS 7 系统中,默认有两个防火墙管理工具:
-
firewalld
(默认的动态防火墙,基于D-Bus
管理) -
iptables
(传统的静态防火墙,底层由netfilter
提供支持)
是否需要关闭这两个防火墙,取决于你的具体需求。以下是详细分析和操作指南:
1. 两个防火墙的关系
-
firewalld
是 CentOS 7 的默认前端管理工具,底层仍然依赖iptables
/nftables
规则。 -
iptables
是直接操作内核级防火墙规则的传统工具。 -
两者同时启用可能导致规则冲突 (例如端口开放不一致),但通常
firewalld
会管理iptables
规则。
2. 是否需要关闭?
场景 | 建议操作 |
---|---|
使用 firewalld |
保持 firewalld 开启,无需关闭 iptables (firewalld 会自动管理规则)。 |
使用 iptables |
关闭 firewalld ,直接通过 iptables 配置规则(避免冲突)。 |
完全禁用防火墙 | 关闭 firewalld 并清空 iptables 规则(仅限测试环境,生产环境不推荐!)。 |
3. 操作步骤
(1)查看防火墙状态
systemctl status firewalld # 检查 firewalld 状态
systemctl status iptables # 检查 iptables 服务(通常未启用)
iptables -L -n # 查看 iptables 规则
(2)关闭 firewalld
sudo systemctl stop firewalld # 临时停止
sudo systemctl disable firewalld # 永久禁用
(3)关闭 iptables
(如需)
sudo systemctl stop iptables # 临时停止
sudo systemctl disable iptables # 永久禁用
sudo iptables -F # 清空所有规则(谨慎操作!)
(4)启用 iptables
(替代 firewalld
)
sudo yum install iptables-services # 确保 iptables 服务已安装
sudo systemctl enable iptables # 启用服务
sudo systemctl start iptables # 启动服务
4. 注意事项
-
生产环境建议保留防火墙:
-
使用
firewalld
(推荐)或iptables
至少开启一个,避免暴露所有端口。 -
通过
firewall-cmd
或iptables
命令配置放行必要端口(如 SSH、HTTP)。
-
-
firewalld
与iptables
冲突:- 如果同时修改两者,可能导致规则混乱。建议统一使用一种工具。
-
临时测试关闭防火墙:
sudo systemctl stop firewalld sudo iptables -F
5. 推荐方案
-
大多数情况 :保持
firewalld
开启,通过以下命令管理:sudo firewall-cmd --zone=public --add-port=80/tcp --permanent # 放行端口 sudo firewall-cmd --reload # 重载配置
-
需要传统
iptables
:禁用firewalld
,手动编写/etc/sysconfig/iptables
规则。
总结
需求 | 操作 |
---|---|
默认安全防护 | 保持 firewalld 开启,无需操作 iptables 。 |
使用自定义规则 | 关闭 firewalld ,启用 iptables-services 并手动配置。 |
彻底关闭防火墙 | 停止并禁用 firewalld + 清空 iptables 规则(仅限内网测试环境)。 |