服务公告

服务公告 > 技术教程 > iptables 与 firewalld:两代防火墙工具的关系

iptables 与 firewalld:两代防火墙工具的关系

发布时间:2026-10-11 15:45
## 同一个内核的两层皮 iptables 与 firewalld 常被当成两个对立的防火墙,其实它们都只是配置界面,真正干活的是内核的 netfilter 框架:包过滤、地址转换、连接跟踪都在内核里完成。iptables 时代规则按表和链组织,命令一条条加;firewalld 在上层引入"区域"概念,把网卡归入区域,按区域套用服务与端口策略,还支持运行态与永久态分离,动态更新规则不丢连接。理解了这层关系就明白:选哪个是选管理方式,不是选防火墙本身。新发行版里 firewalld 底层实际通过 nftables 生效,它也是 netfilter 的又一个配置界面,对使用者而言关心的仍然只是那几条命令。 ## 常用放行命令对照 放行 80 端口,iptables 的写法: ```bash iptables -A INPUT -p tcp --dport 80 -j ACCEPT ``` firewalld 的等价操作: ```bash firewall-cmd --permanent --add-service=http firewall-cmd --reload ``` firewalld 优先按服务名放行,http、ssh、mysql 都是内置服务,端口级控制用 add-port 加端口号与协议。permanent 写入永久配置,当前会话不生效,必须 reload 之后两条态才合并,这是最常见的"明明加了规则却不生效"的原因。iptables 则相反,命令即时生效但重启即失,要持久化得配合保存命令或开机脚本。 ## 别两套同时管 一台机器上两套工具同时管是事故之源:firewalld 底层也在生成 iptables 规则,人工再往 iptables 里手动加规则,两边的规则互相穿插,排查时 iptables -L 看到一堆来源不明的链,谁放行谁拒绝已经说不清。原则是选一套主用:发行版默认装了哪个就用哪个,用 firewalld 就把规则都写成 firewalld 的形式,别再手敲 iptables 命令;确需临时实验,改完记得清掉。 ## 分层与排查 云服务器还有一层平台侧防火墙:控制台里的防火墙规则与系统内这套是串联关系,两层都要放行才能通。排查不通时的顺序建议:先看云平台规则,再 firewalld 或 iptables,最后服务本身监听。在顺云控制台配置防火墙规则做外层把关,系统内防火墙管细粒度,两层各司其职,规则越少越清晰。改动规则前先把现有规则导出留档,iptables-save 的输出或 firewall-cmd 的完整列表重定向到文件,改坏了能按原样快速还原。