HCRM博客

CentOS 8防火墙配置指南

CentOS 8 防火墙:系统安全的坚实防线

在当今高度互联的数字环境中,服务器安全是网站稳定运行的基石,CentOS 8 作为广泛使用的企业级操作系统,其内置的防火墙工具 firewalld 提供了强大而灵活的防护能力,是守护系统门户不可或缺的利器,理解并正确配置它,是每一位服务器管理员必备的核心技能。

认识 CentOS 8 的守护者:Firewalld

CentOS 8防火墙配置指南-图1

Firewalld 绝非简单的端口开关,它引入了动态管理的理念,核心优势在于能够在不中断现有连接的前提下,实时修改防火墙规则,这对于需要持续在线提供服务的网站服务器至关重要。

其设计围绕几个关键概念:

  • 区域 (Zones): 逻辑上的信任级别划分。public 区域适用于暴露在互联网的接口,规则最为严格;trusted 区域则允许所有流量,适用于高度信任的内部网络,系统根据接口来源自动或手动分配区域。
  • 服务 (Services): 预定义规则集,简化常用应用(如 HTTP、HTTPS、SSH、MySQL)的端口和协议管理,直接启用服务比手动开放端口更安全便捷。
  • 端口 (Ports): 允许或拒绝特定端口号及其协议(TCP/UDP)的流量。
  • 富规则 (Rich Rules): 提供细粒度控制能力,可基于源/目标 IP 地址、端口、协议甚至连接状态(如 established)创建复杂规则,满足高级安全策略需求。

掌握核心操作:命令行利器 firewall-cmd

firewall-cmd 是与 firewalld 交互的主要工具,以下命令需 root 权限执行:

  1. 状态与基础信息:

    sudo firewall-cmd --state  # 检查运行状态 (running/not running)
    sudo firewall-cmd --get-active-zones  # 查看活动区域及其绑定接口
    sudo firewall-cmd --list-all  # 列出默认区域详细配置
    sudo firewall-cmd --zone=public --list-all  # 列出指定区域详细配置
  2. 服务管理:

    CentOS 8防火墙配置指南-图2
    sudo firewall-cmd --zone=public --add-service=http  # 临时允许 HTTP
    sudo firewall-cmd --zone=public --add-service=https --permanent  # 永久允许 HTTPS
    sudo firewall-cmd --reload  # 重载使永久规则生效(不中断连接)
    sudo firewall-cmd --zone=public --remove-service=ssh  # 临时移除 SSH 服务
  3. 端口管理:

    sudo firewall-cmd --zone=public --add-port=8080/tcp  # 临时开放 TCP 8080
    sudo firewall-cmd --zone=public --add-port=10000-20000/udp --permanent  # 永久开放 UDP 端口范围
  4. 区域操作:

    sudo firewall-cmd --get-default-zone  # 查看默认区域
    sudo firewall-cmd --set-default-zone=internal  # 设置默认区域
    sudo firewall-cmd --zone=public --change-interface=eth0  # 将接口 eth0 绑定到 public 区域
  5. 富规则应用 (示例):

    # 允许来自 192.168.1.0/24 访问 TCP 3306 (MySQL)
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent
    # 拒绝来自特定 IP 10.0.0.5 的所有访问
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject' --permanent

高级特性与最佳实践

  • 运行时与永久配置: 使用 --permanent 标志的规则写入配置文件,重启后依然有效,未加此标志的规则仅运行时有效,重启 firewalld 即失效,修改永久规则后,务必执行 sudo firewall-cmd --reload 使其生效。
  • 直接接口 (Direct Interface): 处理 firewalld 自身未封装的高度定制化 iptables/nftables 规则,除非有特殊需求且理解底层原理,否则建议优先使用 firewalld 原生抽象(服务、富规则等)。
  • 端口转发: 实现将到达某端口的流量转发至内部另一地址端口的功能。
    sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.0.10 --permanent
  • 安全加固准则:
    • 最小权限原则: 仅开放业务真正需要的端口和服务,禁用所有不必要的入口。
    • SSH 安全: 限制 SSH 访问源 IP(使用富规则),或考虑更改默认端口(结合 SELinux 配置)。
    • 默认区域策略: 对暴露在公网的接口,publicdmz 区域的默认策略应设为 default (通常拒绝) 或 drop(静默丢弃),仅允许明确放行的流量。
    • 区域优先级: 一个接口只能属于一个区域,规则由该区域定义,源地址绑定规则可覆盖接口区域规则。
    • 日志记录: 利用富规则的 log 功能记录被拒绝的尝试访问,便于审计分析。
    • 定期审查规则: 业务变更时,及时清理不再需要的规则。

不可或缺的伙伴:Firewalld 与 SELinux

Firewalld 控制网络层面的访问(谁能连接哪个端口),SELinux 则强制执行系统内部的访问控制(进程即使连上了端口,能访问哪些文件/资源),两者协同工作,在 CentOS 8 上构建起纵深防御体系,配置网络服务时,务必同时考虑两者的策略。

CentOS 8防火墙配置指南-图3

常见场景处理

  • Web 服务器: 开放 http, https 服务,根据需求决定是否开放管理端口(如 SSH)。
  • 数据库服务器: 仅对应用服务器所在的 IP 段开放数据库端口(如 mysql 服务),使用富规则限定源 IP。
  • FTP 服务器: 需额外处理动态端口,通常需要加载 ftp 服务模块并配置被动端口范围。

多年运维经验让我深刻体会到,防火墙配置绝非一劳永逸的工作,CentOS 8 的 firewalld 以其动态能力和丰富的抽象层,大大简化了复杂安全策略的实施,真正的安全源于对最小权限原则的坚持、对开放服务的审慎评估以及持续监控调整的习惯,将 firewalld 视为安全基线的构建者,结合系统更新、强密码策略和入侵检测,方能打造出真正健壮的服务器环境,安全没有终点,只有持续的警惕和优化。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/38197.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~