Ubuntu防火墙设置完整教程
UFW默认关闭,启用前必须放行SSH端口以防失联。正确顺序:检查状态、启用、确认活跃。defaultdenyincoming为安全基线,需配合allow规则,其写法影响协议与来源,删除规则应使用编号。
UFW默认处于关闭状态,未启用时不会对系统网络产生任何影响。在启用防火墙之前,必须优先放行SSH端口,否则一旦防火墙开启,远程连接可能立即中断,导致无法访问服务器。
新手常见误区:UFW状态与规则生效
许多用户执行 sudo ufw status 后看到 Status: inactive,便认为防火墙已处于运行状态。实际上,该输出明确表示UFW未加载到内核中。此前通过 allow 指令添加的规则仅保存在配置文件中,属于待执行状态,并未实际生效。即使曾执行 sudo ufw allow 22,系统仍处于无防护的“裸奔”模式。
典型翻车案例
- 添加了
sudo ufw allow 80规则,但网页始终无法访问——原因在于防火墙未启用,80端口并未真正放行。 - 执行
ufw status后显示空列表或Status: inactive——通常是因为遗漏了sudo ufw enable这一步。
正确操作流程
正确的步骤分为三步:首先检查当前状态,确认 inactive 后立即执行启用命令,最后再次确认。当看到 Status: active 以及完整的规则列表时,才表示配置已生效。

ufw default deny incoming:安全基线与端口放行
该命令并非一键封禁开关,而是将入站流量的默认行为设为“拒绝”。它不会自动开放任何端口——SSH、HTTP等所有服务都需要通过 allow 手动放行。
采用这种策略的原因:
- 防止遗漏。例如只开放了80端口却未关闭3306,
default deny会拦截所有未显式声明的端口,提供兜底防护。 - 遵循最小权限原则。仅放行明确需要的服务,避免依赖“未拒绝即放行”的不安全逻辑。
常见误操作包括:先执行 deny incoming 并添加 allow 22,但忘记执行 enable,导致规则无效;或者先 default deny 后未添加 allow 22 就直接 enable,造成SSH连接中断,彻底失去远程控制。
ufw allow 写法的差异:协议与来源控制
不同写法对端口、协议和来源的控制效果截然不同:
sudo ufw allow 22默认同时放行TCP和UDP的22端口——但SSH实际仅使用TCP,UDP 22未实际使用。sudo ufw allow 22/tcp仅放行TCP 22,更为精确,推荐采用。sudo ufw allow from 192.168.1.100 to any port 22仅允许特定IP访问SSH,安全性高于全网开放。sudo ufw allow proto tcp from 10.0.0.0/8 to any port 8080支持CIDR网段、协议与端口三重限定,体现真正的最小权限原则。
注意:ufw allow ssh 是别名写法,依赖 /etc/ufw/applications.d/ 下的预定义配置,不如直接指定端口号和协议可控。
删除规则的正确方法:避免误删与清理
若多次执行 ufw allow 80,ufw status 中会出现多条相同规则。使用 sudo ufw delete allow 80 仅删除第一条,其余规则仍会生效。
可靠的清理方式:
- 查看规则编号:
sudo ufw status numbered,输出中会显示 [1]、[2]、[3] 等序号。 - 按编号删除:
sudo ufw delete 2(例如删除第二条规则)。 - 重置所有规则:
sudo ufw reset(谨慎使用,会清空所有自定义规则,包括SSH放行)。
删除规则后无需手动reload,UFW的规则变更即实时生效,不需重启服务。
核心要点:执行顺序决定成败
最常出现的困难并非语法本身,而是执行顺序。启用防火墙必须在放行关键端口之后进行,并确保SSH等保命端口已写入规则。一旦启用后失联,所有配置都将无法执行。规则编写再完善,若未执行 enable,也等同于无效。
