在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

SSH隧道端口轉發功能詳解

馬哥Linux運維 ? 來源:博客園駿馬金龍 ? 2024-10-24 17:08 ? 次閱讀

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

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

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

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

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

ssh -L [local_bind_addr:]local_portremote_port middle_host

以上圖為例,實現方式是在host1上執行:

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

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

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

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

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

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

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

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

再來分析下轉發端口通信的過程。

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

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

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

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

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

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

最后,關于端口轉發有一個需要注意的問題:ssh命令中帶有要執行的命令。考慮了下面的三條在host1上執行的命令的區別。

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

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

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

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

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

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

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

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

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

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

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

語法如下:

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

以上圖為例,實現方式是在host3上執行:

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

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

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

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

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

但是,遠程端口轉發和本地端口轉發最大的一個區別是,遠程轉發端口是由host1上的sshd服務控制的,默認配置情況下,sshd服務只允許本地開啟的遠程轉發端口(22333)綁定在環回地址(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

要允許本地的遠程轉發端口綁定在非環回地址上,需要在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

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

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

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

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

1.3 ssh安全隧道(三):動態端口轉發(SOCKS代理)

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

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

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

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

語法格式為:

ssh -D [bind_addr:]port remote

以上圖為例,在host1上執行:

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

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

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

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

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

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

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

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

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

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

然后,在本地主機查看下是否監聽了SecurtCRT中指定的8888動態轉發端口。

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

現在,本機所有數據包都通過SecurtCRT所連接的172.16.10.6流向外界。

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

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

    關注

    0

    文章

    1029

    瀏覽量

    35713
  • 端口
    +關注

    關注

    4

    文章

    1003

    瀏覽量

    32604
  • SSH
    SSH
    +關注

    關注

    0

    文章

    192

    瀏覽量

    16692

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

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

收藏 0人收藏

    評論

    相關推薦

    端口映射和端口轉發的區別?

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

    與Ultra96聯網端口轉發

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

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

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

    如何修改Linux系統的SSH端口

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

    SSH命令詳解

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

    探索物聯網HMI的端口轉發和NAT功能

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

    探索物聯網HMI的端口轉發和NAT功能

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

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

    OpenSSH是SSH協議的開源實現,支持在Unix操作系統上運行,最新版本可以在OpenSSH官網下載。目前Windows10已經包含OpenSSH客戶端和服務器軟件,可在“設置—應用—應用與功能—可選功能”中搜索安裝。
    發表于 10-16 16:00 ?8792次閱讀
    <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協議通過對網絡數據進行加密和驗證,在不安全的網絡環境中提供了安全的登錄和其他安全網絡服務。作為Telnet和其他不安全遠程shell協議的安全替代方案,目前SSH協議已經被全世界廣泛使用,大多數設備都支
    的頭像 發表于 11-10 10:06 ?3396次閱讀
    <b class='flag-5'>SSH</b><b class='flag-5'>端口</b>號是什么?<b class='flag-5'>SSH</b>是如何工作的?

    端口轉發端口映射的區別 端口映射和端口轉發的各自意義?

    端口轉發端口映射的區別 端口映射和端口轉發的各自意義?
    的頭像 發表于 11-22 17:41 ?5540次閱讀

    Ubuntu修改SSH默認端口指南

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

    宏集干貨丨探索物聯網HMI的端口轉發和NAT功能

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

    路由器端口轉發怎么設置

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

    什么是反向SSH?如何創建反向SSH隧道

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

    深入解析SSH協議,輕松實現安全高效的服務器管理

    過程中被竊聽或篡改。SSH支持多種身份驗證方法,包括密碼、公鑰和證書等,以確保只有授權用戶能夠訪問系統。除了遠程登錄,SSH還支持文件傳輸和端口轉發
    的頭像 發表于 12-19 13:40 ?593次閱讀
    主站蜘蛛池模板: 亚洲区免费 | 黄网站在线观看永久免费 | 日本三级2018亚洲视频 | 偷偷鲁影院手机在线观看 | 四虎国产精品永久在线看 | 天天色天天干天天 | 免费 视频 1级 | 狠狠色噜噜 | 欧美尺寸又黑又粗又长 | 午夜在线免费观看视频 | 日日噜噜夜夜狠狠tv视频免费 | 性欧美高清强烈性视频 | 五月天亚洲 | 成 人 免费 网站 | 夜夜摸天天操 | 性做久久久久久久久 | 色站在线 | 欧美三级黄 | 久久艹免费视频 | 国产成人1024精品免费 | 亚洲爱婷婷色婷婷五月 | 曰曰摸天天摸人人看久久久 | 日本网站黄色 | jiuse视频| 把小嫩嫩曰出白浆 | 免费网站日本永久免费观看 | 特级无码毛片免费视频尤物 | 夜间免费视频 | 亚洲爱爱图片 | 四虎影院永久在线 | 日本aaaa级 | 天堂在线最新版www中文 | 色aaa| 狠狠综合欧美综合欧美色 | 天天插天天狠 | 日韩成a人片在线观看日本 日韩成人黄色 | free chinese 国产精品 | 九色在线播放 | 欧美乱xxxxxxxxx | 伊人久久香 | 日韩欧美黄色 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品