Ubuntu 24.04 上的 防火墙 UFW备忘2025/05/12
如果你刚装好 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 无效化并加载默认设定 |