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轉發的實際應用

      假如你在一家公司做運維,你在家的時候或者分公司同事、其他部門的人想連接公司內部的一臺主機,這時防火牆是阻止不允許訪問。甚至有些嚴格的公司×××都是不允許開啓的。防火牆是專門的網絡運維管理員管理,不可能因爲某一個人的小需求更改策略。那這時怎麼辦呢?企業內部有一臺ssh服務器,因爲ssh是加密的,外部直接連接ssh服務是可以的。現在可以通過ssh server當跳板機,間接的去連接其他主機。如下圖:A是外部一臺主機,想連接C,直接連是被防火牆拒絕的。B是ssh服務器,B是可以直接連C的。A可以通過與B搭一個“隧道”,B來轉發A的請求到C。情形具體參考下圖。

     wKioL1m9EUDCrp53AAAwf3xhntE346.png-wh_50

      第一步:模擬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服務。

    wKioL1m9Hu-DXnNXAAAxF8ient4710.png-wh_50

    第一步:由於這次我們模擬的是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的網站能否打開,使用瀏覽器需要設置一下代理。

        訪問外網有風險,建議大家還是不要過多的科學上網。     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章