Home Knowledge base Skyline Cloud 如何在 Ubuntu 22.04/24.04 上使用 firewalld 配置防火墙 KNOWLEDGE BASE

如何在 Ubuntu 22.04/24.04 上使用 firewalld 配置防火墙

一份实用且准确的指南,介绍如何在 Ubuntu 上使用 firewalld 配置防火墙——安装、使用区域、开放服务和端口、编写富规则,以及在生产环境 VPS 上安全地应用变更。

如何在 Ubuntu 22.04/24.04 上使用 firewalld 配置防火墙

一份实用且准确的指南,介绍如何在 Ubuntu 上使用 firewalld 配置防火墙——安装它、使用区域、开放服务和端口、编写富规则,以及在生产环境 VPS 上安全地应用变更。

SKYLINE Engineering @skyline

发布于 2026 年 6 月 9 日 | 阅读时间:6 分钟

防火墙是任何面向互联网的服务器的第一道防线。在 Linux 上,firewalld 在内核的 nftables/iptables 后端之上提供了一个友好的、基于区域的前端,让你能够在运行时更改规则而不中断已建立的连接。本指南将向你展示如何在 Ubuntu 22.04 或 24.04 LTS 上安装和配置 firewalld,非常适合在将托管 VPS 或云服务器暴露到公网之前进行加固。

前提条件

  • 一台 Ubuntu 22.04/24.04 服务器,并拥有一个具备 sudo 权限的非 root 用户。
  • SSH 访问权限。在配置防火墙期间,请保持当前的 SSH 会话处于打开状态,以便在把自己锁在门外时能够恢复。

第 1 步 — 安装并启动 firewalld

Ubuntu 默认自带 ufw,而非 firewalld。如果 ufw 处于启用状态,请先禁用它,以避免两个管理器争抢同一个后端:

sudo systemctl disable --now ufw

然后安装并启用 firewalld

sudo apt update
sudo apt install firewalld -y
sudo systemctl enable --now firewalld

确认它正在运行:

sudo firewall-cmd --state

你应该会看到 running

第 2 步 — 理解区域

firewalld 将规则分组到**区域(zone)**中,每个区域代表一个网络连接的信任级别。你的活动区域决定了哪些流量被允许通过。最常见的区域有:

区域 典型用途
drop 丢弃所有入站流量,不作任何回应(最严格)
block 用 ICMP 消息拒绝入站流量
public 不受信任网络的默认区域;仅允许选定的服务
internal 受信任的内部网络
trusted 允许所有流量(最宽松)

查看默认区域和活动区域:

sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones

在一台全新的服务器上,默认区域通常是 public,这对于面向公网的 VPS 来说是正确的选择。查看其中当前允许的所有内容:

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

第 3 步 — 运行时与永久:关键概念

默认情况下,每一次更改都会应用到运行时(runtime)配置中,而该配置会在重新加载或重启后丢失。要让更改持久保留,请添加 --permanent。永久更改在你重新加载之前不会生效。

安全的工作流程是:先在运行时测试,然后再持久化。持久化一个已验证可用的运行时设置,最干净的方式是:

sudo firewall-cmd --runtime-to-permanent

或者为每条规则添加 --permanent,然后重新加载:

sudo firewall-cmd --reload

--reload 会重新读取永久规则,而不会中断已建立的连接——你的 SSH 会话仍然保持存活。

第 4 步 — 在其他任何操作之前先放行 SSH

在收紧防火墙之前,请确保 SSH 已被放行,否则你下一次重连将会失败。ssh 服务涵盖了默认的 22 端口:

sudo firewall-cmd --permanent --zone=public --add-service=ssh

如果你在自定义端口(例如 2222)上运行 SSH,则应改为开放该端口:

sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp

应用它:

sudo firewall-cmd --reload

第 5 步 — 为你的应用开放服务

firewalld 通过名称识别数百个预定义服务。用 firewall-cmd --get-services 列出它们。对于一台典型的 Web 服务器,放行 HTTP 和 HTTPS:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

如果你在同一台机器上托管企业邮箱,请开放相关的提交(submission)和 IMAP 端口:

sudo firewall-cmd --permanent --zone=public --add-service=smtp-submission
sudo firewall-cmd --permanent --zone=public --add-service=imaps
sudo firewall-cmd --reload

要开放某个命名服务未涵盖的任意端口,请配合协议使用 --add-port

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

第 6 步 — 移除规则

要关闭某个服务或端口,将 add 换成 remove 并重新加载:

sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --permanent --zone=public --remove-port=8080/tcp
sudo firewall-cmd --reload

第 7 步 — 用富规则实现精细化控制

富规则(rich rules)让你能够表达简单服务无法实现的条件——例如,按来源 IP 限制访问。要仅允许来自你办公网络的 SSH 连接,并拒绝其他所有来源,请先移除宽泛的 ssh 服务,然后添加一条富规则:

sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --permanent --zone=public \
  --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
sudo firewall-cmd --reload

请先在运行时测试这条新规则(不带 --permanent),并确认你仍然能够从被允许的 IP 连接,然后再将其持久化。你也可以对某个服务进行速率限制,以减缓暴力破解尝试:

sudo firewall-cmd --permanent --zone=public \
  --add-rich-rule='rule service name="ssh" limit value="5/m" accept'

第 8 步 — 验证与审计

列出你的区域的最终状态,确认一切如预期:

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

检查永久配置是否存在语法错误:

sudo firewall-cmd --check-config

从锁定(lockout)中恢复

如果某次更改切断了你的访问,由于运行时更改会在重启后消失——所以从你服务商的控制台执行一次硬重启即可恢复到之前的永久状态。更好的做法是,通过服务商提供的控制台会话进行操作,或者在执行有风险的更改之前设置一个定时回滚。这正是运行在托管云平台上的优势所在:你拥有带外(out-of-band)控制台访问和快照,因此一条配置错误的规则永远不会让服务器变成一台死机。

结语

现在你已经拥有了一套可用的 firewalld 配置:用于划分信任级别的区域、为应用开放的命名服务和端口、用于基于来源限制的富规则,以及一套安全的运行时到永久(runtime-to-permanent)工作流程。请让规则集保持精简——只开放你需要的端口——并在每次新增服务时重新审计它。

想在一套数据始终留在沙特境内、符合 PDPL/NCA 数据驻留要求并提供本地阿拉伯语支持的基础设施上完成这样的加固吗?使用 Skyline Cloud 启动一台 VPS 或云服务器,几分钟内即可应用这些步骤。创建你的账户并立即开始

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.