我正在处理本地 git 项目,并且在端口 2222 上使用非 root 用户运行单独的 SSH 服务。除此之外,我还使用 ufw 防火墙并打开了端口 2222 - 我打开它只是为了测试与它的连接是否按预期工作并且没有问题。因为 SSH 的默认端口是 22,并且我不希望用户在地址中写入用于访问存储库的其他端口,所以我希望将其从 22 预先路由到 2222。此外,我希望在预路由生效时,端口 2222 不会从外部访问。基本上我已经完成了第一部分 - 我将流量从 22 预先路由到 2222,如果端口 2222 也打开,它就可以正常工作,但是当尝试关闭端口 2222 时,与 22 的连接也会停止工作(打开端口的规则仍然存在)。这在某种程度上是合乎逻辑的,因为 iptables 似乎只是将端口 22 转换为 2222 并将其转发给 ufw,然后 ufw 会识别这一点并拒绝连接,因为端口 2222 未打开。目前这是我在 ufw 的 before.rules 中的内容,如果端口 2222 也打开,它就会起作用:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
有没有办法进行这种预路由而不需要打开端口 2222?