Ubuntu 24.04 上的 防火墙 UFW备忘

如果你刚装好 Ubuntu 24.04,打开了 SSH,部署了个 Web 服务,然后就觉得万事大吉,那我劝你别高兴得太早。

因为在公网环境下, 没有防火墙保护的 Linux,就像没装门的房子——谁想进来都可以。

今天我们就来聊聊 Ubuntu 自带的防火墙工具—— UFW(Uncomplicated Firewall),它名字虽然叫“不复杂的防火墙”,但却能为你的系统加上一道强力防线。

为什么你需要防火墙?

👉 想象一下下面这些场景:
  • 有人暴力破解你的 SSH 端口(22),你都不知道。
  • 内部数据库端口对公网开放,被扫到直接被入侵。
  • 启用了某个测试服务,忘记关闭,结果被人反复探测。
  • 服务器部署在云上,但控制台里安全组没有限制端口访问。

防火墙,就是你给 Linux 安装的第一道“护城河”。

什么是 UFW?

UFW 是 Ubuntu 官方为新手和普通用户提供的一款 iptables 的简化管理工具。 它的全称是: Uncomplicated Firewall(不复杂的防火墙),目标就是“让普通人也能用防火墙”。 与 iptables 相比,UFW 更加人性化,不需要写复杂的规则,基本上一两条命令就能搞定日常所需。

✅ Ubuntu 24.04 默认预装 UFW,但没有默认启用。

一句话总结:UFW 适合谁?

  • Linux 新手,想简单配置防火墙的
  • 轻量级服务器(如小型网站、个人 VPS)
  • 不愿意折腾复杂 iptables 表达式的开发者
  • 想快速限制端口访问、只开放必要服务的系统管理员

UFW 基本命令大全(超实用)

📦 1. 安装与启用
sudo apt update
sudo apt install ufw         # 如果没安装
sudo ufw enable              # 启用防火墙
sudo ufw status              # 查看防火墙状态

建议启用前先放行 SSH,否则可能会锁死远程连接!👇

sudo ufw allow ssh           # 等价于 sudo ufw allow 22
🔒 2. 默认策略设置
sudo ufw default deny incoming   # 拒绝所有传入连接(默认策略)
sudo ufw default allow outgoing  # 允许所有外出连接

含义:默认拦截所有进来的请求(比如别人连你网站),只允许你机器主动出去(比如 curl、apt)

✅ 3. 允许常见服务端口
sudo ufw allow 80/tcp      # 开放 HTTP
sudo ufw allow 443/tcp     # 开放 HTTPS
sudo ufw allow 22/tcp      # 开放 SSH
sudo ufw allow 3306/tcp    # (不推荐)开放 MySQL 端口

也可以用服务名:

sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx Full'
❌ 4. 拒绝特定端口或 IP
sudo ufw deny 8080         # 拒绝某端口
sudo ufw deny from 1.2.3.4 # 拒绝来自某 IP 的连接
🔍 5. 查看规则 / 状态
sudo ufw status            # 简洁状态
sudo ufw status verbose    # 显示详细信息
🔁 6. 删除规则 / 重置防火墙
sudo ufw delete allow 80
sudo ufw reset             # 清空所有规则(慎用!)
🛑 7. 临时关闭防火墙
sudo ufw disable

使用建议与实战场景

✅ 安全 SSH

新装完服务器第一件事就是:

sudo ufw allow ssh
sudo ufw enable

建议配合修改默认端口、禁止 root 登录一起做。

✅ 网站服务器

开放 HTTP 和 HTTPS:

sudo ufw allow 'Nginx Full'

如果你用 Apache:

sudo ufw allow 'Apache Full'
✅ 数据库服务

数据库(如 MySQL) 默认不要对公网开放
如果必须开放,建议加上 IP 限制:

sudo ufw allow from 192.168.1.100 to any port 3306
✅ 限制测试服务

你临时开了一个 WebSocket 服务在 9000 端口?开发完毕就立刻关掉端口:

sudo ufw deny 9000

常见误区⚠️

误区正确姿势直接开启防火墙,忘记放行 SSHufw allow ssh 必须先做!
以为系统开机自动开启 UFW检查
sudo ufw enable 是否执行误删规则但没写清端口号用
sudo ufw status numbered
delete [编号] 修改了服务端口忘记更新规则改了端口(如 SSH 从 22 改为 2222),
规则也要改以为装了 nginx 就自动放行端口不会, 要手动
ufw allow 'Nginx Full'

Ubuntu 24.04 中 UFW 的一点变化(简要)

虽然 UFW 本身没有根本性变化,但 Ubuntu 24.04 默认使用 systemd 更积极地管理服务,
且 cloud-init 也可能干涉网络配置,所以建议:

  • 在云主机上检查 cloud-init 是否覆盖防火墙配置
  • 配置完 UFW 后,使用 sudo systemctl status ufw 确保它在运行
  • 如果你用 netplan 自定义网络,也要避免端口误开放

总结:UFW 是服务器的“安全带”,必须系上

UFW 之于 Ubuntu,就像安全带之于汽车 —— 平时你可能意识不到它的存在,
但一旦出事,它就是保护你和服务安全的最后一道屏障。 所以无论你是刚入门 Linux、在云上部署服务,还是在做 side project,都请记住这条原则:

只开放你需要的端口,其他一律关闭。

再强大的模型、再牛的架构,都不如一个好好配置的防火墙来得实在。

基本设定文件

vi /etc/default/ufw
  IPV6=yes
 ↓
 IPV6=no
#IMPORTANT:must disable ufw first
ufw disable
vi /etc/ufw/user.rules
 #set rules here
 -A ufw-user-input -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT #ONLY LOCAL CAN SSH

#enable the ufw
ufw enable

ufw的命令一览表

命令 内容说明
sudo ufw status 显示当前有效的 rules
sudo ufw status numbered 显示当前有效的 rules,并按顺序编号
sudo ufw status verbose 显示详细的 rules
sudo ufw allow proto tcp from 192.168.11.0/24 to any port 22 添加规则(许可范围为 192.168.11.0/24)
sudo ufw allow https 添加 HTTPS 许可。未指定范围表示所有人都可访问
sudo ufw allow 5000/tcp 按 TCP 端口进行许可
sudo ufw allow 60000:61000/udp 按 UDP 端口范围进行许可
sudo ufw allow from 192.168.11.0/24 按 IP 范围进行许可。未指定端口/协议时,默认所有端口和协议都许可
sudo ufw delete 3 删除编号为 3 的 rule
sudo ufw delete allow 22/tcp 按 rule 删除 TCP 22 许可
sudo ufw delete deny 23/tcp 按 rule 删除 TCP 23 拒绝规则
sudo ufw enable UFW 的有效化
sudo ufw disable UFW 的无效化
sudo ufw reset UFW 无效化并加载默认设定