在我的 Ubuntu 20.04 机器上,我启用了 ufw 并允许 ssh 连接。
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
但是,我在尝试连接时遇到超时。
但是如果我随后执行以下操作:
sudo ufw default allow outgoing # deny outgoing also works, I've discovered
它立即开始接受我的连接。 这让我很困惑——似乎只是运行一些 ufw 命令就会让防火墙允许传入连接。
不幸的是,这是行不通的,因为重新启动后状态不会持续 - 所以我还不能远程使用计算机:重新启动后我必须从本地终端重做
sudo ufw default allow outgoing
。
我尝试过清除并重新安装 ufw。 我有兴趣了解在哪里查找防火墙不允许 ssh 的原因,即使状态表明它应该允许。
问题在于传入和传出流量。 检查命令的输出
ufw status verbose
:
默认:拒绝(传入)、允许(传出)、拒绝(路由)
这将拒绝任何传入流量,包括您的
ssh
这是适合您情况的解决方案
sudo ufw allow incoming
sudo ufw allow outgoing
sudo ufw allow from (your rules here)
sudo ufw limit ssh (if you want to be safe)
sudo ufw deny from any
否认
incoming
或outgoing
都会导致拒绝ssh
。
我从来没能解决这个问题,但确实想出了一个解决方法。 我创建了一个启动脚本来运行无操作(因为它已经是设置)
ufw default allow outgoing
。 这似乎会让防火墙接受传入连接。
$ cat /usr/local/bin/ping-ufw.sh
#!/bin/bash
ufw default allow outgoing >> /root/ping-ufw.out
$ cat /etc/systemd/system/ping-ufw.service
[Unit]
After=network.service
[Service]
ExecStart=/usr/local/bin/ping-ufw.sh
[Install]
WantedBy=default.target
sudo systemctl daemon-reload
sudo systemctl enable ping-ufw.service
我在 arch 上遇到了类似的问题。我对此很陌生,但是我发现如果我停止 ufw (systemctl stop ufw) 然后尝试 ssh 进入电脑,然后再次启动 ufw,即使在我关闭连接后它仍然可以工作。
我认为这与 ssh 密钥有关