反向隧道用于访问防火墙服务器上的外部 API,只能通过堡垒访问

反向隧道用于访问防火墙服务器上的外部 API,只能通过堡垒访问

如果标题听起来令人困惑,确实如此,而且我非常困惑。情况如下:

  1. 我有一台生产服务器prod1,它对所有来自/到所有外部互联网的传入/传出流量进行了防火墙保护
  2. 此外,我通过 SSH 连接到该服务器的唯一方法是先通过 SSH 连接到内部堡垒bastion.foo.com,然后使用 sshconfig 例如 ssh ProxyCommand ssh -W %h:%p bastion.foo.com

我希望prod1能够curl -I https://api.com通过某种方式通过我的 ssh 连接隧道到达该服务器(当然,只有当我已连接时)来访问 API 端点(例如,它使用端口 443,因为它是 https)。阅读了一些博客文章后,我认为 RemoteForward 就是答案:

Host prod1
HostName ...
User ...
IdentityFile ...
RemoteForward 443 api.com:443
ProxyCommand ssh -W %h:%p bastion.foo.com

但当我听到ssh prod1服务器说的第一句话是:

警告:监听端口 443 的远程端口转发失败

我该怎么做?我走在正确的道路上吗?

答案1

确实有可爱的图画RemoteForward在 openssh 中解释过。但是,在您的用例中,远程转发可能比您描述的更复杂。

您至少需要进行一些更改,/etc/hosts以使其对您的应用程序至少有一点透明:

127.0.0.1 api.com

或者更改您的应用程序以直接连接到 localhost 而不是 api.com。

请注意,

仅当以 root 身份登录远程计算机时才可以转发特权端口。

来自man ssh_config(5)。这意味着,如果没有 root 权限,您就无法绑定端口 443(或者其他机制,如 SELinux 也会阻止您这样做)。您需要这些权限,或者您应该选择不同的本地端口,这会让您的应用程序更加不透明。

相关内容