Ubuntu防火墙设置完整教程

作者:技术拾光时间:2026-06-28 08:51:01浏览:368

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 以及完整的规则列表时,才表示配置已生效。

Ubuntu防火墙设置完整教程

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,也等同于无效。