0x01 SSH隧道
什么是SSH隧道呢?举个例子,我们都知道,SSH传输数据是加密传输的,可以有效的保证数据的安全,但是telnet是明文传输的,很不安全,尤其是在公网上,一旦监听到就会有很大的危害,所以一般公司的防火墙都会禁止外网通过telnet连接内网的计算机的。那么如果我们想在外面访问公司的计算机怎么办呢?这个时候就可以用到SSH隧道技术,可以保证数据的传输是加密的。通常我们讲的ssh隧道技术其实就是ssh端口转发。
0x02 SSH本地端口转发
原理如下图
建立本机独享隧道
将本地9999端口通过192.168.10.1映射到192.168.10.2
1 | ssh -L 9999:192.168.10.2:23 -Nf 192.168.10.1 |
建立共享隧道
他人可以通过访问我的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 | ssh -L 6666:localhost:3000 root@233.233.233.233 //访问web1服务 |
这样做是可以的,但是吧,不觉得很麻烦嘛,如果有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 声明
这篇文章是我通过查询资料然后根据自己的认知来写的,其中如果有什么我说错的地方希望能评论或者私信我,不胜感激!