对于大多数中小企业服务器,如果没有特殊的底层网络定制需求,优先推荐用 firewalld。因为它支持动态更新规则,运维误操作导致断连的风险更低,间接提升了生产环境的安全性。
先说结论:两者底层能力一致,安全与否取决于规则配置,但 firewalld 更适合人手有限的团队维护。
- 适合:CentOS 7+/RHEL 8+ 及 Ubuntu 22.04+ 等现代发行版默认环境。
- 重点看:规则是否最小化开放端口,而非纠结工具本身的优劣。
- 别忽略:公开资料中没有看到可靠的量化数据证明谁更安全,差异主要在管理效率。
命令速用版
如果你需要快速检查当前防火墙状态,可以用以下命令:
systemctl status firewalld iptables -L -n -v
临时开放 80 端口示例(firewalld):
firewall-cmd `--zone`=public `--add-port`=80/tcp `--permanent` firewall-cmd `--reload`
临时开放 80 端口示例(iptables):
iptables -I INPUT -p tcp `--dport` 80 -j ACCEPT service iptables save
设置默认拒绝前的安全检查
警告:在远程服务器上设置默认策略为 DROP 前,务必先确认 SSH 端口(默认 22)已放行,否则会导致立即失联。
安全检查清单:
- 确认当前 SSH 会话稳定,最好保留一个备用会话窗口。
- 先执行放行 SSH 规则:
firewall-cmd `--zone`=public `--add-service`=ssh `--permanent` firewall-cmd `--reload`
- 确认新开的 SSH 窗口能正常连接后,再修改默认策略。
- 设置默认拒绝:
firewall-cmd `--zone`=public `--set-target`=DROP
为什么会这样
iptables 和 firewalld 其实都工作在 Linux 内核的 netfilter 框架上。iptables 是传统的命令行工具,规则是静态的,每次重载规则都可能中断现有连接。firewalld 是后来出现的管理层,它支持区域(zone)概念,修改规则时不需要刷新整个规则集,适合需要频繁调整策略的场景。
对于中小企业,运维人员可能不固定,firewalld 的“动态更新”特性可以减少因规则重载导致的服务中断风险。但这不代表 iptables 不安全,只是 iptables 对操作者的经验要求更高。
分步处理
1. 确认系统版本:CentOS 7 及以上默认使用 firewalld,CentOS 6 及旧版 Debian 多用 iptables。
2. 选择工具:如果系统自带 firewalld 且无特殊兼容性问题,建议直接使用;如果需要精细控制 NAT 或旧脚本依赖,则保留 iptables。
3. 配置策略:无论选哪个,默认策略都应设为拒绝(DROP),只显式放行必要端口(如 SSH、HTTP)。
4. 持久化:iptables 需要手动保存规则到配置文件,firewalld 使用 `--permanent` 参数并 reload。
怎么验证是否生效
配置完成后,不要在当前 SSH 会话直接关闭防火墙。先在另一台机器上用 telnet 或 nc 测试端口连通性。
检查日志位置(不同发行版路径不同):
| 系统/工具 | 日志路径或命令 |
|---|---|
| CentOS/RHEL (iptables) | /var/log/messages 或 dmesg |
| CentOS/RHEL (firewalld) | journalctl -u firewalld |
| Ubuntu/Debian (iptables) | /var/log/syslog 或 journalctl -k |
| Ubuntu/Debian (ufw) | /var/log/ufw.log |
如果看到 dropped 包计数增加,说明规则在起作用。
常见坑
1. 规则顺序:iptables 规则从上到下匹配,第一条匹配成功就停止,放行规则要放在拒绝规则之前。
2. 持久化失效:iptables 重启后规则丢失是因为没保存;firewalld 没加 `--permanent` 重启后失效。
3. 服务冲突:iptables 和 firewalld 不建议同时运行,可能会产生规则冲突,导致网络异常。
4. 锁机风险:未放行 SSH 直接设置默认 DROP 是最高频的生产事故,请务必遵守上述安全检查步骤。
参考来源
- Firewalld 官方文档:https://firewalld.org/documentation/
- RedHat 防火墙配置指南:Red Hat Documentation
- Ubuntu UFW 与 iptables 手册:Ubuntu Community Help