您好,登錄后才能下訂單哦!
前言
眾所周知,一個(gè)公司內(nèi)部與外部網(wǎng)絡(luò)之間是由防火墻存在的,防火墻的的存在保證了,企業(yè)內(nèi)部的安全性。像一些明文傳輸?shù)膮f(xié)議telnet或者一些安全性不是那么高的協(xié)議icmp,走這些協(xié)議的數(shù)據(jù)時(shí) 極度不安全的,在防火墻規(guī)則中都是明令禁止的,有時(shí)我們由于業(yè)務(wù)的 需求,需要在外網(wǎng)與內(nèi)網(wǎng)傳輸一些像telnet這樣的流量,而我們又沒有權(quán)利去要求相關(guān)的部門隨意修改防火墻策略。此時(shí)SSH協(xié)議便可助你突破防火墻的障礙,成功完成數(shù)據(jù)傳輸。
ssh工作原理
SSH 會(huì)自動(dòng)加密和解密所有SSH客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)。但是,SSH還能夠?qū)⑵渌鸗CP端口的網(wǎng)絡(luò)數(shù)據(jù)通過SSH鏈接來轉(zhuǎn)發(fā),并且自動(dòng)提供了相應(yīng)的加密及解密服務(wù)。這一過程也被叫做"隧道"(tunneling),這是因?yàn)镾SH為其他TCP鏈接提供了一個(gè)安全的通道來進(jìn)行傳輸而得名。例如,Telnet,SMTP,LDAP這些TCP應(yīng)用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時(shí),如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許SSH的連接,也能夠通過將TCP端口轉(zhuǎn)發(fā)來使用SSH進(jìn)行通訊。
ssh本地轉(zhuǎn)發(fā)
1、應(yīng)用場(chǎng)景
假設(shè)公司有人到外地出差,但是有業(yè)務(wù)急需與公司內(nèi)網(wǎng)連接,傳輸一些數(shù)據(jù),我們知道這種情況。我們是沒有職權(quán)要求打開公司的防火墻的,此時(shí),我們就用到了ssh本地轉(zhuǎn)發(fā)的功能,通過ssh打通防火墻,實(shí)現(xiàn)與公司內(nèi)網(wǎng)通信。
2、原理圖
圖解:Host A以Host B為跳板機(jī),通過ssh協(xié)議先打通自己與局域網(wǎng)的“隧道”,然后以Host B的為telnet client端,建立與Host C的telnet連接,最終實(shí)現(xiàn)Host A能夠與目標(biāo)主機(jī)Host C之間實(shí)現(xiàn)telnet流量創(chuàng)輸。而在外圍有ssh協(xié)議為這些telnet流量“保駕護(hù)航”,我們?cè)谝膊挥脫?dān)心自己的數(shù)據(jù)被截獲。
3、實(shí)現(xiàn)ssh本地轉(zhuǎn)發(fā)
1)準(zhǔn)備階段
準(zhǔn)備3臺(tái)虛擬機(jī),可以使CentOS系列,也可以是RHEL系列。為了實(shí)驗(yàn)?zāi)軌蝽樌麑?shí)現(xiàn),我們手動(dòng)關(guān)閉防火墻(iptables -F)和SELinux(setenforce 0)當(dāng)然了這僅僅是為了實(shí)驗(yàn)的需要,在生產(chǎn)場(chǎng)景中實(shí)不允許的。然后確保Host C主機(jī)都有telnet server服務(wù),而Host B具有ssh server功能。通過rpm -q 來查看服務(wù)是否安裝。
2)建立連接
首先:測(cè)試Host A能否使用telnet與Host C建立連接,如果能,那么在Host C上使用防火墻規(guī)則禁用Host A在訪問(iptables -A INPUT -s HostA_ip -j REJECT)。
建立ssh隧道,實(shí)現(xiàn)防火墻的突破,進(jìn)入LAN。
上圖中,使用命令ssh -L實(shí)現(xiàn)隧道的建立。4000表示我們隨機(jī)指定開啟的端口,確保該端口是不被任何服務(wù)使用。172.18.253.159表示目標(biāo)主機(jī)(Host C)的的地址;23表示要連接目標(biāo)主機(jī)的相應(yīng)服務(wù)端口,如果是telnet服務(wù)則是23,smtp則監(jiān)聽在25。-N表示不打開遠(yuǎn)程shell,處于等待狀態(tài),-f表示后臺(tái)啟用。172.18.18.13則表示“跳板機(jī)”的地址,在本例中即Host B的IP地址。
上例中,我們用過ssh -tn查看發(fā)現(xiàn),我們其實(shí)不是與目錄主機(jī)建立了連接,而是與Host B建立了連接,這就說明,該隧道已經(jīng)建立好了。其次:我們?cè)偃ゲ榭碒ost C機(jī)器的連接情況,發(fā)現(xiàn),并沒有任何主機(jī)與自己建立連接。
最后:實(shí)現(xiàn)telnet流量傳輸。在Host A主機(jī)是哪個(gè)使用telnet去連接目標(biāo)主機(jī)Host B,出現(xiàn)下圖所示的內(nèi)容,則說明telnet鏈路已通,然后連接進(jìn)入目標(biāo)主機(jī)Host C,使用ss -tn 查看,你會(huì)發(fā)現(xiàn)并不是Host A與自己建立的telnet連接,而是“跳板機(jī)”Host B。
建立telnet連接之后我們?cè)趤砜纯碒ost A上的連接情況。ss -tn
而Host B在收到Host A的telnet流量后,自己充當(dāng)telnet客戶端去連接Host C的telnet服務(wù)氣端。到此,基于SSH的本地轉(zhuǎn)發(fā)就實(shí)現(xiàn)了。
ssh遠(yuǎn)程端口轉(zhuǎn)發(fā)
1、應(yīng)用場(chǎng)景
ssh基于端口轉(zhuǎn)發(fā)的應(yīng)用場(chǎng)景一般是這樣:當(dāng)我們?cè)谄髽I(yè)內(nèi)部想要訪問外部的某些站點(diǎn),但是有防火墻禁用訪問站點(diǎn)的端口,例如httpd服務(wù)的80端口,這樣我們便不能訪問外部網(wǎng)站。此時(shí)我們就可以使用ssh端口轉(zhuǎn)發(fā)的方法實(shí)現(xiàn),訪問外部站點(diǎn)。
2、原理圖
上圖中,由于防火墻的原因,Host A 并不能訪問Host C站點(diǎn),此時(shí)我們可以在外部找一個(gè)主機(jī)Host B,以Host B 為代理服務(wù)器,這樣,Host A 通過ssh協(xié)議突破防火墻,訪問代理服務(wù)器,在由代理服務(wù)器將Host A的訪問請(qǐng)求發(fā)送給Host C服務(wù)器,獲取相應(yīng)的信息(例如,網(wǎng)頁信息),然后在回傳給客戶端Host A。
3、實(shí)例
1)準(zhǔn)備階段
準(zhǔn)備3臺(tái)主機(jī),Host A 、HostB、Host C,用HostA 客戶端,Host C作為服務(wù)器端,而Host B作為代理服務(wù)器agent。實(shí)驗(yàn)需求,將Host B的防火墻關(guān)閉,關(guān)閉所有主機(jī)的SELinux功能。
2)方案實(shí)現(xiàn)
模擬防火墻,我們?cè)贖ost C上設(shè)置防火墻規(guī)則,拒絕Host A 的任何請(qǐng)求 :
在主機(jī)Host A上試著去抓取Host C的網(wǎng)頁:
[ root@vinsent ~ ]#curl http://172.18.18.13 curl: (7) Failed connect to 172.18.252.50:80; Connection refused # 被拒絕 [ root@vinsent ~ ]#
然后在Host A上建立ssh連接
此時(shí)在你用Host A去訪問依然不行,我們需要在Host B上做代理配置。這樣才能轉(zhuǎn)發(fā)數(shù)據(jù)信息。
[ root@vinsent ~ ]#curl --socks5 127.0.0.1 <h2>I love linux...</h2> # 成功抓取到網(wǎng)頁
ssh遠(yuǎn)程轉(zhuǎn)發(fā)
1、原理圖
原理與ssh本地轉(zhuǎn)發(fā)大體相同,這里就不放實(shí)驗(yàn)過程了,只是ssh的服務(wù)器端與客戶端的角色發(fā)生了改變,由于,在一個(gè)企業(yè)內(nèi)部,我們想要從內(nèi)向外訪問某端口,防火墻是沒有限制的,但是想要從外向里訪問就很困難。ssh遠(yuǎn)程轉(zhuǎn)發(fā)的就是通過,局域網(wǎng)內(nèi)部的主機(jī)充當(dāng)ssh客戶端與LAN外的主機(jī)建立連接,從而打通外部與內(nèi)部的通道。此時(shí)有人可能會(huì)有疑問,不還是進(jìn)步來么?其實(shí)不然,防火墻也是有鏈路記憶功能的,通過出去的通道在回來時(shí),防火墻是不會(huì)做限制的。
2、數(shù)據(jù)過程
首先,Host B以ssh客戶端的身份訪問外部的主機(jī)Host A (此時(shí)Host A充當(dāng)ssh服務(wù)器)建立隧道,然后,Host A充當(dāng)telnet客戶端向Host B發(fā)送telnet流量。當(dāng)收到Host A發(fā)來數(shù)據(jù)之后,Host B解封裝,然后充當(dāng)telnet客戶端的身份,建立與Host C的連接,從而將數(shù)據(jù)安全的傳輸至目標(biāo)主機(jī)。
3、實(shí)現(xiàn)命令
在Host B上執(zhí)行:ssh –R 9527:ip_HostC:23 –Nf ip_HostA 建立隧道,端口9527是在Host A上打開的
在Host A上執(zhí)行:telnet 127.0.0.1 9527
總結(jié)
本篇詳細(xì)了介紹了基于SSH“巧妙”的突破防火墻的方法,包括ssh端口轉(zhuǎn)發(fā),本地轉(zhuǎn)發(fā)以及遠(yuǎn)程轉(zhuǎn)發(fā),都有各自的使用場(chǎng)景。但本文也存在很多不足,有許多地方講述的不夠詳細(xì),在ssh端口轉(zhuǎn)發(fā)與本地轉(zhuǎn)發(fā)的實(shí)驗(yàn)中,原理說的多些,實(shí)驗(yàn)步驟較少,還望見諒。歡迎閱讀~~
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。