CentOS 7网络防火墙配置文件详解,位置、管理与实战

LEAF
CentOS 7默认采用firewalld作为网络防火墙管理工具,其核心配置文件位于/etc/firewalld/目录,主要包括主配置文件firewalld.conf及zones子目录下的区域策略文件(如public.xml),管理上可通过firewall-cmd命令实现动态配置,支持实时生效与持久化规则,如开放端口(--add-port)、服务(--add-service)及自定义策略,实战中需结合安全需求调整区域信任级别,例如将Web服务(80/443端口)加入public区域,并通过--reload应用变更,确保系统访问安全可控。

CentOS 7作为企业级Linux发行版的代表,其网络防火墙默认采用firewalld而非传统的iptablesfirewalld支持动态管理、区域(Zone)策略和丰富的服务定义,核心配置文件位于/etc/firewalld/目录下,本文将详细解析CentOS 7防火墙配置文件的位置、结构、常用操作及实战案例,帮助读者掌握防火墙的底层配置逻辑。

CentOS 7防火墙配置文件概述

firewalld是动态防火墙管理工具,采用“区域”划分网络信任级别,每个区域对应一套规则集(如开放端口、允许服务等),其配置文件分为两类:

  1. 主配置文件:定义防火墙的全局行为(如运行模式、日志级别);
  2. 区域/服务配置文件:具体区域的规则定义(如开放端口、允许的服务)。

1 核心配置文件位置

firewalld的所有配置文件均位于/etc/firewalld/目录下,主要文件及作用如下:

CentOS 7网络防火墙配置文件详解,位置、管理与实战

文件/目录 作用说明
/etc/firewalld/firewalld.conf 防火墙主配置文件,定义全局参数(如运行模式、默认区域、日志级别)
/etc/firewalld/zones/ 区域配置文件目录,存放各区域的规则定义(如public.xmldmz.xml
/etc/firewalld/services/ 服务配置文件目录,存放预定义服务的规则(如http.xmlssh.xml
/etc/firewalld/policies/ 策略配置文件目录,用于管理区域间的默认策略
/usr/lib/firewalld/ 系统默认配置文件目录(不建议修改,修改后可能被覆盖)

2 区域(Zone)与服务(Service)概念

  • 区域:根据网络环境划分的信任级别,默认区域为public(公共网络),常用区域包括:

    • trusted:信任所有流量(完全开放);
    • public:公共网络(仅开放必要服务);
    • dmz:隔离区(仅允许特定访问);
    • drop:丢弃所有流量(最高安全级别)。
  • 服务:预定义的端口与协议组合(如http对应80端口/TCP,https对应443端口/TCP),服务定义在/etc/firewalld/services//usr/lib/firewalld/services/中,以.xml文件形式存储。

主要配置文件解析

1 主配置文件:/etc/firewalld/firewalld.conf

该文件控制防火墙的全局行为,核心参数如下:

[Firewall]
DefaultZone=public       # 默认区域(默认为public)
IPv6Filtering=yes        # 是否启用IPv6过滤(默认启用)
CleanupOnExit=yes        # 退出时清理临时规则(默认启用)
Lockdown=no             # 是否启用锁定模式(锁定后禁止修改规则)
LogLevel=INFO           # 日志级别(OFF/NOTICE/WARNING/ERR/INFO/DEBUG)

示例:若需修改默认区域为trusted,编辑DefaultZone=trusted并重启防火墙(或使用firewall-cmd --set-default-zone=trusted)。

2 区域配置文件:/etc/firewalld/zones/

区域配置文件以.xml命名,如public.xml(公共区域)、home.xml(家庭网络区域),文件结构包含区域属性和服务/端口规则。

示例:/etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks but may allow selected incoming connections.</description>
  <service name="ssh"/>          <!-- 允许SSH服务(默认开放) -->
  <service name="dhcpv6-client"/> <!-- 允许DHCPv6客户端 -->
  <port protocol="tcp" port="8080"/> <!-- 开放8080端口/TCP -->
  <icmp-block name="source-quench"/> <!-- 禁止source-quench ICMP报文 -->
</zone>

核心标签说明

  • <short>:区域简称(如Public);
  • <description>:区域描述;
  • <service name="xxx"/>:允许预定义服务(如sshhttp);
  • <port protocol="tcp/udp" port="xxx"/>:开放指定端口(如8080/tcp);
  • <icmp-block name="xxx"/>:禁止指定ICMP类型(如source-quench);
  • <masquerade>:启用IP地址伪装(NAT)。

3 服务配置文件:/etc/firewalld/services/

服务定义了端口号、协议及可选的源地址限制。http.xml(HTTP服务)定义如下:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>HTTP</short>
  <description>HyperText Transfer Protocol (HTTP)</description>
  <port protocol="tcp" port="80"/>
</service>

自定义服务:若需定义新服务(如myapp监听9090/tcp),可:

  1. /etc/firewalld/services/下创建myapp.xml同上,修改portshort);
  2. 使用firewall-cmd --reload加载新服务。

常用配置操作(文件与命令结合)

1 查看当前配置

  • 查看默认区域firewall-cmd --get-default-zone
  • 查看所有区域firewall-cmd --get-active-zones
  • 查看区域规则firewall-cmd --zone=public --list-all
  • 查看服务定义cat /etc/firewalld/services/http.xml

2 修改区域配置(文件方式)

public区域为例,开放8080/tcp端口并允许myapp服务:

  1. 编辑/etc/firewalld/zones/public.xml,添加以下内容:

    <service name="myapp"/>
    <port protocol="tcp" port="8080"/>
  2. 重新加载防火墙使配置生效:

    firewall-cmd --reload

3 修改区域配置(命令方式)

若需临时开放8080/tcp(不持久化):

firewall-cmd --zone=public --add-port=8080/tcp

若需永久开放8080/tcp(重启后生效):

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

4 端口转发配置

假设将80端口转发至8080(需启用IP伪装):

  1. 编辑/etc/firewalld/zones/public.xml,添加<masquerade/>

    <masquerade/>
  2. 使用命令添加转发规则:

    firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
    firewall-cmd --reload

实战案例:配置Web服务器防火墙规则

场景需求

  • 允许HTTP(80端口)和HTTPS(443端口)访问;
  • 允许SSH(22端口)远程管理;
  • 禁用其他所有端口;
  • 仅允许IP168.1.100访问SSH服务。

操作步骤

  1. 确认默认区域为public

    firewall-cmd --get-default-zone
  2. 开放HTTP和HTTPS服务

    firewall-cmd --zone=public --add-service=http --permanent
    firewall-cmd --zone=public --add-service=https --permanent
  3. 开放SSH服务并限制IP

    • 方法1:通过富规则(Rich Rule)限制IP
      firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
    • 方法2:直接修改区域配置文件
      编辑/etc/firewalld/zones/public.xml,添加:
      <rule family="ipv4">
        <source address="192.168.1.100"/>
        <service name="ssh"/>
        <accept/>
      </rule>
  4. 禁用其他服务(可选)

    firewall-cmd --zone=public --set-target=DROP --permanent
  5. 重新加载防火墙

    firewall-cmd --reload
  6. 验证规则

    firewall-cmd --zone=public --list-all

    输出应包含:services: http https sshrich rules: rule family="ipv4" source address="192.168.1.100" service name="ssh" accept

常见问题及解决

1 防火墙启动失败

  • 原因:配置文件语法错误(如XML标签未闭合)。
  • 解决:检查/etc/firewalld/zones/下XML文件语法,使用xmllint --noout /etc/firewalld/zones/public.xml验证。

2 端口开放后仍无法访问

  • 排查步骤
    1. 检查防火墙规则:firewall-cmd --zone=public --list-ports(确认端口已添加);
    2. 检查服务监听:netstat -tuln | grep 80(确认服务监听0.0.0.0或特定IP);
    3. 检查SELinux:getsebool -a | grep httpd_can_network_connect(若为off,需setsebool -P httpd_can_network_connect=1)。

3 配置文件修改不生效

  • 原因:未使用--permanent或未重新加载。
  • 解决:修改配置文件后,必须执行firewall-cmd --reload(临时规则无需--permanent,但重启后失效)。

CentOS 7防火墙(firewalld)的核心配置文件位于/etc/firewalld/,通过区域和服务规则实现精细化的网络访问控制,理解主配置文件、区域配置文件和服务配置文件的结构,结合firewall-cmd命令与文件修改,可以灵活满足不同场景的安全需求,在实际操作中,需注意“临时规则”与“永久规则”的区别,并定期检查规则有效性,确保防火墙策略既安全且高效。

文章版权声明:除非注明,否则均为XMSDN - MSDN原版系统镜像 | 纯净ISO系统下载原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码