Ubuntu 20.04 如何使用 ufw 配置只允许特定 IP 访问 SSH 端口?

文章导读
在 Ubuntu 20.04 上,最稳妥的做法是先放行当前管理 IP,再开启防火墙,最后默认拒绝其他所有 SSH 连接,这样能避免把自己锁在服务器外面。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在 Ubuntu 20.04 上,最稳妥的做法是先放行当前管理 IP,再开启防火墙,最后默认拒绝其他所有 SSH 连接,这样能避免把自己锁在服务器外面。

先说结论:使用 UFW 限制 SSH 访问是有效的安全加固手段,但操作顺序错误会导致无法远程登录。

  • 先判断:确认当前登录 IP 和服务器控制台访问权限
  • 优先做:在启用防火墙前先将可信 IP 加入白名单
  • 再验证:保持当前会话不断开,新开窗口测试连接

命令速用版

# 1. 允许特定 IP 访问 SSH 端口(替换 192.168.1.100 为你的 IP)
sudo ufw allow from 192.168.1.100 to any port 22

# 2. 如果 SSH 端口被修改过(例如 2222),使用以下命令
sudo ufw allow from 192.168.1.100 to any port 2222

# 3. 启用防火墙(确保已执行第 1 步)
sudo ufw enable

# 4. 查看状态
sudo ufw status verbose

为什么会这样

UFW(Uncomplicated Firewall)是 Ubuntu 默认集成的防火墙配置工具,底层基于 netfilter 和 iptables。默认情况下,Ubuntu 20.04 安装后 UFW 通常处于禁用状态,或者默认策略为允许所有出站、拒绝所有入站。如果不先添加允许规则直接启用防火墙,且默认入站策略为拒绝,所有的 SSH 连接请求都会被丢弃,导致远程管理中断。

分步处理

第一步:检查当前防火墙状态
执行命令 sudo ufw status。如果显示 Status: inactive,说明防火墙未开启,此时修改规则是安全的。如果显示 active,则需要格外小心,确保新规则生效后再调整默认策略。

Ubuntu 20.04 如何使用 ufw 配置只允许特定 IP 访问 SSH 端口?

第二步:添加可信 IP 白名单
使用 sudo ufw allow from <你的 IP> to any port 22 命令。如果有多个管理 IP,可以重复执行该命令添加多条规则。建议同时确认 IPv6 地址,如果需要支持 IPv6,UFW 通常会自动处理,但需确保配置正确。

第三步:设置默认策略(可选但推荐)
如果希望只允许白名单 IP 访问 SSH,其他 IP 一律拒绝,确保默认入站策略为拒绝。命令为 sudo ufw default deny incoming。注意,这会影响所有入站端口,请确保 Web 服务等其他端口已单独放行。

第四步:启用防火墙
执行 sudo ufw enable。系统会提示这可能中断现有连接,输入 y 确认。此时不要关闭当前的 SSH 会话窗口。

怎么验证是否生效

1. 查看规则列表
运行 sudo ufw status numbered,确认列表中包含了你刚才添加的允许特定 IP 的规则,且位于拒绝规则之前(UFW 按顺序匹配)。

Ubuntu 20.04 如何使用 ufw 配置只允许特定 IP 访问 SSH 端口?

2. 远程连接测试
保持当前 SSH 会话不动,打开一个新的终端窗口,尝试从允许的 IP 连接服务器,应该成功。再尝试从未被允许的 IP(或使用手机热点切换 IP)连接,应该显示连接超时或被拒绝。

3. 日志检查
如果连接失败,可以查看防火墙日志 /var/log/ufw.log,确认是否有被阻止的记录。

常见坑

1. 把自己锁在外面
这是最高频的风险。如果在没有控制台(VNC/物理机)访问权限的情况下误操作,一旦防火墙启用且未放行当前 IP,将无法恢复。务必确保云服务商的控制台可用。

Ubuntu 20.04 如何使用 ufw 配置只允许特定 IP 访问 SSH 端口?

2. 忽略 IPv6
如果服务器启用了 IPv6,而只限制了 IPv4 地址,攻击者可能通过 IPv6 访问。UFW 默认同时管理 IPv4 和 IPv6,但规则需明确。

3. SSH 端口非标准
如果修改过 /etc/ssh/sshd_config 中的端口,放行规则必须对应新端口,否则默认放行 22 端口无效。

参考来源

Ubuntu 官方服务器文档关于防火墙的配置说明,以及 UFW 手册页。