基于SSH隧道的地址端口映射
2017-06-26杜文中
杜文中
[摘 要]使用SSH,借用公网合法IP地址建立本地SSH隧道,可绕过防火墙直达内部网络资源,透明NAT后的主机或者服务器。
[关键词]SSH隧道;地址端口映射;Linux
[中图分类号] G633.67 [文献标识码] A [文章编号] 1674-6058(2017)12-0058-01
在Windows下有一款能穿透内网的远程控制软件,可以穿透各种防火墙,但要求通信双方都安装该软件,使用时要求双方打开软件并且接受连接。其最大优势在于任何一方都不需要拥有固定IP地址,双方都可以相互控制,只要连入Internet即可,不受防火墙影响。然而在Linux下我们不需要安装第三方软件,通过SSH隧道就可以实现这样的功能,我们要做的只是写一SHELL脚本实现SSH的永久性连接即可。一个非常重要的意义在于它能够使通过多次NAT后的主机实现各类公网服务器的功能。
一、端口映射
端口映射(端口转发),可路由IP服务器,各品牌路由器不同,说法也不一样,但操作大致是一样的。端口服务器可以向外提供多种服务,比如,一台服务器可以开很多端口来提供不同的服务,像WEB(PORT 80)服务器、FTP(PORT 21)服务器、SQL服务器。私有地址NAT后的主机如果要在因特网对外开放WEB服务,就需要端口映射。
二、SSH隧道
SSH隧道(SSH TUNNEL),通过它能在A和B两主机之间建立一条安全的通道。如果你有A和B的SSH帐号和密码,就可以用SSH从A挖条隧道到B,然后再通过任意一台能直接访问主机B的主机C,使用B的IP和主机A的SSH帐号和密码共享主机A对外提供的服务。
三、基于SSH隧道的地址端口映射
现有一台内网主机IP为192.168.0.247,开放23端口提供TELNET服务,但是对于公网的IP我们无法让他们使用TELNET帐号和密码直接登录,我们也不知道网关路由器的用户名和密码,所以无法在路由器上做端口映射,但是如果我们有一台公网IP的Linux主机作中转,就可以使用SSH 隧道代理来实现地址端口映射。
四、挖掘隧道
有了中转服务器,我们现在可以使用SSH挖掘一条内网Linux主机192.168.0.247到达中转服务器的隧道,并将要提供服务的TELNET(23)端口开放。
我们可以直接使用SSH命令来挖掘隧道。
ssh ?鄄C ?鄄f ?鄄N ?鄄g ?鄄R listen_port:DST_Host:DST_port us?鄄er@Tunnel_Host
域名查询:
Nslookup freebsd.unix?鄄center.net
121.194.13.8
实例:
ssh ?鄄R 9623:192.168.0.247:23 ?鄄l duwenzhong freeb?鄄sd.unix?鄄center.net
其中?鄄R 9623表示遠程端口,该命令表示登录服务器freebsd.unix?鄄center.net,并将服务器的9623定向为本地的23号端口。执行完该命令以后,会提示输入duwenzhong用户密码,输入以后就会登录到服务器freebsd.unix?鄄center.net。我们可以做一个脚本来自动完成登录的过程。
示例脚本原程序:sshtun.sh
五、SSH隧道的创建
在内网Linux主机192.168.0.247上首先开放23端口,然后执行脚本sshtun.sh(./sshtun.sh),再运行命令(net?鄄stat?鄄an|more)。
六、SSH
找一台能访问Internet的主机,然后ssh到freebsd.unix?鄄center.net主机上,使用netstat?鄄an|grep 9623命令,我们会看到端口9623已绑定在127.0.0.1上侦听,如下图所示:
接着运行telnet 127.0.0.1 9623 或telnet localhost 9623,然后要求输入主机192.168.0.247的用户名和密码,如下图所示:
现在我们已通过SSH隧道telnet 登录到内网主机192.168.0.247上。如下图所示:
用荧光笔划过的依次是主机192.168.0.247的隧道入口和隧道出口。
(责任编辑 于 泽)