UFW 防火墙指南
大约 5 分钟
📋 目录
- 基础篇:防火墙开关与端口管理 (含防锁定必做步骤)
- 进阶篇:IP 白名单精细化控制
- 维护篇:状态查看、日志与故障排查
1. 基础篇:防火墙开关与端口管理
🚨 第一步:开启前的“保命”操作 (必须执行)
在输入 ufw enable 之前,必须先放行 SSH (22端口),否则你将立即失去服务器连接!
请根据你的需求,二选一执行以下命令:
方案 A:允许所有 IP 连接 SSH (方便,但安全性稍低)
# 允许全网访问 22 端口
sudo ufw allow 22/tcp
# 或者使用服务名
sudo ufw allow ssh方案 B:仅允许特定管理 IP 连接 SSH (推荐,最安全)
# 将 1.2.3.4 替换为你当前的办公网/家庭网公网 IP
sudo ufw allow from 1.2.3.4 to any port 22 proto tcp comment 'Admin SSH Only'✅ 确认:执行完上述任意一条后,才能进行下一步。
第二步:设置默认策略与开启防火墙
# 1. 设置默认拒绝所有入站 (安全基线)
sudo ufw default deny incoming
# 2. 设置默认允许所有出站 (保证服务器能上网更新软件)
sudo ufw default allow outgoing
# 3. 正式开启防火墙
sudo ufw enable系统提示 Command may disrupt existing ssh connections. Proceed with operation (y|n)? 时,因为你已经在第一步放了行,直接输入 y 即可。
第三步:开放其他业务端口
防火墙开启后,你可以随时添加新的端口规则。
A. 开放单个端口 (全网可见)
# 开放 Web 服务 (80, 443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 开放自定义应用端口
sudo ufw allow 3000/tcpB. 开放连续端口范围
# 开放 8000 到 8010 的所有 TCP 端口
sudo ufw allow 8000:8010/tcpC. 开放多个不连续端口
# 同时开放 80, 443, 8080 (注意:逗号后不能有空格)
sudo ufw allow 80,443,8080/tcp第四步:关闭或删除端口规则
方法一:按规则内容删除
# 删除之前开放的 80 端口
sudo ufw delete allow 80/tcp
# 删除端口范围
sudo ufw delete allow 8000:8010/tcp方法二:按编号删除 (推荐,更精准)
- 查看编号:
sudo ufw status numbered - 删除指定编号(例如删除第 3 条):
sudo ufw delete 3
临时完全关闭防火墙 (调试用)
sudo ufw disable2. 进阶篇:IP 白名单精细化控制
适用于生产环境,限制只有特定 IP 或内网才能访问敏感端口(如数据库、后台管理)。
2.1 核心语法提醒
UFW 的 from 参数单次只能指定一个 IP 或一个网段。
- ✅ 正确:
from 1.2.3.4或from 192.168.1.0/24 - ❌ 错误:
from 1.2.3.4,5.6.7.8(不支持逗号分隔多个 IP,需分多条命令写)
2.2 场景一:局域网专用 (允许整个网段)
允许公司内部网络访问数据库或内部服务。
# 定义变量 (方便复用)
LAN_NET="192.168.1.0/24"
# 允许该网段访问 MySQL (3306)
sudo ufw allow from $LAN_NET to any port 3306 proto tcp comment 'LAN MySQL'
# 允许该网段访问一组端口 (8000-8010)
sudo ufw allow from $LAN_NET to any port 8000:8010 proto tcp comment 'LAN App Range'2.3 场景二:同一端口,多个不同 IP 白名单
如果需要允许多个不连续的外部 IP 访问同一个端口,需多条命令。
PORT=8080
# 允许 IP A
sudo ufw allow from 1.1.1.1 to any port $PORT proto tcp comment 'Partner A'
# 允许 IP B
sudo ufw allow from 2.2.2.2 to any port $PORT proto tcp comment 'Partner B'
# 允许 IP C
sudo ufw allow from 3.3.3.3 to any port $PORT proto tcp comment 'Partner C'结果:防火墙会生成 3 条独立规则,任一 IP 匹配即放行。
2.4 场景三:批量导入大量 IP (脚本法)
当白名单 IP 超过 10 个时,建议使用脚本。
- 准备
ips.txt(每行一个 IP)。 - 运行循环:
TARGET_PORT=9000
while read -r ip; do
[ -z "$ip" ] && continue
sudo ufw allow from "$ip" to any port "$TARGET_PORT" proto tcp comment 'Batch Whitelist'
done < ips.txt3. 维护篇:状态查看与故障排查
3.1 常用查看命令
# 查看简要状态
sudo ufw status
# 查看详细状态 (显示默认策略、接口、注释)
sudo ufw status verbose
# 查看带编号的状态 (用于删除操作)
sudo ufw status numbered3.2 查看拦截日志
如果连接不通,检查是否有被 UFW 拦截的记录。
# 实时查看最新日志
sudo tail -f /var/log/ufw.log
# 搜索特定 IP 的拦截记录
grep "1.2.3.4" /var/log/ufw.log注:如果日志为空,可能是默认没开启日志记录。可执行 sudo ufw logging on 开启。
3.3 紧急救援流程
如果在配置过程中把自己锁在外面了:
- 不要慌张,不要立即重启服务器。
- 登录云服务商控制台(阿里云/AWS/腾讯云等)。
- 使用 VNC / 远程终端 / 救援模式 登录服务器(这种方式不受 UFW 限制)。
- 执行关闭命令:
sudo ufw disable - 检查并修正规则(特别是 SSH 规则)后,重新
sudo ufw enable。
💡 最佳实践总结表
| 操作类型 | 命令模板 | 示例 |
|---|---|---|
| 🚨 保命 (开启前必做) | ufw allow 22/tcp | sudo ufw allow 22/tcp |
| 全网开放端口 | ufw allow <端口>/<协议> | ufw allow 80/tcp |
| 指定 IP 开放 | ufw allow from <IP> to any port <端口> proto <协议> | ufw allow from 1.2.3.4 to any port 22 proto tcp |
| 指定网段开放 | ufw allow from <网段/CIDR> ... | ufw allow from 192.168.1.0/24 to any port 3306 proto tcp |
| 开放端口范围 | ufw allow <始>:<终>/<协议> | ufw allow 8000:8010/tcp |
| 删除规则 | ufw delete <编号> | ufw delete 5 |
| 查看日志 | tail -f /var/log/ufw.log | - |