我需要SSH的反向代理解决方案


10

您好,这是我在公司数据中心中有一个用于项目的服务器的情况。我可以通过端口22通过SSH访问此计算机。该服务器上运行着一些虚拟机,然后许多其他操作系统都在运行。现在,由于我位于数据中心防火墙的后面,我的主管问我是否可以做一些事情,从而使很多人可以直接通过Internet访问这些虚拟机。我知道如果允许我在22以外的端口上获取流量,那么我可以进行端口转发。但是由于不允许这样做,所以在这种情况下可以解决的办法。想要连接的人可能是完全白痴,谁可能只是通过在他们的机器上打开腻子而高兴,甚至可能是Filezilla。

我没有任何防火墙,也没有开放22端口以外的任何端口,实际上,即使我请求它们不允许开放。2倍SSH并不是我的主管想要的。


1
另一个伟大的解决方案相关的问题:serverfault.com/questions/361794/...
魁夷


sshpiperd很棒!
基拉伊伊什特万

Answers:


5

您应该打开从计算机到数据中心服务器的ssh隧道。让我们将其命名为“ server1”。如果您使用的是openssh,则可以运行

ssh -L0.0.0.0:8080:localhost:8080 you_username@server1

这将打开您的计算机从端口8080到服务器端口8080的连接,从而跳过两者之间的防火墙。假设您的Apache正在侦听端口8080。端口转发格式是侦听IP:本地端口:远程地址:远程端口。当然,对于单个服务器,您也可以使用

ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1

请注意,-L参数中的localhost是相对于server1的。换句话说,服务器看到的连接来自本地主机,而实际上这些连接是通过ssh连接来自您的计算机的。

您还需要参数

AllowTcpForwarding yes

在服务器的ssh配置中(通常是/ etc / ssh / sshd_config)。

之后,其他人可以通过端口8080连接到您的计算机,以通过Apache反向代理获得连接。如果需要通用代理(以便用户可以选择地址,而不仅仅是Apache配置中的特定地址),则应在server1上安装squid,并使用ssh隧道连接到squid端口。


您的意思是说,当我这样做时,ssh -L0.0.0.0:8080:localhost:8080 you_username@server1 如果连接仍然仍通过防火墙的端口22进行连接(因为如果没有发生,那么我将无能为力),并且ssh隧道将在本地计算机和远程计算机之间建立在指定的端口上,但是整个流量将在防火墙上继续(端口22)进行。
邦德

当您运行ssh隧道时,该流量(从端口8080到端口8080)通过端口22进入ssh连接。防火墙确实看到了到端口22而不是8080的流量。–
Olli

当您发出此命令时, ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1 我想知道可以作为remote_server_address放置的是要使用server1作为中间设备的内部计算机的IP。我是否正确理解?
邦德

邦德:是的,这是正确的。您还可以指定多个-L隧道(当然具有不同的源端口)以打开与多个内部计算机的连接。例如“ -L0.0.0.0:8080:remote_server1:80 -L0.0.0.0:8081:remote_server2:80 -L0.0.0.0:8082:remote_server2:22”(不带引号)。
Olli

要使其稳定,就需要将服务器设置为充当数据中心外部的反弹并允许流量进入。当然,作为临时解决方案,ssh隧道是可以的,但是对于生产中的某些产品,我建议在服务器上安装真正的反向代理。反弹,并调整防火墙设置以仅允许该反弹产生8080个连接。这就是说,将反向代理作为DC中的虚拟机之一放置是更明智的。因此,仅需使用与本机的SSL来保护连接。
jmary

0

也许您可以使用SshMeIn之类的东西。这是一个开放源代码的Web系统,它将使ssh穿越防火墙,您甚至不需要打开端口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.