SSH转发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH转发相关的知识,希望对你有一定的参考价值。

前言

        前面介绍了ssh的两种连接方式,是在学习过程中连接主机的方式。在实际生产场景中,环境可能更加复杂。这里再介绍2种在实际工作中如何安全的访问想要访问的主机。

SSH端口转发

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

SSH 端口转发能够提供两大功能:

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

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

ssh转发的实际应用

      假如你在一家公司做运维,你在家的时候或者分公司同事、其他部门的人想连接公司内部的一台主机,这时防火墙是阻止不允许访问。甚至有些严格的公司VPN都是不允许开启的。防火墙是专门的网络运维管理员管理,不可能因为某一个人的小需求更改策略。那这时怎么办呢?企业内部有一台ssh服务器,因为ssh是加密的,外部直接连接ssh服务是可以的。现在可以通过ssh server当跳板机,间接的去连接其他主机。如下图:A是外部一台主机,想连接C,直接连是被防火墙拒绝的。B是ssh服务器,B是可以直接连C的。A可以通过与B搭一个“隧道”,B来转发A的请求到C。情形具体参考下图。

     技术分享

      第一步:模拟A无法连接C

         C机器:iptables -A INPUT -s 192.168.32.101 -j REJECT     <===拒绝来自A机器的连接

      第二步:确认B机器上开启可ssh服务,可以用/etc/init.d/sshd status 查看下状态,如果没开用start开启。也可以ss -ntl看下22端口是否开启,ssh是在22端口提供服务的。

      第三步:在A机器上建立隧道ssh -L 9527:192.168.32.103:23 -fN 192.168.32.102

         说明:-L 9527:192.168.103:23 <===指定本机的9527端口,后面接想要连接的主机地址加服务端口    

                    -f                                  <===后台启用,不后台运行直接就连接上去了。

                    -N                                 <===不打开远程shell,处于等待状态

                    192.168.32.102             <===跳板机B的ip地址

       第四步:在A上直接telnet 127.0.0.1 9527 <===当访问本机的9527的端口时,被加密后转发到ssh server(B)的ssh服务,再解密被转发到telnet server(C)的23端口

        总结:因为这是在本地执行操作的,也可以称作为ssh的本地转发。这么做虽然加密了,但是在防火墙上依然对22端口没有限制,外部机器可以通过tcp:22端口访问内部。所以很多企业是不允许打开22端口的。那假如22端口也被防火墙屏蔽了怎么办呢?既然有本地转发,肯定有远程转发啦!

         ssh远程转发:与上面的架构一样,只是ssh server和ssh client发生变化。A和B互相调换位置。如下图:这次我们换一个不安全的邮件smtp服务。

    技术分享

    第一步:由于这次我们模拟的是SMTP服务,需要实现修改一下smtp的配置:

        vim /etc/postfix/main.cf            <===配置文件

            inet_interfaces = all        <===取消#,使这行生效

            #inet_interfaces = localhost      <===注销此行

        重启服务:service postfix restart

    第二步:在B上操作:ssh -R 9527:192.168.32.103:25 -Nf 192.168.32.101    <===远程是-R,其余选项参考上面

    第三步:在A上telnet 127.0.0.1 9527连接成功!

    总结:远程转发相比较本地转发来说,比较安全。不管防火墙屏蔽了任何端口,都不影响,不涉及外部机器对防火墙主动发起请求。A连接的C的telnet实际已经被B上的ssh进行封装。所以也是安全的。

ssh转发补充:
       其实ssh还有一种转发模式,就是动态转发。应用比较多的就是我们说的科学上网。 

       在本机上执行ssh -D 1080 192.168.32.102     <===-D 本机的1080端口做为代理服务器,后面是代理服务器的IP地址。

        *curl --socks5 127.0.0.1 http://192.168.32.103 <===测试连接103的网站能否打开,使用浏览器需要设置一下代理。

        访问外网有风险,建议大家还是不要过多的科学上网。     

以上是关于SSH转发的主要内容,如果未能解决你的问题,请参考以下文章

SSH进行端口转发

利用SSH端口转发实现远程访问内网主机远程桌面 建立SSH转发

SSH端口转发

SSH端口转发

ssh动态端口转发

安全牛学习笔记SSH远程端口转发和动态端口转发以及X协议转发