当前位置: 首页 > news >正文

【Day 77】Linux-iptables防火墙

一、防火墙介绍

        防火墙是加强业务发访问安全性,是网络安全的核心组件,通过制定规则对进出网络的数据包进行过滤和控制,实现网络访问的精细化管理。

1. 类型

  • 硬件防火墙:以独立硬件设备形式存在,具备专用芯片和操作系统,处理性能强、稳定性高,适用于大型网络边界防护(如企业出口网关、数据中心边界)。华为、山石、飞宇星、深信服
  • 软件防火墙:基于操作系统内核实现,通过软件模块(如 Linux 的 netfilter)提供防护功能,成本低、配置灵活,适用于服务器单机或小型网络环境(如 CentOS 7 系统中的 iptables 和 firewalld)。

2. 作用

        防火墙的核心作用是数据过滤,基于网络五元素(源 IP、目的 IP、源端口、目的端口、协议)制定规则,实现以下功能:

  • 允许合法流量通过(如允许内部主机访问外部 HTTP 服务);
  • 阻止非法流量入侵(如拒绝外部 IP 对内部 SSH 端口的暴力破解);
  • 记录网络访问日志,用于审计和故障排查;
  • 实现地址转换(如 NAT 功能,解决内网 IP 与公网通信问题)。

3.防火墙架设

架设位置防护目标
企业内网(LAN)与互联网(Internet)之间外网恶意流量拦截
企业内网的 “不同职能区域” 之间内网横向渗透防护

数据中心 “DMZ 区(非军事区)” 与 “内网核心业务区” 之间;

或 “外网业务区” 与 “核心数据库区” 之间。

核心业务与公开业务隔离

企业分支机构与总部的 “专线 / VPN 链路” 两端;

或分支机构内网与总部内网之间

跨地域 VPN 加密与身份验证

企业本地数据中心与公有云之间;

 “云内业务区” 与 “本地核心区” 之间(通过专线 / 云 VPN 互联)

云 - 地流量加密与协同防护

 Windows的软件防火墙

4. 防火墙功能的实现

  • 内核模块:Linux 内核中的netfilter框架是防火墙功能的底层实现,负责在数据包流经内核的关键节点(如入站、出站、转发)对数据包进行拦截和处理。
  • iptables:
    • 操作 netfilter 的命令行工具,用于定义、管理和应用防火墙规则;
    • iptables 规则被加载到内核的 netfilter 钩子点,重启后内核状态丢失(需手动保存);
    • 管理方式:iptables 需手动编写复杂规则链;
    • 适用场景:iptables 适合简单固定规则场景;
  • firewall-cmd:
    • firewall-cmd是 firewalld 服务的管理工具,为 iptables 提供了更高层的抽象接口。
    • firewalld 提供图形化(firewall-config)和命令行工具,支持批量规则管理。
    • firewalld 内部维护 “运行时规则” 和 “永久规则”,修改后通过 --reload 合并到运行时,无需像 iptables 那样重新加载整个规则集,避免中断现有连接。
    • firewalld 规则存储在配置文件中,支持持久化保存。
    • firewalld 更适合需要频繁修改规则、多区域隔离的复杂环境。
  • iptables 是直接与 netfilter 交互的 “底层工具”,firewalld 则是在 iptables 之上封装的 “动态管理系统”,本质上仍通过 iptables 规则链生效。

二、iptables

(一)四表五链

        iptables 是 CentOS 7 中基于 netfilter 内核模块的防火墙工具,通过 “表” 和 “链” 的结构组织规则,实现对数据包的分层处理。

五链(按数据包流经顺序划分)

        netfilter(Linux 内核的防火墙框架)在 TCP/IP 协议栈的 5 个关键节点设置了 “钩子”函数(Hook),每个钩子对应一条默认链(Chain)。当数据包流经这些节点时,内核会触发对应的钩子,执行链中预设的规则(如 “允许”“拒绝”“转发”)。

        简单理解:钩子是 “拦截位置”,链是 “该位置的规则列表”

钩子函数对应链触发时机(数据包位置)核心作用典型应用场景
PREROUTINGPREROUTING路由决策前在路由前修改数据包(如修改目标 IP / 端口,实现端口映射、负载均衡)。
  • 端口映射(DNAT):将外部访问本机公网 IP 的 80 端口,转发到内网服务器 192.168.1.10 的 80 端口(让内网 Web 服务对外提供访问);
  • 修改数据包的目标 IP:将访问 1.2.3.4 的流量,转发到内网 192.168.1.20(隐藏内网服务器真实 IP)。
INPUTINPUT数据包目标 IP 是本机;流经协议栈到达 “本机应用层” 前控制 “哪些外部 IP / 端口可以访问本机服务”。
  • 允许外部访问本机的 80(HTTP)、443(HTTPS)端口(Web 服务);
  • 仅允许公司内网 IP(如 192.168.1.0/24)访问本机的 22(SSH)端口;
  • 拒绝所有外部 IP 访问本机的 3306(MySQL)端口(防止数据库被远程攻击)。
OUTPUTOUTPUT本机应用层发出的数据包,从 “本机应用层” 流出到协议栈时控制 “本机可以访问哪些外部资源”。
  • 禁止本机访问外网的 8080 端口(防止员工用本机访问非法代理);
  • 仅允许本机访问指定 IP 的 3306 端口(如仅允许连接公司的数据库服务器 10.0.0.5);
  • 限制本机对外的 ICMP 请求(禁止 ping 外部 IP,避免被探测)。
FORWARDFORWARD需转发(目标非本机),在 “路由转发” 过程中控制 “本机是否允许转发数据包”,即是否开启路由转发功能并限制转发规则。
  • 允许内网 192.168.1.0/24 的数据包通过本机转发到外网(开启网关功能);
  • 禁止外网数据包通过本机转发到内网(防止外部通过转发渗透内网);
  • 仅允许转发内网的 80/443 端口流量(限制内网仅能访问外网 Web 服务)。
POSTROUTINGPOSTROUTING路由决策后

在数据包离开前修改(如修改源 IP,实现 NAT 地址转换)。

  • 源地址转换(SNAT):将内网 192.168.1.0/24 的数据包源 IP,替换为本机的公网 IP(让内网设备通过一个公网 IP 访问外网);
  • 动态地址转换(MASQUERADE):当本机公网 IP 是动态获取(如拨号上网)时,自动将内网 IP 替换为当前公网 IP(比 SNAT 更灵活)。

数据包在 Linux 内核中的流转路径决定了链的触发顺序:

  • PREROUTING:路由前,数据包进入内核后首先经过,用于目标地址转换(nat 表)或标记(mangle 表);
  • 路由决策:
    • INPUT:目标为本地的数据包经过此链,用于入站过滤(filter 表);
    • FORWARD:经过本机转发的数据包经过此链,用于转发过滤(filter 表);
    • OUTPUT:本机产生的数据包经过此链,用于出站过滤(filter 表)或地址转换(nat 表);
  • POSTROUTING:路由后,数据包离开内核前最后经过,用于源地址转换(nat 表)。

        每个链不止干一件事,比如有的要 “判断能不能过(过滤)”,有的要 “改地址(NAT 转换)”—— 这就需要不同的 “专项小组” 来负责,“四表” 就是这 4 个小组,各管一部分功能。

        根据所能实现的功能不同,分为四表。

(1)filter 表:最常用的表,负责数据包过滤(允许 / 拒绝),是默认操作的表。包含 3 条链

[root@iptables ~] iptables -t filter  -nL
Chain INPUT  # 过滤流入本机的数据包(目标是本机 IP)
Chain FORWARD # 过滤经过本机转发的数据包(本机作为网关时生效)
Chain OUTPUT  # 过滤从本机流出的数据包(源是本机 IP)

(2)nat 表:负责网络地址转换,实现内网与公网的通信。包含 3 条链:

[root@iptables ~] iptables -t nat  -nL
Chain PREROUTING   # 在数据包路由前修改目的地址(如端口映射 DNAT)
Chain INPUT  # 当数据包的目标 IP是宿主机本身,且需要对这类数据包做地址转换时,才会经过 nat 表的 INPUT 链
# 宿主机有多个 IP,想让访问ip1的数据包,通过 DNAT 转换为访问ip2(目标都是宿主机,只是 IP / 端口转换),此时规则会加在 nat 表的 INPUT 链。
Chain OUTPUT # 处理本机产生的数据包的地址转换
Chain POSTROUTING  # 在数据包路由后修改源地址(如源地址转换 SNAT)

    示例场景1:nat 表如何实现 “内网访问公网”?

    以常见的 “家庭路由器” 场景为例,理解 nat 表(尤其是 POSTROUTING 链)的工作流程:

    • 内网设备发起请求:手机(192.168.1.5)访问百度(220.181.38.148),数据包源地址为 192.168.1.5,目的地址为 220.181.38.148。

    • 路由判断:路由器收到数据包后,通过路由表判断 “目的地址是公网”,需从公网网卡(如 WAN 口,IP 为 123.123.123.123)发出。

    • POSTROUTING 链执行 SNAT:数据包进入 nat 表的 POSTROUTING 链,匹配到 “内网段(192.168.1.0/24)+ 出口网卡(WAN 口)” 的规则,将源地址从 192.168.1.5 改为路由器的公网 IP(123.123.123.123),同时记录 conntrack(标记 “192.168.1.5: 端口 ↔ 123.123.123.123: 映射端口”)。

    • 公网响应返回:百度的响应数据包(目的地址 123.123.123.123)到达路由器,路由器通过 conntrack 找到对应的内网设备(192.168.1.5),将目的地址改为 192.168.1.5,最终转发给手机。

    通过这个过程,私有 IP(192.168.1.5)借助 SNAT 伪装成公网 IP,实现了与公网的通信。

    示例场景2:“公网访问内网 Web 服务器” 为例

    • 网关(路由器)有公网 IP:203.0.113.10(WAN 口,网卡 eth0),内网 IP:192.168.1.1(LAN 口,网卡 eth1)。

    • 内网有 Web 服务器:192.168.1.100:80(仅内网可达)。

    • 目标:让公网用户通过 203.0.113.10:8080 访问到内网服务器 192.168.1.100:80

    ① 公网数据包到达网关,触发 PREROUTING 链的 DNAT 转换

            公网用户发起请求:源地址=公网用户 IP:随机端口 → 目的地址=203.0.113.10:8080。数据包进入网关后,先经过 nat 表的 PREROUTING 链,匹配到 DNAT 规则:

    # iptables 规则:将公网 IP 的 8080 端口映射到内网服务器的 80 端口
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    
    • 规则作用:对从公网网卡(eth0)进入、目标端口为 8080 的 TCP 数据包,将其目的地址修改为 192.168.1.100:80

    • 转换后数据包:源地址=公网用户 IP → 目的地址=192.168.1.100:80

    ② 路由判断与转发(需配合 filter 表放行)

            DNAT 转换后,网关进行路由判断:“目的地址 192.168.1.100 属于内网,应从 LAN 口(eth1)转发”。此时数据包进入 filter 表的 FORWARD 链,需配置规则允许转发(否则会被默认策略拦截):

    # 允许从公网到内网服务器的 80 端口的转发
    iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -d 192.168.1.100 -j ACCEPT
    # 允许内网服务器的响应数据包返回公网(基于连接跟踪)
    iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 80 -s 192.168.1.100 -m state --state ESTABLISHED,RELATED -j ACCEPT
    

    ③ 内网服务器响应,通过连接跟踪返回公网

            内网服务器 192.168.1.100 收到请求后,生成响应数据包:源地址=192.168.1.100:80 → 目的地址=公网用户 IP。响应数据包到达网关时,网关通过 conntrack(连接跟踪)记录,自动将源地址从 192.168.1.100:80 还原为 203.0.113.10:8080(无需额外配置),最终返回公网用户。

    (3)mangle 表:负责修改数据包的元数据(如 TTL、TOS 字段)、设置自定义标记。包含 5 条链(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)。

    (4)raw 表:控制 iptables 的连接跟踪机制,包含 2 条链(PREROUTING、OUTPUT)。

      注意:

      1、当数据包流经某一条链(如 INPUT、FORWARD 链)时,防火墙会 从链的第一条规则开始,逐条检查匹配条件:

      • 一旦找到 第一条完全匹配 的规则(如 “允许 192.168.1.0/24 访问 22 端口”),就会执行该规则的动作(允许、拒绝、转发等),不再检查后续规则;
      • 若遍历完所有规则都没有匹配项,则执行该链的 默认策略(通常是 “拒绝所有”DROP 或 “允许所有”ACCEPT,推荐默认DROP以保证安全)。

      2、数据包流转顺序 “PREROUTING→(INPUT/FORWARD/OUTPUT)→POSTROUTING” 中,本机产生的数据包(如本机 ping 外网)不会经过 PREROUTING 链,而是直接从 “应用层→OUTPUT 链→POSTROUTING 链→出本机”。比如:本机访问外网百度,数据包路径是「本机应用层 → OUTPUT 链(过滤 /nat 转换)→ POSTROUTING 链(SNAT 改源 IP)→ 外网」,跳过 PREROUTING。

      (二)iptables 操作

              在 CentOS 7 中,默认防火墙工具是firewalld,但如果要使用iptables,需要先禁用firewalld并启用iptables服务。

      # 停止并禁用firewalld
      systemctl stop firewalld
      systemctl disable firewalld# 安装iptables服务(若未安装)
      # 保存规则到文件,实现开机持久化:安装后可通过 service iptables save 将当前规则保存到 /etc/sysconfig/iptables
      # 系统重启后规则会自动加载(否则临时规则重启后会丢失)
      yum install -y iptables-services# 启动并设置iptables开机自启
      systemctl start iptables
      systemctl enable iptables

              iptables 命令格式:iptables [-t 表名] 操作选项 [链名] [匹配条件] [-j 目标动作]

      1. 查看规则

      • 查看指定表的规则(默认 filter 表):

        iptables -nL             # 查看filter表所有链的规则(默认filter表)
        iptables -t filter -nL   # 查看filter表所有链的规则(-n:IP不解析为域名,-L:列出规则)
        iptables -t nat -nL      # 查看nat表所有链的规则iptables -nL --line-numbers  # 显示规则行号(用于删除规则)
        iptables -nL --line-numbers -v  # 显示详细信息(如数据包计数、网卡)iptables -t filter -nL INPUT --line-numbers  # 查看INPUT链的默认策略(末尾的"policy"字段)
        # policy DROP:INPUT 链的默认策略为 DROP(未匹配任何规则的数据包会被

      2. 删除规则

      • 清空指定表的所有规则(默认 filter 表):

        iptables -F  # 清空filter表所有链的规则(-F:flush)
        iptables -D 链名 规则序号  # 方式1:通过规则在链中的序号删除
        iptables -D 链名 规则内容
        iptables -t nat -F  # 清空nat表所有链的规则
        [root@iptables ~] iptables -nL INPUT       
        # DROP       tcp  --  1.1.1.1              0.0.0.0/0            tcp dpt:80
        # DROP       tcp  --  1.1.1.2              0.0.0.0/0            tcp dpt:80
        # DROP       tcp  --  1.1.1.3              0.0.0.0/0            tcp dpt:80[root@iptables ~] iptables -D INPUT 1
        [root@iptables ~] iptables -nL INPUT
        # Chain INPUT (policy ACCEPT)
        # target     prot opt source               destination         
        # DROP       tcp  --  1.1.1.2              0.0.0.0/0            tcp dpt:80
        # DROP       tcp  --  1.1.1.3              0.0.0.0/0            tcp dpt:80[root@iptables ~] iptables -D INPUT -p tcp -s 1.1.1.2 --dport 80 -j DROP
        [root@iptables ~] iptables -nL INPUT
        # Chain INPUT (policy ACCEPT)
        # target     prot opt source               destination         
        # DROP       tcp  --  1.1.1.3              0.0.0.0/0            tcp dpt:80
        

      3. 编写规则

      •  设置链的默认策略(如默认允许 / 拒绝):

        iptables -P INPUT ACCEPT  # 设置INPUT链默认策略为允许(-P:policy)
        iptables -P FORWARD DROP  # 设置FORWARD链默认策略为拒绝
        

              规则由 “匹配条件” 和 “目标动作” 组成,核心是通过网络五元素定义匹配条件,通过-j指定动作(ACCEPT 允许、DROP 拒绝、REJECT 拒绝并返回信息等)。

      iptables [-t 表名] [操作命令] [链名] [匹配条件] -j 目标动作

      基本选项
      • -t:表名
      • 操作命令
        • -I:在链的开头插入规则(优先级高,先匹配);
        • -A:在链的末尾追加规则(优先级低,后匹配);
        • -R:替换
      • 链名
      • 匹配条件(网络五元素):
        • -s:源 IP(支持单个 IP、网段,!-s 表示 “非”);
        • -d:目的 IP;
        • -p:协议(tcp/udp/icmp);
          • --sport:源端口(需配合-p使用);
          • --dport:目的端口(需配合-p使用);
          • --icmp type定义 “匹配什么类型的 ICMP 包
        • -i:流入网卡(如-i ens33,仅对 INPUT、FORWARD、PREROUTING 链有效);
        • -o:流出网卡(如-o ens33,仅对 OUTPUT、FORWARD、POSTROUTING 链有效)。
      • -j:动作ACCEPT/ DROP/REJECT/SNAT/DNAT/MASQUERADE/LOG
      常用规则示例

      假设本机ip是192.168.140.10

      • 仅允许特定 IP(192.168.140.1)通过 SSH访问本机,拒绝其他所有 IP 的 SSH 访问

        iptables -I INPUT -s 192.168.140.1 -p tcp --dport 22 -j ACCEPT
        iptables -A INPUT -p tcp --dport 22 -j DROP
        iptables -I OUTPUT -d 192.168.140.1 -p tcp --sport 22 -j ACCEPT
      • 允许所有主机都能访问本机的 HTTP 服务(80 端口):

        iptables -I INPUT -d 192.168.140.10 -p tcp --dport 80 -j ACCEPT
        
      • 拒绝 10.0.0.5 访问本机的所有端口:

        iptables -I INPUT -s 10.0.0.5 -j DROP  # 插入到开头,优先匹配
        
      • 允许本机 ping 其他主机(ICMP 协议):

        iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
        # --icmp-type echo-request:指定 ICMP 报文类型为 echo-request(即 “ping 请求”,对应 ping 命令发送的数据包)。
        
      • 允许外部主机 ping 本机:

        iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
        # echo-reply(ping 回应)
      ICMP 数字类型对应字符名称功能说明常用场景
      0echo-replyICMP 回显回应(即 “ping 的回复包”)本机回复其他主机的 ping 请求
      8echo-requestICMP 回显请求(即 “ping 的请求包”)其他主机向本机发起 ping 请求
      • 仅允许 ens33 网卡接收来自 172.16.0.0/12 网段的 HTTPS(443 端口)流量:

      iptables -A INPUT -i ens33 -s 172.16.0.0/12 -p tcp --dport 443 -j ACCEPT
      
      • 要允许 “本机访问本机” 的所有流量通过(包括本地进程间通信、回环地址访问等)

      # 允许所有通过回环接口(lo)的入站流量(本机接收的内部请求)
      iptables -A INPUT -i lo -j ACCEPT# 允许所有通过回环接口(lo)的出站流量(本机发起的内部请求)
      iptables -A OUTPUT -o lo -j ACCEPT
      • 配置防火墙允许 yum 命令正常工作

      # 注意双向通信:不仅要允许本机发起的出站请求,还要允许仓库返回的入站响应。
      # 允许 DNS 服务器返回的入站响应(源端口是 53)
      iptables -A INPUT -p udp --sport 53 -j ACCEPT
      # 允许 HTTP 仓库返回的入站响应(源端口是 80)
      iptables -A INPUT -p tcp --sport 80 -j ACCEPT
      # 允许 HTTPS 仓库返回的入站响应(源端口是 443)
      iptables -A INPUT -p tcp --sport 443 -j ACCEPT# 允许本机发起的 DNS 出站请求(访问 DNS 服务器的 53 端口)
      iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
      # 允许本机发起的 HTTP 出站请求(访问仓库 80 端口)
      iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
      # 允许本机发起的 HTTPS 出站请求(访问仓库 443 端口)
      iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

      (三)nat 表:地址转换

              nat 表用于实现网络地址转换,解决内网 IP(如 192.168.0.0/16)与公网通信的问题,核心功能为 SNAT 和 DNAT。

      1. SNAT(源地址转换)

              作用:将内网主机的源 IP 转换为网关的公网 IP,使内网主机能访问公网。

              场景:局域网内多台主机通过一个公网 IP 上网(如家庭路由器)。

              示例:假设网关服务器有两块网卡(内网 ens33:192.168.1.1,公网 ens37:203.0.113.5),允许 192.168.1.0/24 网段通过公网 IP 访问外部:

      # 开启内核转发功能(临时生效)
      echo 1 > /proc/sys/net/ipv4/ip_forward
      # 永久生效:编辑/etc/sysctl.conf,添加net.ipv4.ip_forward=1,执行sysctl -p# 添加SNAT规则:内网流量通过公网网卡出站时,源IP转换为203.0.113.5
      iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j SNAT --to-source 203.0.113.5
      # 允许内网 192.168.1.0/24 网段的流量通过网关转发到公网(出站)
      iptables -A FORWARD -s 192.168.1.0/24 -o ens37 -j ACCEPT# 允许公网对内网的响应流量通过网关转发回内网(入站)
      iptables -A FORWARD -d 192.168.1.0/24 -i ens37 -m state --state RELATED,ESTABLISHED -j ACCEPT

      若公网 IP 是动态获取的(如拨号上网),可用MASQUERADE自动适配 IP 变化:

      iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j MASQUERADE
      

      2. DNAT(目的地址转换 / 端口映射)

              作用:将公网 IP 的指定端口映射到内网主机的 IP 和端口,使外部能访问内网服务。

              场景:暴露内网 Web 服务器(192.168.1.10:80)到公网(203.0.113.5:80)。

              注意:端口冲突!指公网端口被重复映射到不同的内网服务,导致外部请求无法正确转发到目标服务。

              示例:将公网 IP(203.0.113.5)的 80 端口映射到内网 192.168.1.10 的 80 端口:

      # 允许外部访问公网IP的80端口(filter表需放行)
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 添加DNAT规则:公网流量通过PREROUTING链时,目的地址转换为内网主机
      iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
      

              注意:DNAT 需配合 filter 表规则放行转发流量(若默认策略为 DROP):

      iptables -A FORWARD -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT
      

      3、补充:Windows端口映射

      前提:① 外部网络能访问到配置的公网 IP ② 公网 IP 所在的 Windows 主机能访问内网目标(内网网卡需接入内网网段或通过路由能到达内网网段)

      # 添加端口映射:将外部端口(externalport)转发到内网 IP:端口(internaladdr:internalport)
      # 当 Windows 主机有多个公网 IP 时,任意一个公网 IP 都可以作为 listenaddress(监听地址)
      netsh interface portproxy add v4tov4 listenaddress=外部IP listenport=外部端口 connectaddress=内网IP connectport=内网端口
      # 示例:将本机(公网IP 203.0.113.5)的 8080 端口转发到内网 192.168.1.10 的 80 端口
      netsh interface portproxy add v4tov4 listenaddress=203.0.113.5 listenport=8080 connectaddress=192.168.1.10 connectport=80# 查看所有端口映射规则:
      netsh interface portproxy show all
      # 删除端口映射规则
      netsh interface portproxy delete v4tov4 listenaddress=外部IP listenport=外部端口
      # 示例:删除 203.0.113.5:8080 的映射
      netsh interface portproxy delete v4tov4 listenaddress=203.0.113.5 listenport=8080清空所有规则:
      netsh interface portproxy reset

      二、firewalld 防火墙

              firewalld 是 CentOS 7 默认的动态防火墙管理工具,基于 iptables 实现,支持动态更新规则(无需重启服务),引入 “zone(区域)” 概念简化配置。

      1. 查看 firewalld 服务运行状态

      systemctl unmask firewalld
      systemctl start firewalld   # 启动服务
      systemctl enable firewalld  # 开机自启
      systemctl status firewalld  # 查看状态(active/running为运行中)
      systemctl stop firewalld    # 停止服务
      

      2. 配置工具

      • firewall-cmd:命令行工具(推荐,支持动态配置);
      • firewall-config:图形化工具(需安装firewalld-config包,适合桌面环境)。

      3. zone(区域)

              zone 是 firewalld 的核心概念,通过预设不同安全级别(如 public、trusted、dmz)的区域,快速适配不同网络环境。

      常用区域(安全级别从高到低)

      • trusted:允许所有流量;
      • home:允许家庭网络常用服务(如 SSH、HTTP、mDNS);
      • public:默认区域,仅允许 SSH、DHCP 等必要服务;
      • dmz:隔离区,仅允许指定服务(如对外提供的 Web 服务);
      • drop:拒绝所有流入流量,仅允许流出。

      区域操作示例

      (1)查看区域的详情

      [root@firewalld ~] firewall-cmd --list-all
      # --zone=区域 参数,不写则默认default
      public (active)target: defaulticmp-block-inversion: nointerfaces: ens33sources: services: dhcpv6-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: # 查看当前区域允许的服务
      firewall-cmd --list-services

      (2)数据过滤

      # 服务名(自动对应默认端口)
      firewall-cmd  --permanent --add-service=
      # Display all 154 possibilities? (y or n)
      firewall-cmd --permanent --add-port=端口号/协议(tcp/udp)# 示例:
      # 开放 TCP 8080 端口(永久生效)
      [root@firewalld ~] firewall-cmd --permanent --add-port=8080/tcp
      # 开放 HTTP 服务(默认 80 端口)
      [root@firewalld ~] firewall-cmd --permanent --add-service=http
      # 在默认区域允许SSH服务(22/tcp)并限制源IP为192.168.1.0/24
      firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent# 重新加载规则使生效
      [root@firewalld ~] firewall-cmd --reload# 查看已开放的服务
      [root@firewalld ~] firewall-cmd --permanent --list-services# 查看已开放的端口
      [root@firewalld ~] firewall-cmd --permanent --list-ports# 查看所有预定义服务及其对应的端口
      [root@firewalld ~] firewall-cmd --get-services | xargs -I {} firewall-cmd --info-service={}
      

      (3)SNAT

      # 开启指定区域的 masquerade(永久生效)
      # 需为包含公网网卡的区域开启 masquerade(通常是 external 或 public 区域):
      # 为 external 区域开启 masquerade(推荐用于公网出口)
      firewall-cmd --permanent --zone=external --add-masquerade# 重载规则使生效
      firewall-cmd --reload

      (4)DNAT

      firewall-cmd --permanent --add-forward-port=port=源端口:proto=协议:toaddr=目标IP:toport=目标端口示例:将本地 80 端口(TCP)转发到内网 192.168.1.10 的 8080 端口# 临时开启
      echo 1 > /proc/sys/net/ipv4/ip_forward
      # 永久开启(重启生效)
      echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
      sysctl -p  # 立即生效# 添加转发规则(永久生效)
      firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=8080# 重载规则使生效
      firewall-cmd --reload# 删除规则
      firewall-cmd --permanent --remove-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=8080
      firewall-cmd --reload

      4. 自定义服务

              firewalld 通过 “服务”(预定义端口和协议的集合)简化规则配置,支持自定义服务。

      // 一个文件对应一个服务,随便打开一个查看一下定义的内容

      创建服务配置文件:

      vim /etc/firewalld/services/my-service.xml
      

      内容:

      <?xml version="1.0" encoding="utf-8"?>
      <service><short>My Service</short><description>Custom service for port 10086/tcp</description><port protocol="tcp" port="10086"/>
      </service>
      

      重新加载配置并添加服务:

      firewall-cmd --reload
      firewall-cmd --zone=public --add-service=my-service --permanent

      http://www.dtcms.com/a/490215.html

      相关文章:

    1. GitHub 热榜项目 - 日榜(2025-10-16)
    2. 爬虫汇总与实战
    3. 哪个网站做网销更好python怎么做网站
    4. dede 网站地图 插件添加图标wordpress
    5. 对比k8s的service和kube-proxy
    6. 理想汽车Java后台开发面试题及参考答案(上)
    7. Kotlin 实现社交 App 音视频模块:语音录制、播放、暂停与进度控制全流程封装
    8. Lustre/Scade 形式化语义基础 —— 同步Kahn网络 (1996)
    9. 内核空间与用户空间解读
    10. ELK运维之路(Filebeat第一章-7.17.24)
    11. 开源接口管理工具深度横评,swagger vs PostIn哪个更适合你?
    12. list的使用和模拟实现
    13. 群辉怎么做网站服务器专做投放广告网站
    14. 【34】MFC入门到精通——MFC 控件 ComboBox 运行点击控件下拉框 “终止“、“重试“、“忽略“、“引发异常”
    15. 论文见解:REACT:在语言模型中协同推理和行动
    16. Megatron-DeepSpeed 方案
    17. 停止检索!刚刚这本期刊被数据库剔除!
    18. Flink-Kafka 数据倾斜问题解决方案
    19. html 实现鼠标滑动点亮横轴
    20. 连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
    21. Web自动化(三方库:Selenium)
    22. 网站单页在线制作软件长尾关键词是什么意思
    23. 生成静态页面网站源码信息门户网站是什么
    24. 在阿里云CentOS服务器上使用Certbot为Nginx配置SSL证书
    25. 如何优化网站打开速度网站运营和管理
    26. 华为数通认证学习难吗?需掌握哪些核心知识点?
    27. 【vue】导出excel
    28. WiFi模块远程连接APP:wifi模块的应用
    29. 关闭电脑的“快速启动”功能
    30. 【MongoDB 基本语法】数据库和集合的基本操作--探秘 MongoDB