SSH端口转发

0x01 SSH隧道

什么是SSH隧道呢?举个例子,我们都知道,SSH传输数据是加密传输的,可以有效的保证数据的安全,但是telnet是明文传输的,很不安全,尤其是在公网上,一旦监听到就会有很大的危害,所以一般公司的防火墙都会禁止外网通过telnet连接内网的计算机的。那么如果我们想在外面访问公司的计算机怎么办呢?这个时候就可以用到SSH隧道技术,可以保证数据的传输是加密的。通常我们讲的ssh隧道技术其实就是ssh端口转发。

0x02 SSH本地端口转发

原理如下图

建立本机独享隧道

将本地9999端口通过192.168.10.1映射到192.168.10.2

1
2
3
4
5
ssh -L 9999:192.168.10.2:23 -Nf 192.168.10.1

-L 本地端口转发
-N 不执行命令或者脚本,否则会等待用户的输入
-f 后台执行

建立共享隧道

他人可以通过访问我的9999端口来访问192.168.10.2

1
ssh -g -L 9999:192.168.10.2:23 -Nf 192.168.10.1

0x03 SSH远程端口转发


那么当防火墙设置为我们从外面不能直接访问内部网络的服务器,但是内部网络的服务器可以访问外面的时候,就要用到远程端口转发技术了。此时就要在内网跳板计算机上运行命令

1
ssh -R 9999:192.168.10.2:23 -Nf <外部ip>

这样外部用户只要在自己的机器上使用

1
telnet 127.0.0.1:9999

就可以访问到内网192.168.10.2的telnet了。

x04 SSH动态端口转发

举个场景,存在远程外网服务器233.233.233.233上3000端口运行这一个web1服务,4000端口运行这一个web2服务,5000端口运行这一个web3服务(随便举的例子),然后由于防火墙策略只能用22端口连接外部网络,那么如何才能访问到那个外网服务器上的web服务呢?有的同学一定会说可以使用ssh本地端口转发呀,是的,我们可以在本地运行命令

1
2
3
ssh -L 6666:localhost:3000 root@233.233.233.233 //访问web1服务
ssh -L 7777:localhost:4000 root@233.233.233.233 //访问web2服务
ssh -L 8888:localhost:5000 root@233.233.233.233 //访问web3服务

这样做是可以的,但是吧,不觉得很麻烦嘛,如果有10个服务要访问呢,就要输入10条命令,那么这样就可以使用SSH动态端口转发功能了,只需要一条命令即可实现多端口访问。这里需要用到SOCKS代理,使用命令

1
ssh -D localhost:2000 root@233.233.233.233

然后在浏览器中找到设置代理的地方,选择SOCKS代理,选择SOCKS5,SOCKS主机填localhost,端口填2000,这样我们只需要在浏览器中输入localhost:3000或者localhost:4000或者localhost:5000就可以方便又快速的访问三个web服务了。这里的原理就是我们访问本地加端口的请求会被ssh转发到真正的那个地址(这里就是外网服务器),又真正的那个地址来处理这个请求,然后将数据发回来。

0x05 声明

这篇文章是我通过查询资料然后根据自己的认知来写的,其中如果有什么我说错的地方希望能评论或者私信我,不胜感激!

本文标题:SSH端口转发

文章作者:Pino-HD

发布时间:2018年05月31日 - 18:05

最后更新:2018年05月31日 - 18:05

原始链接:https://pino-hd.github.io/2018/05/31/SSH端口转发/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!