如何在代理服务器上反向访问

时间:2013-02-10 21:14:43

标签: linux security networking

我希望避免直接访问到系统A. 但是,系统A上正在运行服务C.

还有一个其他系统B可以被任何人访问。

我想将B中的请求“转发”给用户可以认为服务C正在B上运行。

从技术上讲,我知道如何实现两个网络程序(D和E)来实现这一要求。 D在连接到系统B上运行的E的系统A上运行。

对服务C的任何B请求都将从E转发到D. D将请求传递给“真实”服务C.当然,响应顺序相反。

Network Access Anyone -> B <- A
Programs  E <- D 

Service flow Anyone -> E -> D -> C 

对于还在我身边的人:

在执行此类程序时,我会重新发明轮子吗?

换句话说,是否有一个开源/ linux程序正在执行此功能?

1 个答案:

答案 0 :(得分:2)

这看起来像是SSH隧道的教科书用例。

在服务器A上,安装SSH服务器(例如,安装包openssh-server,如果它是Debian)。在服务器B上,运行以下命令:

ssh -f SERVICEUSER@AHOST -L BPORT:AHOST:APORT -N

其中SERVICEUSER是服务运行的用户的名称,A是A的主机名或IP,BPORT是服务B上服务应该可用的端口号,APORT是端口的端口号该服务正在服务器A上侦听。以下是更多信息:http://www.revsys.com/writings/quicktips/ssh-tunnel.html

每次重启后都必须运行此命令,因此最好为其编写一个init脚本,以便像服务一样进行管理。从这里开始:http://www.thegeekstuff.com/2012/03/lsbinit-script/

为了避免输入SERVICEUSER的密码(这在初始化脚本中是不可能的),您还需要在服务器B上生成私有SSH密钥并将其添加到SERVICEUSER的authorized_keys文件中,这可能涉及创建一个主目录。 SERVICEUSER。使用usermod -d命令执行此操作:http://linux.die.net/man/8/usermod然后按http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html要记住的一个常见问题是authorized_keys文件和.ssh目录都必须chmod 600并由SERVICEUSER拥有,否则SSH服务器将忽略它们。