一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SSH隧道端口轉發(fā)功能詳解

馬哥Linux運維 ? 來源:博客園駿馬金龍 ? 2024-10-24 17:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.1 ssh安全隧道(一):本地端口轉發(fā)

如下圖,假如host3和host1、host2都同互相通信,但是host1和host2之間不能通信,如何從host1連接上host2?

對于實現(xiàn)ssh連接來說,實現(xiàn)方式很簡單,從host1 ssh到host3,再ssh到host2,也就是將host3作為跳板的方式。但是如果不是ssh,而是http的80端口呢?如何讓host1能訪問host2的80端口?

ee069886-90f6-11ef-a511-92fbcf53809c.png

ssh支持本地端口轉發(fā),語法格式為:

ssh -L [local_bind_addr:]local_portremote_port middle_host

以上圖為例,實現(xiàn)方式是在host1上執(zhí)行:

[root@xuexi ~]# ssh -g -L 222280 host3

其中"-L"選項表示本地端口轉發(fā),其工作方式為:在本地指定一個由ssh監(jiān)聽的轉發(fā)端口(2222),將遠程主機的端口(host2:80)映射為本地端口(2222),當有主機連接本地映射端口(2222)時,本地ssh就將此端口的數(shù)據(jù)包轉發(fā)給中間主機(host3),然后host3再與遠程主機的端口(host2:80)通信。

現(xiàn)在就可以通過訪問host1的2222端口來達到訪問host2:80的目的了。例如:

ee1a8df0-90f6-11ef-a511-92fbcf53809c.png

再來解釋下"-g"選項,指定該選項表示允許外界主機連接本地轉發(fā)端口(2222),如果不指定"-g",則host4將無法通過訪問host1:2222達到訪問host2:80的目的。甚至,host1自身也不能使用172.16.10.5:2222,而只能使用localhost:2222或127.0.0.1:2222這樣的方式達到訪問host2:80的目的,之所以如此,是因為本地轉發(fā)端口默認綁定在回環(huán)地址上??梢允褂胋ind_addr來改變轉發(fā)端口的綁定地址,例如:

[root@xuexi ~]# ssh -L 172.16.10.5host2:80 host3

這樣,host1自身就能通過訪問172.16.10.5:2222的方式達到訪問host2:80的目的。

一般來說,使用轉發(fā)端口,都建議同時使用"-g"選項,否則將只有自身能訪問轉發(fā)端口。

再來分析下轉發(fā)端口通信的過程。

ee30081a-90f6-11ef-a511-92fbcf53809c.png

當host4發(fā)起172.16.10.5:2222的連接時(即步驟①),數(shù)據(jù)包的目標地址和端口為"172.16.10.5:2222"。由于host1上ssh已經監(jiān)聽了2222端口,并且知道該端口映射自哪臺主機哪個端口,所以將會把該數(shù)據(jù)包目標地址和端口替換為"172.16.10.3:80",并將此數(shù)據(jù)包通過轉發(fā)給host3。當host3收到該數(shù)據(jù)包時,發(fā)現(xiàn)是host1轉發(fā)過來請求訪問host2:80的數(shù)據(jù)包,所以host3將代為訪問host2的80端口。

所以,host1和host3之間的通信方式是SSH協(xié)議,這段連接是安全加密的,因此稱為"安全隧道",而host3和host2之間通信協(xié)議則是HTTP而不是ssh。

現(xiàn)在再來考慮下,通過本地端口轉發(fā)的方式如何實現(xiàn)ssh跳板的功能呢?仍以上圖為例:

[root@xuexi ~]# ssh -g -L 2233322 host3]

這樣只需使用ssh連上host1的22333端口就等于連接了host2的22端口。

最后,關于端口轉發(fā)有一個需要注意的問題:ssh命令中帶有要執(zhí)行的命令??紤]了下面的三條在host1上執(zhí)行的命令的區(qū)別。

[root@xuexi ~]# ssh -g -L 2233322 host3
[root@xuexi ~]# ssh -g -L 2233322 host3 "ifconfig"
[root@xuexi ~]# ssh -g -L 2233322 host3 "sleep 10"

第一條命令開啟了本地端口轉發(fā),且是以登錄到host3的方式開啟的,所以執(zhí)行完該命令后,將跳到host3主機上,當退出host3時,端口轉發(fā)功能將被關閉。另外,host1上之所以要開啟端口轉發(fā),目的是為了與host2進行通信,而不是跳到host3上,所以應該在ssh命令行上加上"-f"選項讓ssh在本機host1上以后臺方式提供端口轉發(fā)功能,而不是跳到host3上來提供端口轉發(fā)功能。

第二條命令在開啟本地轉發(fā)的時候還指定了要在host3上執(zhí)行"ifconfig"命令,但是ssh的工作機制是遠程命令執(zhí)行完畢的那一刻,ssh關閉連接,所以此命令開啟的本地端口轉發(fā)功能有效期只有執(zhí)行ifconfig命令的一瞬間。

第三條命令和第二條命令類似,只不過指定的是睡眠10秒命令,所以此命令開啟的本地轉發(fā)功能有效期只有10秒。

結合上面的分析,開啟端口轉發(fā)功能時,建議讓ssh以后臺方式提供端口轉發(fā)功能,且明確指示不要執(zhí)行任何ssh命令行上的遠程命令。即最佳開啟方式為:

[root@xuexi ~]# ssh -f -N -g -L 2233322 host3

1.2 ssh安全隧道(二):遠程端口轉發(fā)

ssh除了支持本地端口轉發(fā),還支持遠程端口轉發(fā)。顧名思義,遠程端口轉發(fā)表示的是將遠程端口的數(shù)據(jù)轉發(fā)到本地。

如下圖:假如host3是內網主機,它能和host2互相通信,也能和host1通信,但反過來,host1不能和host3通信。這時要讓host1訪問host3或host2就沒辦法通過本地端口轉發(fā)了,因為要在host1上開啟本地端口轉發(fā),必須要和host3通信請求建立隧道。

ee44cd04-90f6-11ef-a511-92fbcf53809c.png

可以通過在host3上發(fā)起遠程端口轉發(fā)來實現(xiàn),因為host3能和host1通信,host3可以請求在host1和host3之間建立隧道。

語法如下:

ssh -R [bind_addr:]remote1_port:host:port remote1

以上圖為例,實現(xiàn)方式是在host3上執(zhí)行:

[root@xuexi ~]# ssh -R 2233380 host1

這表示host3請求host1上的sshd服務,在host1上建立一個套接字監(jiān)聽22333端口,它是host2端口的映射,當有主機連接host1:22333時,此連接中的數(shù)據(jù)全部都通過host1和host3之間的安全隧道轉發(fā)給host3,再由host3向host2的80端口發(fā)起訪問。由于host3請求開啟的轉發(fā)端口是在遠程主機host1上的,所以稱為"遠程端口轉發(fā)"。

再考慮下面這條命令所開啟的遠程轉發(fā)端口,它是在host3上執(zhí)行的。

[root@xuexi ~]# ssh -R 2233380 host1

該命令將自身的host3:80映射到host1:22333上,這也能讓host1和host2、host3通信,因為隧道是建立在host1:22333<-->host3:80上的。

但是,遠程端口轉發(fā)和本地端口轉發(fā)最大的一個區(qū)別是,遠程轉發(fā)端口是由host1上的sshd服務控制的,默認配置情況下,sshd服務只允許本地開啟的遠程轉發(fā)端口(22333)綁定在環(huán)回地址(127.0.0.1)上,即使顯式指定了bind_addr也無法覆蓋。例如:

[root@xuexi ~]# ssh -R *host2:80 host1 

[root@xuexi ~]# netstat -tnlp
Active Internet connections (only servers)
tcp   0   0 0.0.0.0:22        0.0.0.0:*   LISTEN  8405/sshd  
tcp   0   0 127.0.0.1:25      0.0.0.0:*   LISTEN  1422/master
tcp   0   0 127.0.0.1:22333   0.0.0.0:*   LISTEN  8407/sshd  
tcp   0   0 :::22             :::*        LISTEN  8405/sshd  
tcp   0   0 ::1:25            :::*        LISTEN  1422/master
tcp   0   0 ::1:22333         :::*        LISTEN  8407/sshd

要允許本地的遠程轉發(fā)端口綁定在非環(huán)回地址上,需要在host1的sshd配置文件中啟用"GatewayPorts"項,它的默認值為no。啟動該選項后,不給定bind_addr或bind_addr設置為"*"都表示綁定在所有地址上。如下:

[root@xuexi ~]# ssh -g -R *host2:80 host1

[root@xuexi ~]# netstat -tnlp
Active Internet connections (only servers)
tcp   0  0 0.0.0.0:22      0.0.0.0:*   LISTEN  8466/sshd  
tcp   0  0 127.0.0.1:25    0.0.0.0:*   LISTEN  1422/master
tcp   0  0 0.0.0.0:22333   0.0.0.0:*   LISTEN  8468/sshd  
tcp   0  0 :::22           :::*        LISTEN  8466/sshd  
tcp   0  0 ::1:25          :::*        LISTEN  1422/master
tcp   0  0 :::22333        :::*        LISTEN  8468/sshd

和前面的本地轉發(fā)端口一樣,建議的幾個選項是:"-g"、"-f"、"-N"。即推薦的命令寫法是:

[root@xuexi ~]# ssh -fgN -R 2233380 host1

現(xiàn)在,就可以通過訪問host1:22333達到訪問host2:80的目的了。如下圖所示。

ee4f290c-90f6-11ef-a511-92fbcf53809c.png

1.3 ssh安全隧道(三):動態(tài)端口轉發(fā)(SOCKS代理)

無論是本地端口轉發(fā)還是遠程端口轉發(fā),都是將某固定主機及其端口映射到本地或遠程轉發(fā)端口上,例如將host2:80映射到host1:2222。也就是說,本地或遠程轉發(fā)端口和目標端口所代表的應用層協(xié)議是一對一的關系,2222端口必須對應的是http的80端口,使用瀏覽器向host1:2222端口發(fā)起http請求當然沒問題,但是使用ssh工具向host1:2222發(fā)起連接將會被拒絕,因為host2上http服務只能解析http請求,不能解析ssh連接請求。

ssh支持動態(tài)端口轉發(fā),由ssh來判斷發(fā)起請求的工具使用的是什么應用層協(xié)議,然后根據(jù)判斷出的協(xié)議結果決定目標端口。
以下圖為例進行說明,host1處在辦公內網,能和host3互相通信,但它無法直接和互聯(lián)網和host2通信,而host3則可以和host2以及互聯(lián)網通信。

ee6af24a-90f6-11ef-a511-92fbcf53809c.png

要讓host1訪問互聯(lián)網,又能和host2的22端口即ssh服務通信,顯然在host1上僅設置一個本地端口轉發(fā)是不夠的,雖然可以設置多個本地轉發(fā)端口分別映射不同的端口,但這顯然比較笨重和麻煩。使用動態(tài)端口轉發(fā)即可。

語法格式為:

ssh -D [bind_addr:]port remote

以上圖為例,在host1上執(zhí)行:

[root@xuexi ~]# ssh -Nfg -D 2222 host3

執(zhí)行完上面的命令,host1將在本地開啟SOCKS4或SOCKS5服務來監(jiān)聽2222端口。只要客戶端程序工具(隱含了使用的應用層協(xié)議類型)將其自身的代理設置為host1:2222,則該程序所有產生的數(shù)據(jù)都將轉發(fā)到host1:2222,再由host1:2222將數(shù)據(jù)通過隧道轉發(fā)給host3,最后由host3和互聯(lián)網或host2上對應客戶端工具的應用層協(xié)議的端口進行通信。

其實很簡單,假如host4使用IE瀏覽器作為客戶端工具,并將IE瀏覽器的代理設置為host1:2222,由于IE瀏覽器發(fā)起的請求使用的是http協(xié)議(此處不考慮其他可能的協(xié)議),那么IE瀏覽器產生的數(shù)據(jù)都轉發(fā)到host1:2222,再由host1:2222通過隧道轉發(fā)給host3,host3能聯(lián)網,所以host4就實現(xiàn)了聯(lián)網功能。如下圖設置:

ee780ff2-90f6-11ef-a511-92fbcf53809c.png

再比如host4上的QQ客戶端也可以設置代理。這樣QQ產生的數(shù)據(jù)都將通過host1:2222轉發(fā)出去,host1:2222再將QQ的數(shù)據(jù)轉發(fā)到host3上,host3知道這些數(shù)據(jù)使用的協(xié)議是oicq,所以host3會去連接騰訊的QQ服務器(oicq服務對應的端口)。

ee8b5d00-90f6-11ef-a511-92fbcf53809c.png

ssh只支持socks4和socks5兩種代理,有些客戶端工具中需要明確指明代理類型。

和本地、遠程端口轉發(fā)一樣,建議的選項是:"-f"、"-N"和"-g"。

由于ssh動態(tài)端口轉發(fā)是ssh客戶端的功能,所以不使用ssh命令,使用SecurtCRT、putty等ssh客戶端工具都可以實現(xiàn)代理上網。例如,本地主機不能上網,但能和172.16.10.6的SSH服務通信,而172.16.10.6能上網,則可以在本地主機先使用SecurtCRT連接172.16.10.6,再在對應的會話選項上做如下設置,使得本地主機也能上網。(注意:我沒說可以FQ啊,好公民不FQ!?。?

ee9fa724-90f6-11ef-a511-92fbcf53809c.png

然后,在本地主機查看下是否監(jiān)聽了SecurtCRT中指定的8888動態(tài)轉發(fā)端口。

eec3da18-90f6-11ef-a511-92fbcf53809c.png

現(xiàn)在,本機所有數(shù)據(jù)包都通過SecurtCRT所連接的172.16.10.6流向外界。

鏈接:https://www.cnblogs.com/f-ck-need-u/p/10482832.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 主機
    +關注

    關注

    0

    文章

    1036

    瀏覽量

    35897
  • 端口
    +關注

    關注

    4

    文章

    1046

    瀏覽量

    32821
  • SSH
    SSH
    +關注

    關注

    0

    文章

    196

    瀏覽量

    16851

原文標題:SSH隧道:端口轉發(fā)功能詳解

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    端口映射和端口轉發(fā)的區(qū)別?

    端口轉發(fā),有時被叫做隧道,是安全殼為網絡安全通信使用的一種方法。端口轉發(fā)轉發(fā)一個網絡
    發(fā)表于 12-04 17:31 ?3.7w次閱讀
    <b class='flag-5'>端口</b>映射和<b class='flag-5'>端口</b><b class='flag-5'>轉發(fā)</b>的區(qū)別?

    與Ultra96聯(lián)網端口轉發(fā)

    電子發(fā)燒友網站提供《與Ultra96聯(lián)網端口轉發(fā).zip》資料免費下載
    發(fā)表于 11-28 09:32 ?0次下載
    與Ultra96聯(lián)網<b class='flag-5'>端口</b><b class='flag-5'>轉發(fā)</b>

    SSH第3部分:配置SSH反向隧道以減少暴露的端口

    新軟件包或執(zhí)行其他管理操作。SSH 的一個鮮為人知的功能是能夠通過同一通信通道轉發(fā)其他但不同的網絡流量。例如,您可以使用 SSH 隧道加密
    的頭像 發(fā)表于 01-03 09:45 ?3698次閱讀
    <b class='flag-5'>SSH</b>第3部分:配置<b class='flag-5'>SSH</b>反向<b class='flag-5'>隧道</b>以減少暴露的<b class='flag-5'>端口</b>

    如何修改Linux系統(tǒng)的SSH端口

    SSH 是一種網絡協(xié)議,用于與 Linux 系統(tǒng)進行遠程安全通信。默認情況下,SSH 服務使用端口 22。
    的頭像 發(fā)表于 03-20 16:46 ?2923次閱讀

    SSH命令詳解

    ssh是一種安全的遠程登錄及傳輸協(xié)議。ssh可用于遠程登錄、遠程文件傳輸?shù)取?b class='flag-5'>ssh是安全的shell。
    的頭像 發(fā)表于 06-02 10:00 ?1.8w次閱讀
    <b class='flag-5'>SSH</b>命令<b class='flag-5'>詳解</b>

    探索物聯(lián)網HMI的端口轉發(fā)和NAT功能

    端口轉發(fā)和NAT功能常用于內網穿透,實現(xiàn)內部網絡和外部網絡之間的數(shù)據(jù)傳輸。本文以內網IP攝像頭為例,介紹如何通過虹科物聯(lián)網HMI的端口轉發(fā)
    的頭像 發(fā)表于 07-20 10:00 ?805次閱讀
    探索物聯(lián)網HMI的<b class='flag-5'>端口</b><b class='flag-5'>轉發(fā)</b>和NAT<b class='flag-5'>功能</b>

    探索物聯(lián)網HMI的端口轉發(fā)和NAT功能

    點擊藍字關注我們前言端口轉發(fā)和NAT功能常用于內網穿透,實現(xiàn)內部網絡和外部網絡之間的數(shù)據(jù)傳輸,工作人員通過外部網絡便可安全訪問到內網設備,實現(xiàn)設備的狀態(tài)監(jiān)測。接下來小編將為大家介紹支持端口
    的頭像 發(fā)表于 07-31 22:20 ?1050次閱讀
    探索物聯(lián)網HMI的<b class='flag-5'>端口</b><b class='flag-5'>轉發(fā)</b>和NAT<b class='flag-5'>功能</b>

    SSH端口號是什么?SSH原理詳解分析

    OpenSSH是SSH協(xié)議的開源實現(xiàn),支持在Unix操作系統(tǒng)上運行,最新版本可以在OpenSSH官網下載。目前Windows10已經包含OpenSSH客戶端和服務器軟件,可在“設置—應用—應用與功能—可選功能”中搜索安裝。
    發(fā)表于 10-16 16:00 ?9241次閱讀
    <b class='flag-5'>SSH</b><b class='flag-5'>端口</b>號是什么?<b class='flag-5'>SSH</b>原理<b class='flag-5'>詳解</b>分析

    SSH端口號是什么?SSH是如何工作的?

    的安全隱患。隨著人們對網絡安全的重視,這些方式已經慢慢不被接受。SSH協(xié)議通過對網絡數(shù)據(jù)進行加密和驗證,在不安全的網絡環(huán)境中提供了安全的登錄和其他安全網絡服務。作為Telnet和其他不安全遠程shell協(xié)議的安全替代方案,目前SSH協(xié)議已經被全世界廣泛使用,大多數(shù)設備都支
    的頭像 發(fā)表于 11-10 10:06 ?3710次閱讀
    <b class='flag-5'>SSH</b><b class='flag-5'>端口</b>號是什么?<b class='flag-5'>SSH</b>是如何工作的?

    端口轉發(fā)端口映射的區(qū)別 端口映射和端口轉發(fā)的各自意義?

    端口轉發(fā)端口映射的區(qū)別 端口映射和端口轉發(fā)的各自意義?
    的頭像 發(fā)表于 11-22 17:41 ?5744次閱讀

    Ubuntu修改SSH默認端口指南

    修改SSH(Secure Shell)默認端口是一種增加系統(tǒng)安全性的方法,因為大多數(shù)攻擊都是針對默認端口22進行的。以下是在Ubuntu系統(tǒng)上修改SSH默認
    的頭像 發(fā)表于 12-21 17:27 ?2154次閱讀

    宏集干貨丨探索物聯(lián)網HMI的端口轉發(fā)和NAT功能

    端口轉發(fā)和NAT功能常用于內網穿透,實現(xiàn)內部網絡和外部網絡之間的數(shù)據(jù)傳輸,工作人員通過外部網絡便可安全訪問到內網設備,實現(xiàn)設備的狀態(tài)監(jiān)測。接下來小編將為大家介紹支持端口
    的頭像 發(fā)表于 01-17 11:01 ?683次閱讀
    宏集干貨丨探索物聯(lián)網HMI的<b class='flag-5'>端口</b><b class='flag-5'>轉發(fā)</b>和NAT<b class='flag-5'>功能</b>

    路由器端口轉發(fā)怎么設置

    )技術,它允許將路由器的一個或多個外部端口映射到內網中的一個設備或服務上。這樣,外部設備就可以通過這些端口訪問內網中的設備或服務,實現(xiàn)遠程訪問、遠程控制等功能。 1.2 路由器端口
    的頭像 發(fā)表于 07-09 11:33 ?1.2w次閱讀

    什么是反向SSH?如何創(chuàng)建反向SSH隧道

    反向 SSH 是一種可用于從外部世界訪問系統(tǒng)(位于防火墻后面)的技術。
    的頭像 發(fā)表于 08-05 15:16 ?1226次閱讀

    SSH常用命令詳解

    SSH常用命令詳解
    的頭像 發(fā)表于 06-04 11:30 ?351次閱讀