SSH隧道及其使用

什么是SSH隧道

SSH隧道是一種通過加密的SSH連接傳輸任意網(wǎng)絡(luò)數(shù)據(jù)的方法。它可以用來為任何應(yīng)用程序添加加密通道;也可以用它來實現(xiàn)VPN和跨防火墻訪問局域網(wǎng)的服務(wù)。

SSH是一個通過不受信任的網(wǎng)絡(luò)進行安全遠程登錄和文件傳輸?shù)臉藴?。通過SSH隧道傳輸TCP/IP數(shù)據(jù),它還提供了一種使用端口轉(zhuǎn)發(fā)保護任何給定應(yīng)用程序數(shù)據(jù)流量的方法。采用了這種方法后,應(yīng)用程序的數(shù)據(jù)流量都會走SSH的加密連接,從而不會被竊聽或攔截。對于本身不支持加密的應(yīng)用程序來說,使用SSH隧道可以很方便地添加網(wǎng)絡(luò)安全性。

上圖簡要介紹了SSH隧道。不可信網(wǎng)絡(luò)的安全連接建立在SSH客戶端和SSH服務(wù)器之間。這個連接是加密的,可用于保護機密性和完整性,并且可以對通信方進行身份驗證。

客戶端應(yīng)用使用SSH來連接到服務(wù)端應(yīng)用。隧道啟用后

  1. 應(yīng)用程序連接到SSH客戶端所在的本地主機上的端口。
  2. SSH客戶端通過加密隧道將數(shù)據(jù)轉(zhuǎn)發(fā)到SSH服務(wù)端。
  3. SSH服務(wù)端連接到應(yīng)用程序服務(wù)器,這個服務(wù)器和SSH服務(wù)端在同一個主機上,或者在相同的數(shù)據(jù)中心中。

通過上面的轉(zhuǎn)發(fā),無需修改應(yīng)用程序,就能保證應(yīng)用程序客戶端和服務(wù)端通信的安全。

這個方式的缺點是,任何能登陸服務(wù)器的用戶都可以啟用端口轉(zhuǎn)發(fā)。內(nèi)部IT人員經(jīng)常在他們的家里的機器或云上的服務(wù)器上啟用轉(zhuǎn)發(fā),從而能在企業(yè)內(nèi)網(wǎng)中,從工作機器上訪問家里的機器或云上的服務(wù)器。黑客或惡意軟件會利用類似的方式在局域網(wǎng)中留一個后門。還可以在多個設(shè)備上開啟隧道,攻擊者通過在這些隧道中跳來跳去來隱藏蹤跡。

兩種轉(zhuǎn)發(fā)方式

本地轉(zhuǎn)發(fā)

本地代理用于將端口從客戶端計算機轉(zhuǎn)發(fā)到服務(wù)端計算機。SSH客戶端監(jiān)聽來自某個端口的連接,當它收到連接時,將請求通過隧道轉(zhuǎn)發(fā)到SSH服務(wù)器;然后SSH服務(wù)器將請求轉(zhuǎn)到目標端口。

本地轉(zhuǎn)發(fā)比較常見的場景有:

  1. 通過跳板機登陸遠程服務(wù)器或傳輸文件
  2. 從外部連接到內(nèi)部網(wǎng)絡(luò)上的服務(wù)
  3. 遠程文件共享

在OpenSSH中,使用-L參數(shù)開啟本地轉(zhuǎn)發(fā)

ssh -L p1(localport):server:p2(remoteport) remote

這個命令工作的過程如下圖

默認情況下,其他的機器都能夠連接到本地的SSH客戶端指定的端口;為了安全起見,一般綁定地址,將連接來源限制在同一主機的程序

ssh -L 127.0.0.1:p1:server:p2 remote

也可以在OpenSSH客戶端的配置中配置本地轉(zhuǎn)發(fā),這樣就不用單獨輸入命令行了

比如在~/.ssh/config中這樣寫

Host serverfw
HostName remote
User username
LocalForward p1 server:p2

這樣在開啟轉(zhuǎn)發(fā)的時候只需要輸入ssh serverfw而不用再輸入完整的命令了

遠程轉(zhuǎn)發(fā)

如果希望通過本地計算機,讓遠程服務(wù)器remote可以連接到server上的服務(wù),可以使用SSH遠程轉(zhuǎn)發(fā)。

使用SSH遠程轉(zhuǎn)發(fā)一個典型的用途是,在企業(yè)內(nèi)部開一個后門,讓公網(wǎng)的計算機可以訪問到企業(yè)的某個內(nèi)部服務(wù),這個是有一定風險的,使用的時候需要特別小心。

在OpenSSH中,遠程轉(zhuǎn)發(fā)通過-R參數(shù)開啟,在本地計算機上輸入命令

ssh -R p1(remoteport):server:p2(targetport) remote

上面命令的工作過程如下

默認情況下,OpenSSH僅允許從服務(wù)器主機(上圖的remote)連接到遠程轉(zhuǎn)發(fā)端口server:p2,如果想要其他的主機也能連上server:p2,需要在sshd_config文件中設(shè)置

GatewayPorts yes

如果需要指定來源IP,可以將配置改為

GatewayPorts clientspecified

比如

ssh -R 52.194.1.73:8080:localhost:80 host147.aws.example.com

將只允許52.192.1.73到端口8080的連接

OpenSSH的遠程轉(zhuǎn)發(fā)支持多個規(guī)則,比如

ssh -R 2222:d76767.nyc.example.com:22 -R 5432:postgres3.nyc.example.com:5432 aws4.mydomain.net

同樣的,可以在~/.ssh/config配置host,比如

Host exportme
HostName remote
RemoteForward remoteport server:targetport
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容