温馨提示×

CentOS防火墙版本选择建议

小樊
39
2025-11-27 18:26:04
栏目: 智能运维

CentOS 防火墙版本选择建议

一 选择总览

  • 按系统版本选择:
    • CentOS 7:优先使用 firewalld(动态规则、区域化管理,便于长期运维);如已有大量 iptables 规则或依赖,可继续使用 iptables,注意两者不要同时运行。
    • CentOS 8 / Stream 8:使用 firewalld(底层已基于 nftables,但保留 firewalld 兼容层与命令)。
    • CentOS 9 / Stream 9:优先使用 nftables(新一代 netfilter 前端,命令为 nft);如需兼容现有脚本,可启用 firewalld 的 nft 后端。
  • 按场景选择:
    • 新部署/通用服务器:优先 firewalld(7/8)或 nftables(9),运维简单、可动态变更。
    • 遗留系统/复杂精细规则:沿用 iptables(7 上)或迁移到 nftables(9 上),便于细粒度控制。
    • 容器/云原生:9/Stream 9 配套 Podmannftables 生态更一致;7 上用 firewalld 更稳妥。

二 各版本推荐与理由

系统版本 推荐方案 主要理由 何时考虑替代
CentOS 7 firewalld 默认工具,支持动态规则区域,适合长期运维;与系统服务集成好 已有大量 iptables 规则或特定内核模块依赖时,可继续用 iptables
CentOS 8 / Stream 8 firewalld(基于 nftables) 保持运维一致性;底层使用 nftables 提升性能与可扩展性 需要原生 nft 语法与高级特性时,可直接用 nftables
CentOS 9 / Stream 9 nftables 新一代 netfilter 前端,语法更简洁、性能更好;为系统默认方向 需要与旧脚本兼容时,启用 firewalld 的 nft 后端过渡

三 切换与共存注意事项

  • 不要同时运行 firewalld 与 iptables;切换时应先停止并禁用另一套服务,避免规则冲突与不可预期行为。
  • 规则持久化差异:
    • firewalld:加 –permanent 后执行 firewall-cmd --reload 才永久生效;临时规则不加 –permanent 重启后失效。
    • iptables:规则默认临时,需通过 service iptables save(CentOS 7)或相应持久化机制保存。
  • 避免误封 SSH(22/TCP):变更前先放行 22 端口,或从控制台操作,防止远程中断。
  • SELinux 的关系:SELinux 是强制访问控制(进程/文件),防火墙是网络访问控制,二者互补,建议同时开启。

四 快速检查与版本确认

  • 查看 firewalld 是否运行与版本:
    • 运行/状态:systemctl status firewalldfirewall-cmd --state
    • 版本:firewall-cmd --version(如输出示例:firewalld 0.8.4
  • 查看 iptables 规则:iptables -L -n -v
  • 查看 nftables 规则:nft list ruleset
  • 核对默认区域与规则:firewall-cmd --get-default-zonefirewall-cmd --list-all

五 实用配置示例

  • firewalld(适用于 CentOS 7/8,在 CentOS 9 亦可使用其 nft 后端)
    • 启动与开机自启:systemctl start firewalld && systemctl enable firewalld
    • 放行端口(示例:80/TCP、443/TCP、22/TCP):
      • firewall-cmd --permanent --zone=public --add-service=http
      • firewall-cmd --permanent --zone=public --add-service=https
      • firewall-cmd --permanent --zone=public --add-port=22/tcp
      • firewall-cmd --reload
  • nftables(适用于 CentOS 9 或需要原生 nft 的场景)
    • 放行端口(示例:22/TCP):nft add rule inet filter input tcp dport 22 accept
  • 验证:外部执行 curl http://服务器IPtelnet 服务器IP 80 测试连通性。

0