微信优化

weixinyouhua

Linux防火墙配置文件是什么?怎么修改,配置方法详解

2026-10-23 12:40:43

Linux防火墙配置文件是系统安全策略的最终落点,修改它比敲命令行更持久、更可靠,核心文件位于/etc/sysconfig/iptables(iptables)与/etc/firewalld/(firewalld)目录下。很多运维新手习惯用命令行临时放行端口,重启后规则丢失才回头找配置文件,这篇文章直接把配置文件的位置、语法、修改逻辑讲透,让你从“敲命令”进阶到“改文件”。

Linux防火墙配置文件是什么?怎么修改,配置方法详解

linux防火墙配置文件在哪?三大发行版路径详解

不同发行版使用的防火墙管理工具不同,配置文件位置也有差异,搞混路径是新手最常见的错误,先用一张表厘清:

发行版 默认工具 配置文件路径 规则持久化方式
CentOS 7/8/9 firewalld /etc/firewalld/ firewall-cmd --reload
Ubuntu 18.04+ ufw /etc/ufw/ ufw reload
老牌 CentOS 6 iptables /etc/sysconfig/iptables service iptables save

红帽系(CentOS/RHEL/Fedora) 从 7 代开始主推 firewalld,但底层调用的仍然是 iptables 内核模块。/etc/firewalld/ 目录下最重要的是 zones/ 子目录,默认所有规则按“区域”划分,最常用的是 public.xml。

Ubuntu 系 走的是 ufw 封装的 iptables-restore 流程,/etc/ufw/ 下核心文件是 before.rules 和 user.rules,前者存放系统级预定义规则,后者存放用户通过 ufw allow 命令生成的规则,手动编辑后者更安全。

老版本 CentOS 6 或直接使用 iptables 服务的系统,配置文件就是 /etc/sysconfig/iptables,这个文件是纯文本,一行一条规则,用 service iptables save 或 iptables-save 命令可以把当前内存中的规则写入。

还有一部分场景需要单独留意:docker 容器环境,Docker 会自行管理 iptables 链,Linux防火墙配置文件里的规则往往被 Docker 的 DOCKER-USER 链绕过,如果你发现改了防火墙不生效,先检查是否是 Docker 安装后自动改写了 NAT 表。

深入理解 iptables 配置文件:规则、链、表的完整解读

/etc/sysconfig/iptables 文件本身是 iptables-save 命令的输出格式,直接在终端执行 iptables-save,你会看到内容与配置文件完全一致,手动编辑时,每行代表一条完整规则,结构从左到右依次是:

  • 表与链定义:filter 声明进入 filter 表,INPUT DROP [0:0] 定义 INPUT 链的默认策略为 DROP(拒绝所有未匹配流量)
  • 匹配条件:-A INPUT -p tcp --dport 22 -j ACCEPT 中 -A 表示追加到 INPUT 链,-p tcp 匹配协议,--dport 22 匹配目标端口
  • 处理动作:-j ACCEPT 表示接受,-j DROP 丢弃,-j REJECT 拒绝并返回错误信息

典型的配置示例,放行 SSH、HTTP、HTTPS 并允许回环接口:

filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
COMMIT

修改后必须重启 iptables 服务才能生效,命令为:

systemctl restart iptables

注意,直接编辑这个文件有语法风险,行业共识是:先用命令行 iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 添加规则,确认无问题后再用 service iptables save 持久化,这能避免手误导致 SSH 断连后无法恢复。

firewalld 配置文件解析:区域、服务与富规则

firewalld 的配置文件是 XML 格式,相比 iptables 的纯文本,可读性更好但层级更深,核心目录结构如下:

/etc/firewalld/
├── firewalld.conf          # 主配置
├── zones/                  # 区域配置
│   ├── public.xml          # 默认区域(一般用途)
│   ├── home.xml
│   └── internal.xml
└── services/               # 服务预定义配置
    ├── ssh.xml
    └── http.xml

查看当前默认区域以及端口放行的配置,可以使用以下命令:

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

public.xml 的结构示例:

<?xml version="1.0" encoding="utf-8"?>
<zone target="default">
  <short>Public</short>
  <description>For use in public areas.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port port="8080" protocol="tcp"/>
</zone>

最常见的运维操作是放行端口,直接编辑 XML 文件添加 <port port="8080" protocol="tcp"/> 行,然后执行:

Linux防火墙配置文件是什么?怎么修改,配置方法详解

firewall-cmd --reload

此时配置文件的规则才会加载到运行环境。firewalld 和 iptables 配置文件相比,核心差别在动态与静态:firewalld 支持运行时配置与永久配置分离,命令行修改默认只对当前会话生效,加 --permanent 选项才写入配置文件并永久保存,iptables 则没有运行时与配置之分,所有改动即时生效,需要手动保存。

如何查看linux防火墙配置文件内容并测试规则?

很多场景下你只需要“看”而不需要“改”,查看文件内容有几种不同层级的操作:

  1. 查看运行时规则(内核中实际生效的规则):

    iptables -L -n -v

    这是排查问题的第一命令,-n 不做 DNS 解析,-v 显示流量统计。

  2. 查看配置文件持久化内容:

    cat /etc/sysconfig/iptables

    如果文件不存在,说明当前规则从未被保存过。

  3. 测试规则连通性,在修改配置文件前后分别执行:

    nc -vz 服务器IP 8080

    从外部机器执行,观察端口是否可达,如果不可达,需要确认配置文件里是否已添加对应规则,且服务已重启。

查看配置与实际是否一致是 Linux 防火墙配置的高频排查方向,配置文件里有 8080 端口规则,但实际 8080 还是不通,大概率是配置文件未 reload 或者存在多套规则叠加,用 iptables -L INPUT -n --line-number 带行号查看,确认规则顺序是否正确,iptables 规则是按顺序匹配的,如果前面有一条 DROP 规则匹配了所有流量,后面的 ACCEPT 规则不会被执行。

Linux防火墙配置文件备份与恢复策略

防火墙配置文件有语法错误会导致防火墙服务无法启动,连 SSH 都会断掉,运维老手操作前必做两件事:备份原文件、准备备用连接通道。

备份命令:

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak.20260401

恢复命令:

cp /etc/sysconfig/iptables.bak.20260401 /etc/sysconfig/iptables
systemctl restart iptables

firewalld 的备份策略还应包含 zones 和 services 目录:

Linux防火墙配置文件是什么?怎么修改,配置方法详解

tar -czvf firewalld-backup.tar.gz /etc/firewalld/

近年来的行业趋势是采用配置管理工具(Ansible、Puppet)统一管理防火墙配置文件,将配置文件模板化,配合版本控制,能避免手工编辑带来的漂移问题,但即便使用自动化工具,掌握手动编辑和排错能力仍然是基本功。

Linux防火墙配置文件常见误区与评论

配置文件的语法严格,一个空格、一个引号错误都会导致整个文件无法加载,以下误区值得注意:

认为直接编辑文件比命令行更”永久”,firewalld 直接编辑配置后不 reload,规则同样不会生效,而使用带 --permanent 的命令行操作,效果与编辑文件一致。

修改配置文件后重启机器而不是重启服务,重启机器确实会加载配置文件,但时间成本高、影响面大,正确做法是执行 reload 或 restart 对应服务,几秒钟内完成。

忽略默认策略,firewalld 允许在 zone 定义中设置 target 属性,default 表示默认拒绝,ACCEPT 表示默认接受,很多配置看起来正确但实际不通,往往是因为默认策略设置与预期不同。

分不清 iptables 和 firewalld 的配置文件适用场景,CentOS 7 上即便安装了 iptables-services,与 firewalld 同时启用会发生规则冲突,这就是典型的“linux防火墙配置与iptables区别”问题,两个服务同时运行时,后启动的服务会覆盖先启动的规则链。

Linux防火墙配置与iptables区别:选择适合你的配置文件

从内核层面看,firewalld 和 iptables 最终都操作 Netfilter 模块,区别在于用户态的管理逻辑,iptables 配置文件是线性规则列表,从第一条匹配到最后一条,顺序敏感,firewalld 配置文件是分层架构,按区域、服务、端口、源地址四个维度组织规则。

使用场景对比:

维度 iptables 配置文件 firewalld 配置文件
适合场景 单机简单规则、无 Zones 需求 多网卡、多信任级别、动态更新
语法复杂度 命令行背记成本高,配置文件直观 XML 标签易读,但层级多
规则生效方式 每次修改重启服务,全量加载 支持运行时更新,不中断连接
默认策略 自定义链策略明确 按 zone 的 target 属性决定

老牌 CentOS 6 使用者更熟悉 iptables 的 A/B 面:iptables -A 追加规则与 iptables -I 插入规则的区别,反映到配置文件里就是新增行和插入行的差异。 -I 插入的规则会排在前面,优先匹配,生产环境调整规则的优先级,需要重新编辑整行位置,这就是配置文件管理成本略高的原因。

linux防火墙配置文件常见问题解答

修改linux防火墙配置文件端口放行后还是不通,排查步骤是什么?

逐层排查:先确认规则已生效,执行 iptables -L -n | grep 端口 或 firewall-cmd --list-ports,然后确认服务进程正在监听该端口,执行 netstat -tlnp | grep 端口,若规则与服务都正常,查看云平台安全组是否放行该端口,云服务器的安全组在操作系统外层,安全组拦截的流量根本到不了 Linux 防火墙,运行 tcpdump -i eth0 port 端口 看实际到达的包是否被 DROP,可以准确定位问题层。

linux防火墙配置文件语法检查怎么做?

iptables 文件没有专门语法检查工具,可以用 iptables-restore --test < /etc/sysconfig/iptables 模拟加载,该命令会提示语法或逻辑错误但不实际生效,firewalld 则使用 firewall-cmd --check-config 检查所有配置文件完整性,执行前务必保留备份、确保已有可用 SSH 会话,以免规则冲突导致连不上服务器。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待