启动与虚拟机故障

在 Azure Ubuntu VM 中使用非复杂防火墙(UFW)排查连接问题 - Virtual Machines

· 52CE 我爱测

适用于:✔️ Linux VM 总结 本文介绍如何使用“非复杂防火墙”(UFW)诊断和解决 Azure Ubuntu 虚拟机(VM)上的连接问题。 UFW 是一个用户友好的界面,用于管理 Linux 分发版中的 Netfilter 防火墙,尤其是在 Ubuntu 中。 其主要目标是让可能发现直接配置 iptables 具有挑战性且复杂的用户更轻松地管理防火墙。 UFW 是 Ubuntu 的默认防火墙配置工具。 先决条件 - root权限。 - 访问串行控制

适用于:✔️ Linux VM

总结

本文介绍如何使用“非复杂防火墙”(UFW)诊断和解决 Azure Ubuntu 虚拟机(VM)上的连接问题。

UFW 是一个用户友好的界面,用于管理 Linux 分发版中的 Netfilter 防火墙,尤其是在 Ubuntu 中。 其主要目标是让可能发现直接配置 iptables 具有挑战性且复杂的用户更轻松地管理防火墙。 UFW 是 Ubuntu 的默认防火墙配置工具。

先决条件

  • root权限。
  • 访问串行控制台。
  • 已安装net-tools和iproute2``netcat-openbsd包。

如何使用 UFW 检查 Ubuntu VM 中是否关闭了端口

注意

默认情况下,UFW 不会在使用Azure 市场中的映像创建的 Ubuntu VM 上启用。 在 VM 上启用 UFW 会关闭所有端口,包括 SSH 服务的端口 22。

  1. 验证 UFW 状态:

    sudo ufw status
    

    在输出中:

    • Status: active 指示 UFW 正在运行。
    • Status: inactive 指示 UFW 未处于活动状态,并且 UFW 不会阻止端口。
  2. 列出当前的 UFW 规则:

    sudo ufw status numbered
    

    此命令列出所有规则。 它显示是允许还是拒绝特定端口。 如果列表中未显示端口,则默认拒绝该端口。

  3. 检查 UFW 规则以确定特定端口是否被拒绝。 例如,若要验证 SSH 端口 22 是否被拒绝,请运行以下命令:

    sudo ufw status | grep '22'
    
    • 如果输出显示 22/tcp ALLOW,则允许端口通过防火墙。
    • 如果未显示任何输出或规则显示 22/tcp DENY,则拒绝端口。
  4. 使用netstat或ss命令来检查端口是否正在使用。

netstat

    sudo netstat -tuln | grep ':22'
    ```

# [ss](#tab/ss)
```bash
    sudo ss -tuln | grep ':22'
    ```

---

    ```output
    tcp6   0   0 :::22     :::*   LISTEN   
    ```

    - 示例输出显示服务正在使用端口 22 或侦听端口 22。 但是,这不会确认防火墙允许或取消阻止端口。 即使防火墙阻止了端口,它仍可能在输出中显示为 **LISTEN** 。
    - 无输出说明端口未由任何服务侦听。
5. 测试端口连通性使用 `nc`:

    ```bash
    sudo nc -zv <server-ip> 22
    ```

    - 如果连接失败,但端口正在被侦听,这就确认了端口被防火墙阻止。
    - 成功的连接意味着该端口被允许使用。

如果正在检查的端口未显示在 UFW 规则中,或者标记为 `DENY`,则 UFW 将阻止该端口。 此外,如果无法使用外部工具连接到端口,则会阻止该端口。

## 使用 UFW

### 方案 1:允许所有 IP 地址的 SSH 连接

运行下面的命令:

```bash
sudo ufw allow ssh
Rule added

验证规则:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  

方案 2:允许特定 IP 地址使用 SSH(端口 22)

运行下面的命令:

sudo ufw allow from 10.0.10.10 to any port 22 proto tcp

验证规则:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       10.0.10.10             

方案 3:允许子网连接到端口 22

运行下面的命令:

sudo ufw allow from 10.1.0.0/24 to any port 22 proto tcp

验证规则:

sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       10.0.10.10             
22/tcp                     ALLOW       10.1.0.0/24 

方案 4:拒绝所有 IP 地址的 SSH 访问

运行以下命令:

sudo ufw deny ssh
sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       10.0.10.10             
22/tcp                     ALLOW       10.1.0.0/24          
22/tcp                     DENY        Anywhere                     

重要

规则的顺序很重要,因为 UFW 按照规则的列出顺序处理规则。 这意味着,规则匹配后,UFW 将应用该规则并停止处理该连接的其他规则。

删除规则

如果规则的顺序不正确,可以删除规则,然后将其还原以更改顺序。

若要删除规则,可以使用其输出中的 ufw status numbered 编号。 例如,若要删除规则号 3:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW       10.0.10.10             
[ 2] 22                         ALLOW       10.1.0.0/24 
[ 3] 22/tcp                     DENY IN     Anywhere  
sudo ufw delete 3

有关详细信息,请参阅: Ubuntu - UFW 社区

第三方信息免责声明

本文讨论的第三方产品由独立于Microsoft的公司制造。 Microsoft对这些产品的性能或可靠性不作任何默示或其他保证。

资料来源与适用范围

资料来源
微软官方 Linux 虚拟机排障文档
适用范围
Azure Linux 虚拟机;按正文发行版、内核及代理版本
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。