Linux firewalld 与 iptables 的使用取舍

发布时间 - 2026-01-28 00:00:00    点击率:
优先选firewalld:Red Hat系默认且支持热更新、多网卡zone管理;iptables适用于Debian/Ubuntu、老旧系统或需raw/mangle表、限速等精细控制场景;二者共存易冲突,应二选一并确保配置持久化。

该用 firewalld 还是 iptables?看系统默认和运维习惯

Red Hat 系列(CentOS 7+/RHEL 8+/AlmaLinux 9)默认启用 firewalld,且其服务与 iptables 服务互斥——两者同时运行会导致规则覆盖、策略失效甚至 SSH 断连。Debian/Ubuntu 默认不装 firewalld,更倾向 ufw 或直接操作 iptables。所以第一步不是选功能,而是看系统底子:已启用 firewalld 就别硬切 iptables;老旧系统(如 CentOS 6)或容器宿主机无 firewalld 时,iptables 是唯一可行选项。

需要热更新、多网卡或快速上线?选 firewalld

当你执行 firewall-cmd --add-port=8080/tcp,规则立刻生效,不影响现有 TCP 连接;而 iptables -A INPUT ... 后必须 service iptables save && systemctl restart iptables,这个 reload 过程会清空连接跟踪表,导致所有 ESTABLISHED 连接中断(比如正在传大文件的 rsync、长连接 WebSocket)。另外,firewalldzone 模型天然适配多网卡场景:外网走 public 区域(只开 SSH),内网走 internal(放行 NFS、MySQL),不用手写一堆 -i eth0/-i eth1 判断逻辑。

  • 适用场景:云服务器日常运维、CI/CD 自动部署防火墙、混合网络环境(如物理机+Docker bridge)
  • 坑点:默认策略是 全拒,不开服务/端口就什么都连不上;--permanent 必须配 --reload 才落地,漏掉 reload 就白配
  • 命令示例:firewall-cmd --permanent --zone=public --add-source=192.168.10.0/24 → 只对这个网段应用 public 规则

要精细控制包头、绕过 conntrack 或写自动化脚本?回退 iptables

firewalld 底层仍调用 iptables,但它屏蔽了 raw/mangle 表、跳转链(-j REDIRECT)、限速模块(-m limit)等能力。比如你想让某 IP 的 HTTP 请求每秒最多 5 次,iptables 一行搞定:iptables -A INPUT -s 20

3.0.113.5 -p tcp --dport 80 -m limit --limit 5/sec -j ACCEPT;而 firewalld 不支持 limit 模块,得额外套一层 rich rule(语法复杂且难调试)。

  • 适用场景:NAT 网关、透明代理、DDoS 初级防护、嵌入式设备轻量部署
  • 坑点:iptables-save 输出的是完整规则集,手动编辑 /etc/sysconfig/iptables 时缩进/空行错一个字符就会加载失败;-A-I 顺序极易搞混,导致 DROP 规则插在 ACCEPT 前面
  • 关键动作:改完务必验证:iptables -L INPUT -v -n | head -10 看计数器是否增长,再 ss -tlnp | grep :22 确认端口监听没被封死

二者共存?可以但强烈不建议

技术上 firewalld 启动后会接管 iptables 规则链(把 INPUT/FORWARD 设为 firewalld 的自定义链),此时直接用 iptables 命令加规则,大概率被 firewalld 下次 reload 清掉。反过来,若你停了 firewalld 却忘了关它自动生成的 iptables 规则,那些残留规则还会继续生效——查 iptables -L -t filter 能看到一堆 firewalld 留下的链,但 firewall-cmd 已经管不了它们。

  • 真实风险:运维交接时,有人用 firewall-cmd 开了端口,有人用 iptables -D 删了某条规则,结果发现“明明开了 80 端口却打不开”,因为删的是另一条关联链
  • 底线做法:二选一,并在 /etc/firewalld/firewalld.conf 中确认 FirewallBackend=iptables(默认值),避免误切到 nftables 后端引发兼容问题

真正容易被忽略的,是状态同步——firewalld--permanent 配置不会自动同步到运行时,iptables 的临时规则重启即丢。别信“我配好了”,一定要 firewall-cmd --runtime-to-permanentiptables-save > /etc/sysconfig/iptables 落盘,再 reboot 测试一次。


# mysql  # linux  # centos  # docker  # 防火墙  # 云服务  # 端口  # ubuntu  # websocket  # 后端  # Filter  #   # public  # internal  # input  # http  # ssh  # debian  # 自动化  # ddos  # 云服务器  # 的是  # 开了  # 有人用  # 老旧  # 就会  # 好了  # 最多  # 还会  # 当你  # 设为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  html5的keygen标签为什么废弃_替代方案说明【解答】  如何在云主机快速搭建网站站点?  微信小程序 HTTPS报错整理常见问题及解决方案  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何在阿里云通过域名搭建网站?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Python正则表达式进阶教程_复杂匹配与分组替换解析  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  深入理解Android中的xmlns:tools属性  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何自定义错误页面(404, 500)?(代码示例)  Android利用动画实现背景逐渐变暗  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  微信小程序 require机制详解及实例代码  js实现获取鼠标当前的位置  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  电商网站制作价格怎么算,网上拍卖流程以及规则?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在VPS电脑上快速搭建网站?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  java获取注册ip实例  Linux网络带宽限制_tc配置实践解析【教程】  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  EditPlus中的正则表达式 实战(2)  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel怎么实现验证码(Captcha)功能  Laravel如何使用withoutEvents方法临时禁用模型事件  Swift中循环语句中的转移语句 break 和 continue  北京专业网站制作设计师招聘,北京白云观官方网站?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel如何配置任务调度?(Cron Job示例)  html如何与html链接_实现多个HTML页面互相链接【互相】  如何快速搭建FTP站点实现文件共享?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何快速重置建站主机并恢复默认配置?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  JS实现鼠标移上去显示图片或微信二维码  jquery插件bootstrapValidator表单验证详解  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在万网自助建站平台快速创建网站?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何做网站制作流程,*游戏网站怎么搭建?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何在云服务器上快速搭建个人网站?