成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入講解SSH協議的轉發概念

網絡 網絡管理
本文重點介紹了SSH協議的相關轉發概念??偣卜譃樗膫€部分:首先我們來對轉發的基本概念進行理解,然后分別對各種轉發進行講解,之后應用實例進行分析,最后全文總結。

網絡的使用,離不開安全措施的部署。在網絡自身當中,也有相關規定的安全協議。今天我們介紹的就是其中的SSH協議。那么如何在具體的設置中體現出SSH協議的作用呢?我們今天就來介紹一下相關的內容。那么通過本文的介紹,讀者可以從中了解到如何應用SSH端口轉發機制來解決日常工作/生活中的一些問題。學會在非安全環境下使用端口轉發來加密網絡應用,保護個人隱私以及重要商業信息。同時也能夠用此技術解決工作中一些常見問題,例如解決防火墻及網絡應用本身帶來的一些限制。

第一部分 概述

當你在咖啡館享受免費 WiFi 的時候,有沒有想到可能有人正在竊取你的密碼及隱私信息?當你發現實驗室的防火墻阻止了你的網絡應用端口,是不是有苦難言?來看看SSH的端口轉發功能能給我們帶來什么好處吧!

端口轉發概述

讓我們先來了解一下端口轉發的概念吧。我們知道,SSH協議會自動加密和解密所有SSH客戶端與服務端之間的網絡數據。但是,SSH 還同時提供了一個非常有用的功能,這就是端口轉發。它能夠將其他TCP端口的網絡數據通過SSH鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程有時也被叫做“隧道"(tunneling),這是因為SSH為其他TCP鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些TCP應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果您工作環境中的防火墻限制了一些網絡端口的使用,但是允許SSH的連接,那么也是能夠通過將TCP端口轉發來使用SSH進行通訊。總的來說SSH端口轉發能夠提供兩大功能:

加密SSH Client 端至SSH Server端之間的通訊數據。突破防火墻的限制完成一些之前無法建立的TCP連接。

圖 1.SSH端口轉發

圖 1.SSH端口轉發

如上圖所示,使用了端口轉發之后,TCP 端口 A 與 B 之間現在并不直接通訊,而是轉發到了SSH協議客戶端及服務端來通訊,從而自動實現了數據加密并同時繞過了防火墻的限制。#p#

第二部分 本地轉發與遠程轉發

本地轉發實例分析

我們先來看第一個例子,在實驗室里有一臺 LDAP 服務器(Ldap Server Host),但是限制了只有本機上部署的應用才能直接連接此 LDAP服務器。如果我們由于調試或者測試的需要想臨時從遠程機器(LdapClientHost)直接連接到這個 LDAP 服務器 , 有什么方法能夠實現呢?

答案無疑是本地端口轉發了,它的命令格式是:

  1. ssh -L <local port>:<remote host>:<remote port> <SSH hostname> 

在Ldap Client Host上執行如下命令即可建立一個SSH協議的本地端口轉發,例如:

  1. $SSH-L 7001:localhost:389 Ldap Server Host 

圖 2. 本地端口轉發

圖 2. 本地端口轉發

這里需要注意的是本例中我們選擇了 7001 端口作為本地的監聽端口,在選擇端口號時要注意非管理員帳號是無權綁定 1-1023 端口的,所以一般是選用一個 1024-65535 之間的并且尚未使用的端口號即可。

然后我們可以將遠程機器(LdapClientHost)上的應用直接配置到本機的 7001 端口上(而不是 LDAP 服務器的 389 端口上)。之后的數據流將會是下面這個樣子:

我們在Ldap Client Host上的應用將數據發送到本機的 7001 端口上,而本機的SSH Client 會將 7001 端口收到的數據加密并轉發到 LdapServertHost 的SSH Server 上。SSH Server 會解密收到的數據并將之轉發到監聽的 LDAP 389 端口上,最后再將從 LDAP 返回的數據原路返回以完成整個流程。我們可以看到,這整個流程應用并沒有直接連接 LDAP 服務器,而是連接到了本地的一個監聽端口,但是SSH端口轉發完成了剩下的所有事情,加密,轉發,解密,通訊。

這里有幾個地方需要注意:

SSH協議端口轉發是通過SSH連接建立起來的,我們必須保持這個SSH連接以使端口轉發保持生效。一旦關閉了此連接,相應的端口轉發也會隨之關閉。我們只能在建立SSH連接的同時創建端口轉發,而不能給一個已經存在的SSH連接增加端口轉發。

你可能會疑惑上面命令中的 <remote host> 為什么用 localhost,它指向的是哪臺機器呢?在本例中,它指向 LdapServertHost 。我們為什么用 localhost 而不是 IP 地址或者主機名呢?其實這個取決于我們之前是如何限制 LDAP 只有本機才能訪問。如果只允許 lookback 接口訪問的話,那么自然就只有 localhost 或者 IP 為 127.0.0.1 才能訪問了,而不能用真實 IP 或者主機名。

命令中的 <remote host> 和 <SSH hostname> 必須是同一臺機器么?其實是不一定的,它們可以是兩臺不同的機器。我們在后面的例子里會詳細闡述這點。好了,我們已經在Ldap Client Host建立了端口轉發,那么這個端口轉發可以被其他機器使用么?比如能否新增加一臺 LdapClientHost2 來直接連接Ldap Client Host的 7001 端口?答案是不行的,在主流SSH實現中,本地端口轉發綁定的是 lookback 接口,這意味著只有 localhost 或者 127.0.0.1 才能使用本機的端口轉發 , 其他機器發起的連接只會得到“ connection refused. "。好在SSH同時提供了 GatewayPorts 關鍵字,我們可以通過指定它與其他機器共享這個本地端口轉發。

  1. ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname> 

遠程轉發實例分析

我們來看第二個例子,這次假設由于網絡或防火墻的原因我們不能用SSH協議直接從Ldap Client Host連接到 LDAP 服務器(LdapServertHost),但是反向連接卻是被允許的。那此時我們的選擇自然就是遠程端口轉發了。

它的命令格式是:

  1. ssh -R <local port>:<remote host>:<remote port> <SSH hostname> 

例如在 LDAP 服務器(LdapServertHost)端執行如下命令:

  1. $SSH-R 7001:localhost:389Ldap Client Host 

圖 3. 遠程端口轉發

圖 3. 遠程端口轉發

和本地端口轉發相比,這次的圖里,SSH Server 和SSH Client 的位置對調了一下,但是數據流依然是一樣的。我們在Ldap Client Host上的應用將數據發送到本機的 7001 端口上,而本機的SSH Server 會將 7001 端口收到的數據加密并轉發到 LdapServertHost 的SSH Client 上。SSH Client 會解密收到的數據并將之轉發到監聽的 LDAP 389 端口上,最后再將從 LDAP 返回的數據原路返回以完成整個流程。

看到這里,你是不是會有點糊涂了么?為什么叫本地轉發,而有時又叫遠程轉發?這兩者有什么區別?

本地轉發與遠程轉發的對比與分析

不錯,SSH Server,SSH Client,Ldap Servert Host,Ldap Client Host,本地轉發,遠程轉發,這么多的名詞的確容易讓人糊涂。讓我們來分析一下其中的結構吧。首先,SSH 端口轉發自然需要SSH連接,而SSH協議連接是有方向的,從SSH Client 到SSH Server 。而我們的應用也是有方向的,比如需要連接 LDAP Server 時,LDAP Server 自然就是 Server 端,我們應用連接的方向也是從應用的 Client 端連接到應用的 Server 端。如果這兩個連接的方向一致,那我們就說它是本地轉發。而如果兩個方向不一致,我們就說它是遠程轉發。我們可以回憶上面的兩個例子來做個對照。

本地轉發時:

LdapClientHost 同時是應用的客戶端,也是SSH Client,這兩個連接都從它指向 LdapServertHost(既是 LDAP 服務端,也是SSH Server)。

遠程轉發時:

LdapClientHost 是應用的客戶端,但卻是SSH Server ;而 LdapServertHost 是 LDAP 的服務端,但卻是SSH Client 。這樣兩個連接的方向剛好相反。

另一個方便記憶的方法是,Server 端的端口都是預定義的固定端口(SSH Server 的端口 22,LDAP 的端口 389),而 Client 端的端口都是動態可供我們選擇的端口(如上述例子中選用的 7001 端口)。如果 Server 端的兩個端口都在同一臺機器,Client 端的兩個端口都在另一臺機器上,那么這就是本地連接;如果這四個端口交叉分布在兩個機器上,每臺機器各有一個 Server 端端口,一個 Client 端端口,那就是遠程連接。

弄清楚了兩者的區別之后,再來看看兩者的相同之處。如果你所在的環境下,既允許Ldap Client Host發起SSH連接到 Ldap Server Host,也允許 Ldap Server Host 發起SSH協議連接到 Ldap Client Host 。那么這時我們選擇本地轉發或遠程轉發都是可以的,能完成一樣的功能。

接著讓我們來看個進階版的端口轉發。我們之前涉及到的各種連接/轉發都只涉及到了兩臺機器,還記得我們在本地轉發中提到的一個問題么?本地轉發命令中的 <remote host> 和 <SSH hostname> 可以是不同的機器么?

  1. ssh -L <local port>:<remote host>:<remote port> <SSH hostname> 

答案是可以的!讓我們來看一個涉及到四臺機器 (A,B,C,D) 的例子。

圖 4. 多主機轉發應用

圖 4. 多主機轉發應用

在SSH Client(C) 執行下列命令來建立SSH協議連接以及端口轉發:

  1. $SSH-g -L 7001:<B>:389 <D> 

然后在我們的應用客戶端(A)上配置連接機器(C )的 7001 端口即可。注意我們在命令中指定了“ -g "參數以保證機器(A)能夠使用機器(C)建立的本地端口轉發。而另一個值得注意的地方是,在上述連接中,(A)<-> (C) 以及 (B)<->(D) 之間的連接并不是安全連接,它們之間沒有經過SSH的加密及解密。如果他們之間的網絡并不是值得信賴的網絡連接,我們就需要謹慎使用這種連接方式了。#p#

第三部分 其他類型的轉發

動態轉發實例分析

恩,動態轉發,聽上去很酷。當你看到這里時,有沒有想過我們已經討論過了本地轉發,遠程轉發,但是前提都是要求有一個固定的應用服務端的端口號,例如前面例子中的 LDAP 服務端的 389 端口。那如果沒有這個端口號怎么辦?等等,什么樣的應用會沒有這個端口號呢?嗯,比如說用瀏覽器進行 Web 瀏覽,比如說 MSN 等等。

當我們在一個不安全的 WiFi 環境下上網,用SSH協議動態轉發來保護我們的網頁瀏覽及 MSN 信息無疑是十分必要的。讓我們先來看一下動態轉發的命令格式:

  1. $SSH-D <local port> <SSH Server> 

例如:

  1. $SSH-D 7001 <SSH Server> 

圖 5. 動態端口轉發

圖 5. 動態端口轉發

似乎很簡單,我們依然選擇了 7001 作為本地的端口號,其實在這里SSH是創建了一個 SOCKS 代理服務。來看看幫助文檔中對 -D 參數的描述:

-D port  This works by allocating a socket to listen to port on the local  side, and whenever a connection is made to this port, the con-  nection is forwarded over the secure channel, and the applica-  tion protocol is then used to determine where to connect to from  the remote machine.  Currently the SOCKS4 and SOCKS5 protocols  are supported, andSSHwill act as a SOCKS server.  Only root  can forward privileged ports.  Dynamic port forwardings can also  be specified in the configuration file.

之后的使用就簡單了,我們可以直接使用 localhost:7001 來作為正常的 SOCKS 代理來使用,直接在瀏覽器或 MSN 上設置即可。在SSH Client 端無法訪問的網站現在也都可以正常瀏覽。而這里需要值得注意的是,此時SSH協議所包護的范圍只包括從瀏覽器端(SSH Client 端)到SSH Server 端的連接,并不包含從SSH Server 端 到目標網站的連接。如果后半截連接的安全不能得到充分的保證的話,這種方式仍不是合適的解決方案。

X協議轉發實例分析

好了,讓我們來看最后一個例子-X協議轉發。

我們日常工作當中,可能會經常會遠程登錄到 Linux/Unix/Solaris/HP 等機器上去做一些開發或者維護,也經常需要以 GUI 方式運行一些程序,比如要求圖形化界面來安裝 DB2/WebSphere 等等。這時候通常有兩種選擇來實現:VNC 或者X窗口,讓我們來看看后者。

使用X窗口通常需要分別安裝:X Client 和XServer 。在本例中我們的XClient 就是所訪問的遠程 Linux/Unix/Solaris/HP,而我們的XServer 則是發起訪問的本地機器(例如你面前正在使用的筆記本或臺式機)。把XClient 端的X窗口顯示在XServer 端需要先行在XClient 端指定XServer 的位置,命令格式如下:

  1. export DISPLAY=<X Server IP>:<display #>.<virtual #> 

例如:

  1. export DISPLAY=myDesktop:1.0 

然后直接運行X應用即可,X 窗口就會自動在我們的本地端打開。

一切運行正常,但是,這時候 IT 部門突然在遠程 Linux/Unix/Solaris/HP 前面加了一道防火墻。非常不幸的是,X協議并不在允許通過的列表之內。怎么辦?只能使用 VNC 了么?不,其實只要使用了SSH協議端口轉發即可通過,同時也對X通訊數據做了加密,真是一舉兩得。(當然,使用此方法前最好先咨詢相關 IT 部門是否符合相應的安全條例,以免造成違規操作。)

建立命令也很簡單,直接從本地機器(X Server 端)發起一個如下的SSH連接即可:

  1. $SSH-X <SSH Server> 

圖 6. X轉發

圖 6. X轉發

建立連接之后就可以直接運行遠程的X應用。注意建立X轉發之后會自動設置 DISPLAY 環境變量,通常會被設置成localhost:10.0,我們無需也不應該在連接之后再進行修改此環境變量。

一個比較常見的場景是,我們的本地機器是 Windows 操作系統,這時可以選擇開源的 XMing 來作為我們的 XServer,而SSH Client 則可以任意選擇了,例如 PuTTY,Cygwin 均可以配置 訪問SSH的同時建立X轉發。#p#

第四部分 總結

至此,我們已經完成了本地端口轉發,遠程端口轉發,動態端口轉發以及X轉發的介紹。回顧起來,總的思路是通過將TCP連接轉發到SSH協議通道上以解決數據加密以及突破防火墻的種種限制。對一些已知端口號的應用,例如 Telnet/LDAP/SMTP,我們可以使用本地端口轉發或者遠程端口轉發來達到目的。動態端口轉發則可以實現 SOCKS 代理從而加密以及突破防火墻對 Web 瀏覽的限制。對于X應用,無疑是X轉發最為適用了。雖然每一部分我們都只是簡單的介紹了一下,但如果能靈活應用這些技巧,相信對我們的日常生活/工作也是會有所幫助的。

參考資料

《SSH權威指南》(O'Reilly 圖書)詳細介紹了SSH相關的更多技術內幕及相關技巧。在developerWorks中國網站Linux專區中學習更多 Linux 方面的知識。

作者簡介

申毅,IBM中國軟件開發中心 WebSphere Portal 部門軟件工程師。目前從事于 WebSphere Portal z/OS 升級包的開發工作。同時較為關注 Linux/Mac 平臺上的相關技術。

邵華,IBM中國軟件開發中心 WebSphere Portal 部門軟件工程師。目前從事與 WebSphere Portal FVT 的相關工作,對 Linux及Web相關技術較為關注。

責任編輯:佟健 來源: 互聯網
相關推薦

2010-06-10 15:46:07

RIP路由協議

2010-06-30 16:00:01

FTP協議

2010-07-01 14:42:16

SSH協議

2010-08-06 09:47:36

RIP路由協議

2009-12-28 13:38:40

BGPMPLS VPN

2010-07-13 16:32:33

VoIP協議

2010-07-14 17:04:47

DCCP協議

2010-06-25 15:32:07

2010-07-02 10:57:06

2010-07-08 15:18:06

SSH協議

2010-07-07 17:56:21

2010-06-12 16:25:17

NetBEUI協議

2010-08-02 16:41:15

2017-03-23 12:38:49

2010-06-08 12:31:15

HTTP協議實體

2010-08-23 17:16:16

DHCP協議

2010-06-29 12:22:01

MGCP協議

2009-12-17 15:56:34

Rails參數bind

2010-07-01 13:54:02

SSH協議

2010-07-13 15:19:55

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区三区 | 中文字幕三区 | 久久99精品久久久久久 | 一级做a | 一区二区三区在线免费看 | 一区二区伦理电影 | 99久久久无码国产精品 | 国产在线区 | 欧美天堂在线 | www.奇米| av免费成人| 久久中文字幕一区 | 国产极品粉嫩美女呻吟在线看人 | 久久久久一区 | 精品综合久久久 | 久草青青草 | 97国产精品 | 成人av网站在线观看 | 日韩精品一区二区三区在线观看 | 日本不卡免费新一二三区 | 日韩av成人 | 99久久99 | 天天看片天天干 | 午夜爽爽爽男女免费观看影院 | 欧美一级黄色片免费观看 | 91大神在线资源观看无广告 | 国产成人av一区二区三区 | 欧美日韩免费一区二区三区 | wwww.8888久久爱站网 | 亚洲午夜视频 | 亚洲精品视频在线播放 | 青青草亚洲 | 婷婷综合在线 | 狠狠干网站 | 欧美一区二区三区在线看 | 在线日韩欧美 | 在线播放国产一区二区三区 | 国产精品久久久久久久岛一牛影视 | 狠狠色综合久久婷婷 | 亚洲精品一区二区三区 | www.99热|