最新文章:

首页 运维技术

SSH之端口转发技术

发布时间:2017年02月21日 评论数:1 阅读数:4167

    SSH端口转发


    SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。这一过程有时也被叫做“隧道” (tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,那么也能够通过将 TCP 端口转发来使用 SSH 进行通讯。


    (一)概述


    SSH端口转发能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。


    (二)功能


    1、加密SSH Client端至SSH Server端之间的通讯数据;

    2、突破防火墙的限制完成一些之前无法建立的TCP连接。


    (三)方式


    共有四种方式,分别为本地转发,远程转发,动态转发,X协议转发。


      (I)本地端口转发


    SSH连接和应用的连接这两个连接的方向一致。

    ssh -L [<local host>:]<local port>:<remote host>:<remote port> <SSH hostname>,Localhost参数可省略,默认为0:0:0:0,但为了安全性考虑务必使用127.0.0.1作为本地监听端口。



    将本地机(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发是在localhost上监听一个端口,所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口。



    如下:

    localhost: ssh -L 7001:localhost:7070 sisca@216.194.70.6

    登陆前本地主机端口监听状态:


    登陆后本地主机端口监听状态:


    登陆后远程主机不会监听端口。

    小结:本地端口转发的时候,本地的ssh在监听7001端口.


       (Ⅱ)远程端口转发


    SSH连接和应用的连接这两个连接的方向相反

    ssh -R [<local host>:]<local port>:<remote host>:<remote port> <SSH hostname>,Localhost参数可省略,默认为0:0:0:0,为了安全性务必使用127.0.0.1作为本地监听端口。



    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口;远程端口转发是在远程主机上监听一个端口,所有访问远程服务器的指定端口的数据都会通过ssh 隧道传输到本地的对应端口。



    如下:

    localhost: ssh -R 7001:localhost:7070 sisca@216.194.70.6

    登陆前本地主机端口监听状态:


    登陆后本地主机端口监听状态:


    登陆后远程主机端口监听状态:


    小结:使用远程端口转发时,本地主机的端口监听并没有发生变化,相反远程主机却开始监听我们指定的7001端口。


       (Ⅲ)动态端口转发


    把远端ssh服务器当作了一个安全的代理服务器

    ssh -D [<local host>:]<local port> <SSH hostname>,Localhost参数可省略,默认为0:0:0:0,为了安全性务必使用127.0.0.1作为本地监听端口。



    建立一个动态的SOCKS4/5的代理通道,紧接着的是本地监听的端口号;动态端口转发是建立一个ssh加密的SOCKS4/5代理通道,任何支持SOCKS4/5协议的程序都可以使用这个加密的通道来进行代理访问,现在这种方法最常用的地方就是翻墙。



    如下:

    localhost: ssh -D 7070 sisca@216.194.70.6

    登陆前本地主机端口监听状态:


    登陆后本地主机端口监听状态:


    小结:使用动态端口转发时,本地主机的ssh进程在监听指定的7070端口。


       (Ⅳ)X协议转发


    把远端ssh服务器当作了一个安全的代理服务器。

    ssh -X  <SSH hostname>

    如,我们可能会经常会远程登录到 Linux/Unix/Solaris/HP 等机器上去做一些开发或者维护,也经常需要以GUI方式运行一些程序,比如要求图形化界面来安装 DB2/WebSphere 等等。这时候通常有两种选择来实现:VNC或者X窗口,让我们来看看后者。一个比较常见的场景是,我们的本地机器是Windows操作系统,这时可以选择开源的XMing来作为我们的XServer,而SSH Client则可以任意选择了,例如PuTTY,Cygwin均可以配置访问SSH的同时建立X转发。  



    SSH端口转发除上述四个代表不同工作方式的参数外还有一些附属参数:

    -C:压缩数据传输

    -N:不执行脚本或命令,通常与-f连用

    -f:后台认证用户/密码,通常与-N连用,不用登陆到远程主机,如果通过其他程序控制隧道连接,应当避免将SSH客户端放到后台执行,也就是去掉-f参数。

    -g:在-L/-D/-R参数中,允许远程主机连接到建立的转发端口,如果不加这个参数,只允许本地主机建立连接。


       (四)场景模拟


    场景一:将本机的80端口转发到174.139.9.66的8080端口。

    ssh  -C –f –g –N –L 80:174.139.9.66:8080 master@174.139.9.66

    接着会提示输入master的密码,或使用-pw参数完成



    场景二:一次同时映射多个端口

    Ssh -L 8888:www.host.com:80 -L 110:mail.host.com:110 -L    25:mail.host.com:25 user@host,同时把服务器(www.host.com)的80,110,25端口映射到本机的8888,110和25端口



    场景三:A内网主机能放问公网的123.123.123.123的22端口,但是不能访问公网234.234.234.234的21端口,但是这两台公网主机能互访。

    A主机:ssh -CNfg –L 2121:234.234.234.234:21 –pw abc123 user@123.123.123.123 ;然后A主机:ftp://localhost:2121

    前提是获取123.123.123.123的22端口账号口令(普通和root口令均可以,区别是转发的端口问题)



    场景四:A内网主机能放问公网的123.123.123.123的22端口,但是公网B主机123.123.123.123不能访问内网的A主机。

    A主机:ssh -CNfg –R 2222:127.0.0.1:22 –pw abc123 user@123.123.123.123;B主机:ssh 127.0.0.1 –p 2222

    前提是B主机开放22端口,账号口令(自建ssh服务器,或用肉鸡),灰鸽子木马用的也是反向链接,Destination (LAN_ip) <- |NAT| <- Source (home_ip)



    场景五:A内网主机只能访问公网的123.123.123.123,但是A如果想访问公网的很多资源。

    A主机:ssh -CNf –D 1080 –pw abc123 user@123.123.123.123;A主机浏览器socks 5 proxy设置为localhost:8888,所有之前无法访问的网站现在都可以访问。



    场景六:A内网主机开了http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服务,无合法 ip 地址;外网主机B(123.123.123.123),开了sshd 服务,有合法 ip ;我们的目的是让 internet 上的任何主机能访问A上的各种服务。

    B主机:sshd服务端做点小小的设置:vi /etc/ssh/sshd.config加入 GatewayPorts yes,然后重启sshd服务:/etc /init.d/ssh restart 或 /etc/init.d/sshd restart或使用-g参数

     A主机:ssh -CNf –R 21:127.0.0.1:21 –pw abc123 user@123.123.123.123

    公网其它主机:ftp://123.123.123.123:21



    场景七:A内网主机开了 http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服务,无合法 ip 地址;外网主机 B(123.123.123.123) 开了 sshd 服务,有合法 ip ;我们的目的是让 internet 上的任何主机能访问 A 上的各种服务。

    A主机:ssh -CN –R 1234:127.0.0.1:80 –pw abc123 user@123.123.123.123

    B主机:socat tcp-listen:80,reuseaddr,fork tcp:localhost:1234

    公网其它主机:http://123.123.123.123:80,此时就是访问内网主机的80端口



    场景八:PuTTY自带的plink.exe实现ssh代理



    PLINK.EXE -C -N -D 127.0.0.1:7000 est@202.115.22.x[:21314]

    ssh -CfNg -D 127.0.0.1:7000 est@202.115.22.x:21314


    (五) 渗透情景模拟


    A为攻击主机,开启的ssh服务;

    B为web/应用/数据库服务器,开启22/80/3306端口;

    D为肉鸡,开启22端口;


    情景一:


    方法一:socks5代理

    A: ssh –D 8080 root@B_IP –pw root

    方法二:本地端口转发(B的3306端口)

    A:ssh –L 3306:B_IP:3306 –pw root root@B_IP

    方法三:远程端口转发

    B: ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP



    情景二:


    法一:socks5代理

    A:ssh -D 8080 root@A_IP –pw root

    B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP

    法二:远程端口转发(将3306端口转发)

    B:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP



    情景三:


    法一:socks5代理

    A:ssh -D 8080 root@A_IP -pw root

    B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP

    法二:远程端口转发(将3306端口转发)

    B:ssh -R 3306:C_IP:3306 -pw root root@A_IP

    法三:

    B:ssh –L 1234:C_IP:3306 –pw root root@C_IP

    B:ssh –R 3306:127.0.0.1:1234 –pw root root@A_IP



    情景四:


    一、


    22端口转发

    A: ssh –L 2222:B_IP:22 –pw root root@D_IP

    3306端口转发

    D: ssh –L 3306:B_IP:3306 –pw root root@B_IP

    A: ssh  -L 3306:D_IP:3306 –pw root root@D_IP


    二、


    22端口转发

    B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP

    A:ssh –L 2222:D_IP:2222 –pw root root@D_IP

    3306端口转发

    B: ssh –L 3306:127.0.0.1:3306 –pw root root@D_IP

    A: ssh  -L 3306:D_IP:3306 –pw root root@D_IP


    三、


    22端口转发

    B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP

    D:ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP

    3306端口转发

    B: ssh –R 3306:127.0.0.1:3306 –pw root root@D_IP

    D: ssh  -R 3306:127.0.0.1:3306 –pw root root@A_IP


    四、


    22端口转发

    D: ssh –L 2222:B_IP:22 –pw root root@B_IP

    D: ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP

    3306端口转发

    D: ssh –L 3306:B_IP:3306 –pw root root@B_IP

    D: ssh  -R 3306:127.0.0.1:3306 –pw root root@A_IP



    情景五:


    一、


    将C的3306端口转发出来

    D:ssh –L 3306:C_IP:3306 –pw root root@B_IP

    A:ssh –L 3306:D_IP:3306 –pw root root@D_IP


    二、


    将C的3306端口转发出来

    B:ssh –R 3306:C_IP:3306 –pw root root@D_IP

    A:ssh –L 3306:D_IP:3306 –pw root root@D_IP


    三、


    将C的3306端口转发出来

    B:ssh –R 3306:C_IP:3306 –pw root root@D_IP

    D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP


    四、


    将C的3306端口转发出来

    D:ssh –L 3306:C_IP:3306 –pw root root@B_IP

    D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP



    通过将TCP连接转发到SSH通道上以解决数据加密以及突破防火墙的种种限制。对一些已知端口号的应用,例如Telnet/LDAP/SMTP,我们可以使用本地端口转发或者远程端口转发来达到目的。动态端口转发则可以实现SOCKS代理从而加密以及突破防火墙对Web浏览的限制。当然,端口转发还有很多好用的工具供大家选择。本文参考了网上之前的文章,并加入了自己的理解,感兴趣的话可以搞个环境实验下,如有问题,希望各位批评指正。


    参考:

    http://blog.csdn.net/a351945755/article/details/21788187    http://blog.csdn.net/a351945755/article/details/21785647

二维码加载中...
本文作者:Mr.linus      文章标题: SSH之端口转发技术
本文地址:http://www.90qj.com/416.html  本文已经被百度收录,点击查看详情
版权声明:若无注明,本文皆为“挨踢 Blog”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
企业孵化器
企业孵化器2017-02-23 11:54回复
#1
好详细