ufw · 防火墙门卫

上游:sudo(改防火墙规则必须 sudo)· [ping] 下游:systemctl(让服务跑起来后开放端口就靠它) 参见:Minecraft-Bedrock-Server(开 19132 端口让小伙伴连进来)


一句话是什么

ufw 是 Ubuntu 的防火墙管理工具——决定哪些端口对外开放、哪些不许碰。 服务器 = 一栋大楼,每个端口 = 一扇门,ufw = 门卫。


为什么需要它

Aaron 的 MC 服务器跑起来了,但小伙伴的 iPad 连不上。 排查一圈,问题在防火墙:

服务器里 bedrock_server 正在监听 19132 端口 ✅
但是 Ubuntu 的防火墙 **默认把所有外来的敲门挡在门外** ❌
结果:iPad 发出"我想连 19132",Ubuntu 当成陌生人直接拒绝

解决办法只有一行:

sudo ufw allow 19132/udp

这就是告诉门卫:19132 号门的访客可以进


核心用法

公式

sudo ufw [动作] [端口/协议]

常用命令表

命令说明什么时候用
sudo ufw status查看当前规则每次动手前先看一眼
sudo ufw allow 端口/协议允许某端口通过开放 MC 端口
sudo ufw deny 端口/协议拒绝某端口要关掉某个临时开的服务
sudo ufw delete allow 端口删除一条 allow 规则改错了要撤销
sudo ufw enable启用防火墙第一次设置完规则后
sudo ufw disable关闭防火墙排查问题时临时关掉
sudo ufw reset清空所有规则要重新开始设置

⚠️ 顺序陷阱(血的教训)

很多人第一次用 ufw 会这样:

sudo ufw enable                # 第一步:启用

结果:如果你是通过 SSH 远程操控的,这一下立刻把 SSH 自己也挡在门外,爸爸再也连不进来,必须跑到 Aaron 房间物理操作。

正确顺序:先把 SSH 端口(22)加进白名单, enable:

sudo ufw allow 22/tcp          # 先保命
sudo ufw allow 19132/udp       # 再开 MC 端口
sudo ufw enable                # 最后启用

Linux 笑话

Aaron 第一次配服务器,爸爸远程教他:

aaron@ubuntu:~$ sudo ufw enable
Firewall is active and enabled on system startup.

爸爸的终端突然:Connection closed by 192.168.3.43

Aaron 在 iPad 上看到:「爸爸怎么没消息了?」

爸爸走到 Aaron 房间,看他的屏幕——SSH 也被挡了。 爸爸叹了口气:「这就是为什么有个规矩叫 allow first, enable last。」

记住:防火墙是门卫,但它不认识你。enable 之前,先把自己的钥匙孔告诉它。


例题精讲

📗 初探 Starter — 看看现在的防火墙状态

# 看状态(通常 Ubuntu 默认是 inactive)
sudo ufw status
# Status: inactive
 
# 看更详细的信息
sudo ufw status verbose

📘 应用 User — 给 MC 服务器开门

# 第一步:先保命(SSH 端口)
sudo ufw allow 22/tcp
 
# 第二步:开 MC 端口(Bedrock 用 UDP,不是 TCP!)
sudo ufw allow 19132/udp          # IPv4
sudo ufw allow 19133/udp          # IPv6(某些网络需要)
 
# 第三步:启用防火墙
sudo ufw enable
# 会警告 "Command may disrupt existing ssh connections"
# 因为已经 allow 22 了,放心输入 y
 
# 第四步:确认三条规则都生效
sudo ufw status
# Status: active
# To           Action     From
# 22/tcp       ALLOW      Anywhere
# 19132/udp    ALLOW      Anywhere
# 19133/udp    ALLOW      Anywhere

📙 管理 Admin — 清理和调试

# 规则改错了怎么办?先看编号
sudo ufw status numbered
# [ 1] 22/tcp       ALLOW IN    Anywhere
# [ 2] 19132/udp    ALLOW IN    Anywhere
 
# 按编号删除第 2 条
sudo ufw delete 2
 
# 要完全重来?
sudo ufw reset          # 清空所有规则
sudo ufw disable        # 关闭防火墙
 
# 调试:怀疑防火墙挡住了请求
sudo ufw disable        # 暂时关掉
# ...测试连接...
sudo ufw enable         # 测完记得打开

端口/协议速查

服务端口/协议用途
SSH22/tcp远程终端,永远第一个 allow
HTTP80/tcp普通网站
HTTPS443/tcp加密网站
MC Bedrock (IPv4)19132/udpAaron 的服务器
MC Bedrock (IPv6)19133/udpMC 的 IPv6 通道
MC Java25565/tcpJava 版 MC(Aaron 的不是这个)

TCP vs UDP: TCP 像打电话,双方要”喂?听得到吗?“才开始说话——慢但稳。 UDP 像寄明信片,写了地址就扔出去,不管对方收不收到——快但可能丢包。 Minecraft Bedrock 选 UDP 是为了游戏响应更快。


官方文档参考

man ufw           # 完整手册
sudo ufw --help   # 快速选项

ufw = Uncomplicated FireWall;默认 deny 一切入站;allow 加白名单;enable 激活;先开 22 再 enable 是铁律。


节点链接

上游(防火墙前置知识)

  • sudo ← 改防火墙规则必须 sudo
  • ping ← 先懂”连不上”是什么,才懂”开端口”为什么

下游

同层

  • ps ← ps 看服务跑没跑,ufw 看门开没开
  • kill ← 服务不听话用 kill,请求进不来用 ufw 排查

节点版本:v1.0 · 2026-04-20 Tier 4 补充节点——防火墙门卫