☰
小白速通Linux——防火墙管理(上)
2026/9/28 20:50:44 网站建设 项目流程

文章目录

  • 防火墙管理
    • 1. Linux 防火墙管理
      • 1.1 防火墙是什么?
    • 2. Netfilter 子系统
      • Nftables 子系统
    • 3. 静态防火墙和动态防火墙
    • 4. Firewalld 防火墙
    • 5. Firewalld 区域 Zone
    • 6. Firewalld 规则匹配优先级
    • 7. Firewalld 配置方式
      • 两个基本概念
    • 8. firewall-cmd 核心命令与反馈
      • 8.1 zone 管理
      • 8.2 service 管理
      • 8.3 port 管理
      • 8.4 masquerade 管理
      • 8.5 forward-port 管理
    • 9. 命令速查表
    • 10. 易错点与复习自测
      • 易错点
      • 自测题
      • 自测题

防火墙管理


1. Linux 防火墙管理

1.1 防火墙是什么?

防火墙工作在网络或主机边缘,对进出网络或主机的数据包基于规则进行检查,匹配规则后按规则定义行为处理。
基本思路:默认关闭所有通过型访问,只开放允许访问的策略。
希望外网访问的主机通常放在 DMZ(隔离区)网络中。

按保护范围划分:

  • 主机防火墙:服务范围为当前一台主机。
  • 网络防火墙:服务范围为防火墙一侧的局域网。

按实现方式划分:

  • 硬件防火墙:专用硬件级别实现,如华为、华三、天融信等。
  • 软件防火墙:运行在通用硬件平台上的防火墙软件,如iptables、firewalld。

按网络协议划分:

  • 网络层防火墙:工作在 OSI 下四层,又称包过滤防火墙。依据 ACL 检查源地址、目的地址、端口号、协议状态等。
    优点:对用户透明、处理速度快、易于维护。
    缺点:无法检查应用层数据,如病毒等。
  • 应用层防火墙 / 代理服务器:工作在 OSI 七层或承担 proxy 代理网关。
    优点:提供应用层保护。
    缺点:处理速度慢。

2. Netfilter 子系统

Netfilter 是 Linux 内核中强大的网络过滤子系统。
对进入系统的每个数据包,在到达用户空间组件或应用之前进行检查,可通过编程方式修改、丢弃或路由数据包。

Netfilter 工作在内核态,用户使用以下命令配置防火墙规则:

  • iptables:过滤 IPv4 协议数据包。
  • ip6tables:过滤 IPv6 协议数据包。
  • arptables:过滤 arp 协议数据包。
  • ebtables:过滤数据链路层数据包。

命令反馈:

[root@centos7 ~]# ls -1 /sbin/*tables-rwxr-xr-x1root root5987211月62016/sbin/arptables -rwxr-xr-x.1root root70164月112018/sbin/ebtables lrwxrwxrwx.1root root138月115:45 /sbin/ip6tables ->xtables-multi lrwxrwxrwx.1root root138月115:45 /sbin/iptables ->xtables-multi

Nftables 子系统

Nftables 是 netfilter 的增强版,保留了 netfilter 架构。
优点:

  • 更快的数据包处理
  • 更快的规则集更新
  • 使用单个nft用户空间实用程序管理所有协议

3. 静态防火墙和动态防火墙

类型特点例子
静态防火墙修改规则时需要重新加载所有防火墙规则,会导致网络连接丢失iptables
动态防火墙只将变更部分保存并更新到运行中的 iptables,不需要重新加载整个规则列表firewalld

4. Firewalld 防火墙

Firewalld 是 Red Hat 开发的防火墙软件,默认后端为nftables。
在 CentOS 7 中,firewalld取代iptables成为默认防火墙软件。

Firewalld 和 iptables 的关系:

  • firewalld提供了 daemon 和 service,还有命令行和图形界面配置工具。
  • 它仅替代了iptables service部分。
  • 底层还是使用iptables作为防火墙规则管理入口。
  • 真正干活的是内核的netfilter。

5. Firewalld 区域 Zone

Firewalld 将所有网络流量分为多个区域(zone),每个 zone 就是一套过滤规则集。

常用 zone:

zone说明
trusted允许所有传入流量
public允许与 ssh 或 dhcpv6-client 预定义服务匹配的传入流量,其余拒绝。新添加网络接口的默认区域
external允许与 ssh 预定义服务匹配的传入流量,其余拒绝。默认将通过此区域转发的 IPv4 传出流量进行地址伪装
home允许与 ssh、mdns、samba-client 或 dhcpv6-client 预定义服务匹配的传入流量,其余拒绝
internal默认与 home 区域相同
work允许与 ssh、dhcpv6-client 预定义服务匹配的传入流量,其余拒绝
dmz允许与 ssh 预定义服务匹配的传入流量,其余拒绝
block拒绝所有传入流量
drop丢弃所有传入流量,并且不产生包含 ICMP 的错误响应

数据包与 zone 匹配规则:

  1. 该源地址被分配给特定区域,则应用该区域规则。
  2. 如果数据包未匹配源地址,则分配给与传入网络接口关联的区域,并应用该区域规则。
  3. 如果以上都未匹配,firewalld 将数据包分配给默认区域。

注意事项:

  • firewalld默认指定public区域为默认区域。
  • 将lo回环接口映射至trusted区域。
  • 如果流量不与允许的端口、协议或服务匹配,通常会被拒绝。

6. Firewalld 规则匹配优先级

区域内规则匹配优先级:

  1. 首先匹配为该区域设置的任何端口转发和伪装原则。
  2. 其次匹配该区域设置的任何允许规则。
  3. 最后匹配该区域设置的任何拒绝规则。
  4. 还可以同时为以上 3 类规则设置记录和审计规则,可以同时生效。
  5. 富规则中的规则优先级高于区域中其他规则。
  6. 如果区域中所有规则都不匹配,通常会拒绝该包,trusted例外。

7. Firewalld 配置方式

配置方法:

  • 直接编辑/etc/firewalld/中的配置文件。
  • firewall-cmd命令行工具。
  • firewall-config图形工具。

不建议直接修改配置文件,推荐使用firewall-cmd。

两个基本概念

  • runtime:运行态,立刻生效。
  • permanent:永久态,写入配置文件,需要--reload才生效。

配置规则必须在一个区域内。如果不使用--zone选项,则使用默认区域public。

建议配置防火墙时一次性写两条规则:

  • 第一条使用--permanent永久生效。
  • 第二条不使用--permanent立刻生效。

8. firewall-cmd 核心命令与反馈

8.1 zone 管理

# 查看 zone 清单[root@centos7 ~]# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work# 查看激活的 zone 清单[root@centos7 ~]# firewall-cmd --get-active-zonespublic interfaces: ens32# 查看默认 zone[root@centos7 ~]# firewall-cmd --get-default-zonepublic# 设置默认 zone[root@centos7 ~]# firewall-cmd --set-default-zone=trusted# 查看默认 zone 中的规则[root@centos7 ~]# firewall-cmd --list-allpublic(active)target: default icmp-block-inversion: no interfaces: ens32 sources: services: cockpit dhcpv6-clientsshports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

复习提示:--list-all不加--zone时显示默认/活动区域信息;示例输出可能因 runtime/permanent 和当前激活区域不同而变化,实际以你的环境为准。


8.2 service 管理

# 查看系统中预定义了哪些服务[root@centos7 ~]# firewall-cmd --get-services# 添加放行服务[root@centos7 ~]# firewall-cmd --add-service=http# 查看放行服务列表[root@centos7 ~]# firewall-cmd --list-servicescockpit dhcpv6-client httpssh# 查看服务是否放行[root@centos7 ~]# firewall-cmd --query-service=httpyes# 删除服务[root@centos7 ~]# firewall-cmd --remove-service=http

8.3 port 管理

# 添加放行端口[root@centos7 ~]# firewall-cmd --add-port=5900/tcp# 查看端口放行列表[root@centos7 ~]# firewall-cmd --list-ports5900/tcp# 删除端口[root@centos7 ~]# firewall-cmd --remove-port=5900/tcp

8.4 masquerade 管理

masquerade 用于 SNAT,让内网主机通过本机访问外网。

# 查看 masquerade 是否启动[root@centos7 ~]# firewall-cmd --query-masqueradeno# 启动 masquerade[root@centos7 ~]# firewall-cmd --add-masquerade# 禁用 masquerade[root@centos7 ~]# firewall-cmd --remove-masquerade

8.5 forward-port 管理

使用 port forward 前,确保对应 zone 启用 masquerade 功能。

# 访问本机端口 8000 转发到本机 80[root@centos7 ~]# firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80# 访问本机端口 1022 转发到 10.1.1.11:22[root@centos7 ~]# firewall-cmd --add-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.1.11# 查询端口转发清单[root@centos7 ~]# firewall-cmd --list-forward-portsport=8000:proto=tcp:toport=80:toaddr=port=1022:proto=tcp:toport=22:toaddr=10.1.1.11

9. 命令速查表

操作命令
查看所有 zonefirewall-cmd --get-zones
查看激活 zonefirewall-cmd --get-active-zones
查看默认 zonefirewall-cmd --get-default-zone
设置默认 zonefirewall-cmd --set-default-zone=trusted
查看当前区域规则firewall-cmd --list-all
查看预定义服务firewall-cmd --get-services
添加服务firewall-cmd --add-service=http
查看服务列表firewall-cmd --list-services
查询服务firewall-cmd --query-service=http
删除服务firewall-cmd --remove-service=http
添加端口firewall-cmd --add-port=5900/tcp
查看端口firewall-cmd --list-ports
删除端口firewall-cmd --remove-port=5900/tcp
查询伪装firewall-cmd --query-masquerade
开启伪装firewall-cmd --add-masquerade
关闭伪装firewall-cmd --remove-masquerade
添加端口转发firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80
查看端口转发firewall-cmd --list-forward-ports

10. 易错点与复习自测

易错点

  1. runtime和permanent不分:
    • 不加--permanent的命令立刻生效,但重启或--reload后可能丢失。
    • 加--permanent的命令不会立刻生效,需要--reload。
  2. 忘记指定--zone:
    • 默认使用public区域。
  3. 区域匹配顺序:
    • 源地址 → 入接口关联区域 → 默认区域。
  4. 规则优先级:
    • 端口转发/伪装 > 允许规则 > 拒绝规则;富规则优先级高于区域其他规则。
  5. forward-port前要确认对应 zone 已启用masquerade。
  6. 默认public,lo映射到trusted。
  7. 不建议直接编辑/etc/firewalld/,推荐firewall-cmd。

自测题

  • 如何查看当前默认 zone?
  • 如何添加一个永久放行http服务,并让它立刻生效?
  • firewall-cmd --add-port=5900/tcp和加--permanent有什么区别?
  • 端口转发前为什么要确认 masquerade?
    → 默认区域。
  1. 规则优先级:
    • 端口转发/伪装 > 允许规则 > 拒绝规则;富规则优先级高于区域其他规则。
  2. forward-port前要确认对应 zone 已启用masquerade。
  3. 默认public,lo映射到trusted。
  4. 不建议直接编辑/etc/firewalld/,推荐firewall-cmd。

自测题

  • 如何查看当前默认 zone?
  • 如何添加一个永久放行http服务,并让它立刻生效?
  • firewall-cmd --add-port=5900/tcp和加--permanent有什么区别?
  • 端口转发前为什么要确认 masquerade?
  • 数据包没有匹配任何源地址和接口时,会进入哪个区域?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询