适用于:✔️ 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。
-
验证 UFW 状态:
sudo ufw status在输出中:
Status: active指示 UFW 正在运行。Status: inactive指示 UFW 未处于活动状态,并且 UFW 不会阻止端口。
-
列出当前的 UFW 规则:
sudo ufw status numbered此命令列出所有规则。 它显示是允许还是拒绝特定端口。 如果列表中未显示端口,则默认拒绝该端口。
-
检查 UFW 规则以确定特定端口是否被拒绝。 例如,若要验证 SSH 端口 22 是否被拒绝,请运行以下命令:
sudo ufw status | grep '22'- 如果输出显示
22/tcp ALLOW,则允许端口通过防火墙。 - 如果未显示任何输出或规则显示
22/tcp DENY,则拒绝端口。
- 如果输出显示
-
使用
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对这些产品的性能或可靠性不作任何默示或其他保证。