Linux基礎(chǔ)教程之SSH端口轉(zhuǎn)發(fā)
1
2 3 4 5 6 7 8 |
? ? SSH 會(huì)自動(dòng)加密和解密所有SSH 客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)。但是,SSH 還能夠?qū)⑵渌鸗CP 端口的網(wǎng)絡(luò)數(shù)據(jù)通過(guò)SSH 鏈接來(lái)轉(zhuǎn)發(fā),并且自動(dòng)提供了相應(yīng)的加密及解密服務(wù)。這一過(guò)程也被叫做“隧道”(tunneling),這是因?yàn)镾SH 為其他TCP 鏈接提供了一個(gè)安全的通道來(lái)進(jìn)行傳輸而得名。例如,Telnet,SMTP,LDAP 這些TCP 應(yīng)用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時(shí),如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許SSH 的連接,也能夠通過(guò)將TCP 端口轉(zhuǎn)發(fā)來(lái)使用SSH 進(jìn)行通訊。
? ?SSH 端口轉(zhuǎn)發(fā)能夠提供兩大功能: ? (1)加密SSH Client 端至SSH Server 端之間的通訊數(shù)據(jù) ? (2)突破防火墻的限制完成一些之前無(wú)法建立的TCP 連接 ? ? 例如這樣一種應(yīng)用場(chǎng)景:B、C位于企業(yè)內(nèi)部的同一個(gè)局域網(wǎng),A位于互聯(lián)網(wǎng)上的某個(gè)網(wǎng)絡(luò),企業(yè)內(nèi)部設(shè)置了防火墻,A想通過(guò)互聯(lián)網(wǎng)訪問(wèn)C機(jī)器上的telnet服務(wù),由于telenet服務(wù)不安全,所以企業(yè)的防火墻策略中一般會(huì)禁止外部用戶訪問(wèn)內(nèi)部機(jī)器上的telnet,并且企業(yè)一般不允許開(kāi)VPN,開(kāi)VPN相當(dāng)于直接連到企業(yè)內(nèi)部。由于ssh服務(wù)是比較安全的,所以企業(yè)的防火墻策略中一般會(huì)允許外部用戶訪問(wèn)內(nèi)部某個(gè)運(yùn)行著ssh服務(wù)的主機(jī),所以A要訪問(wèn)C上的telenet服務(wù)可以通過(guò)ssh端口轉(zhuǎn)發(fā)的方式,假設(shè)B就是一個(gè)ssh服務(wù)器,即A可以通過(guò)訪問(wèn)B上的ssh服務(wù)進(jìn)而去訪問(wèn)C上的telenet服務(wù),此時(shí)B是堡壘機(jī),相當(dāng)于一個(gè)跳板,A借助這個(gè)跳板訪問(wèn)企業(yè)內(nèi)部C的telnet服務(wù),此時(shí)A和B之間是ssh連接,B和C之間。下面模擬一下這種場(chǎng)景: ? ?A:centos7(192.168.25.107) ? ?B:rhel5(192.168.25.100) ? ?C:centos6(192.168.25.106) |
1
|
查看C上是否安裝了telnet服務(wù)
|
1
|
查看telnet服務(wù)是否已打開(kāi)(由圖中可看出telnet服務(wù)已設(shè)為開(kāi)機(jī)啟動(dòng))
|
1
|
telnet服務(wù)的23端口已打開(kāi)
|
1
|
先禁用一下C的防火墻
|
1
|
拒絕來(lái)自于A發(fā)起的請(qǐng)求,模擬防火墻對(duì)telnet連接的限制
|
1
|
A上確認(rèn)一下沒(méi)有其他服務(wù)正在使用9527端口
|
1
|
? ?因?yàn)橹白隽嘶趉ey驗(yàn)證的實(shí)驗(yàn),所以沒(méi)有輸密碼直接就連上了,并且跳轉(zhuǎn)到了遠(yuǎn)程shell即B上,即此時(shí)A與B已經(jīng)建立起ssh連接,相當(dāng)于為不安全的telnet連接搭建了一個(gè)安全的隧道。此時(shí)想在A上繼續(xù)執(zhí)行命令,不能exit退出遠(yuǎn)程shell,因?yàn)榇藭r(shí)隧道已經(jīng)建起來(lái)了,若exit,隧道就斷開(kāi)了,所以要么再單獨(dú)開(kāi)一個(gè)終端,要么加-Nf選項(xiàng)。
|
1
2 3 4 5 |
-N不打開(kāi)遠(yuǎn)程shell,不跳到遠(yuǎn)程主機(jī)
-f直接在本機(jī)執(zhí)行命令,不用再打開(kāi)新終端,即后臺(tái)執(zhí)行 ?192.168.25.106 目標(biāo)主機(jī)C的IP ?23目標(biāo)主機(jī)C上的服務(wù)端口,即telnet服務(wù) ?192.168.25.100跳板機(jī)B的IP(應(yīng)確保跳板機(jī)上有ssh服務(wù)) |
、
1
|
? ? 如圖第三個(gè)連接,是B的22端口(即B的ssh服務(wù))連接到A的32926端口,即A和B的ssh連接已建立,即隧道已經(jīng)搭好了,就等著發(fā)起telenet流量了,此時(shí)還沒(méi)有telenet連接。
|
1
|
本地的9527端口已處于監(jiān)聽(tīng)狀態(tài)
|
1
|
C上還沒(méi)有到23端口的連接,即還沒(méi)有到telenet服務(wù)的連接
|
1
2 3 4 |
? ?執(zhí)行完ssh -L命令后,就在本機(jī)(即A)打開(kāi)了一個(gè)隨機(jī)端口32926,用作ssh客戶端,并且建立起與ssh服務(wù)器(即B)的連接,并且打開(kāi)本機(jī)(即A)的9527端口,讓其充當(dāng)telenet服務(wù)器,去監(jiān)聽(tīng)本機(jī)的telnet請(qǐng)求
? ?執(zhí)行完telenet 127.0.0.1 9527命令后,就在本機(jī)(即A)打開(kāi)了隨機(jī)端口38528,充當(dāng)telenet客戶端,由它發(fā)起telnet請(qǐng)求,本機(jī)的9527端口(即telnet服務(wù)端)監(jiān)聽(tīng)到請(qǐng)求后,就與本機(jī)的38528端口(即telenet客戶端)建立起telnet連接 ? ?本機(jī)的9527端口(即telnet服務(wù)端)接收到telnet數(shù)據(jù)包后,就將其轉(zhuǎn)交給本機(jī)32926端口(ssh客戶端),由它對(duì)telnet數(shù)據(jù)包進(jìn)行加密封裝,封裝成ssh包,并由由它轉(zhuǎn)發(fā)給ssh服務(wù)器(即B)的22端口 ? ?圖中第一個(gè)連接是38528端口(即telenet客戶端)向9527端口(即telnet服務(wù)端)發(fā)起的連接,第三個(gè)連接是9527端口(即telnet服務(wù)端)向38528端口(即telenet客戶端)發(fā)起的連接,因?yàn)閮蓚€(gè)端口位于同一臺(tái)主機(jī),所以都在這里顯示了出來(lái)。 |
1
2 3 |
? ? ssh服務(wù)器(即B)收到ssh客戶端(即A)發(fā)來(lái)的ssh包后,將其解密解封裝,得到telnet數(shù)據(jù)包,然后在本機(jī)打開(kāi)53580隨機(jī)端口用作telnet客戶端,并將telnet數(shù)據(jù)包轉(zhuǎn)發(fā)給telnet服務(wù)器(即C)的23端口
? ? 圖中第三條連接是ssh客戶端(即A,端口為32926)到B(即ssh服務(wù)器)的連接; ? ? 第一條是B(即telnet客戶端,端口為53580)到telnet服務(wù)器(即C,端口為23端口)的連接。 |
1
|
? ? 此時(shí)C上已建立起telnet連接,是由telnet客戶端(即B,端口為53580)發(fā)起的
|
1
|
? ?如圖可看出,A已經(jīng)成功連上了C
|
1
|
? ?exit退出與遠(yuǎn)程shell的連接
|
1
2 3 |
? ?退出后,A上telnet服務(wù)器(即本機(jī)的9527端口)與telenet客戶端(本機(jī)的38528端口)之間的telnet連接斷開(kāi),
? ?B(即telnet客戶端,端口為53580)到C(即telnet服務(wù)器,端口為23端口)的telnet連接斷開(kāi) ? ?此時(shí)只剩下ssh客戶端(即A)與ssh服務(wù)器(即B)的ssh連接,即隧道仍存在,本機(jī)的9527端口仍處于監(jiān)聽(tīng)狀態(tài) |
1
|
? ?用ps aux可看到后臺(tái)執(zhí)行的ssh服務(wù)
|
1
|
? ?關(guān)閉ssh進(jìn)程
|
1
|
? ?關(guān)了之后本機(jī)的9527端口也關(guān)了
|
1
|
? 此時(shí)A再次發(fā)起telenet連接已經(jīng)連不上了
|