linux ssh端口轉(zhuǎn)發(fā)的三種方式
ssh是我使用最頻繁的兩個(gè)命令行工具之一(另一個(gè)則必須是vim)。有了ssh,我可以遠(yuǎn)程處理各種可能出現(xiàn)的問(wèn)題而無(wú)需肉身到現(xiàn)場(chǎng)。
這幾天teamviewer被黑的事情影響挺大,于是由遠(yuǎn)程控制想到了內(nèi)網(wǎng)穿透,自然而然的想到了ssh的端口轉(zhuǎn)發(fā)也能實(shí)現(xiàn)內(nèi)網(wǎng)穿透。再細(xì)想一下,發(fā)現(xiàn)ssh隧道、或者說(shuō)端口轉(zhuǎn)發(fā),竟然實(shí)現(xiàn)了正向代理、反向代理和內(nèi)網(wǎng)穿透三種常用的網(wǎng)絡(luò)功能,更佩服其功能的強(qiáng)大和使用中的便利。
ssh有三種端口轉(zhuǎn)發(fā)模式,本文一一對(duì)其做簡(jiǎn)要介紹。
本地轉(zhuǎn)發(fā)
本地端口轉(zhuǎn)發(fā)(Local Port Forwarding),是將本地主機(jī)某個(gè)端口流量轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)的指定端口。其命令行語(yǔ)法是:-L [bind_address]:localport:[remote_host]:remote_port?!?L”即“l(fā)ocal”的首字母,類似的遠(yuǎn)程轉(zhuǎn)發(fā)的”-R”是“remote”的首字母,動(dòng)態(tài)轉(zhuǎn)發(fā)的“-D”是“dynamic”的首字母,很好記。
舉一個(gè)例子說(shuō)明本地轉(zhuǎn)發(fā)的使用場(chǎng)景。
CentOS 7安裝GUI界面及遠(yuǎn)程連接一文中介紹了安裝vnc服務(wù)并開(kāi)啟端口訪問(wèn)。在實(shí)際中,暴露出來(lái)的59xx端口每天都會(huì)源源不斷的受到自動(dòng)化腳本的爆破攻擊。如果你的vnc和登錄用戶使用弱密碼或字典密碼,主機(jī)安全將受到極大威脅。這種情形下該如何防護(hù)?
一種簡(jiǎn)單安全的防護(hù)方法是:使用iptables/firewalld關(guān)閉端口的外網(wǎng)訪問(wèn),有連接需求時(shí)用ssh隧道轉(zhuǎn)發(fā)端口:
ssh -L5901:5901 username@host
該命令中將本地的5901端口通過(guò)ssh隧道轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)的5901端口,遠(yuǎn)程連接時(shí)輸入localhost或者127.0.0.1和5901端口便連到了遠(yuǎn)程主機(jī)的5901端口。通過(guò)iptables和ssh的本地轉(zhuǎn)發(fā),實(shí)現(xiàn)了他人無(wú)法連接,只有自己才能訪問(wèn)的目的。
需要注意的是“-L”選項(xiàng)中的“遠(yuǎn)程主機(jī)”并不特指連接過(guò)去的機(jī)器(默認(rèn)是連接上的機(jī)器),可以是任何一主機(jī)。例如可以將本機(jī)的8080端口流量轉(zhuǎn)發(fā)到facebook.com的80端口:
ssh -L8080:facebook.com:80 username@host
遠(yuǎn)程轉(zhuǎn)發(fā)
遠(yuǎn)程端口轉(zhuǎn)發(fā)(Remote Port Forwarding),是將遠(yuǎn)程主機(jī)某個(gè)端口轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)的指定端口。其命令行語(yǔ)法是:-R [bind_address]:port:[local_host]:local_port。
遠(yuǎn)程轉(zhuǎn)發(fā)最常用的功能是內(nèi)網(wǎng)穿透。有一個(gè)公網(wǎng)ip的主機(jī),便可以借助ssh隧道的遠(yuǎn)程轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)滲透,達(dá)到外網(wǎng)訪問(wèn)內(nèi)網(wǎng)資源的目的。需要注意的是ssh遠(yuǎn)程轉(zhuǎn)發(fā)默認(rèn)只能綁定遠(yuǎn)程主機(jī)的本地地址,即127.0.0.1。如果想要監(jiān)聽(tīng)來(lái)自其他主機(jī)的連接,需要修改遠(yuǎn)程主機(jī)ssh的配置,將”GatewayPorts”改成“yes”,重啟ssh后生效。
一個(gè)將遠(yuǎn)程的8080端口流量轉(zhuǎn)發(fā)到本地80web端口的示例:
ssh -R0.0.0.0:8080:80 username@host
通過(guò)遠(yuǎn)程轉(zhuǎn)發(fā),訪問(wèn)公網(wǎng)ip主機(jī)的8080端口便是訪問(wèn)內(nèi)網(wǎng)web主機(jī)的80端口,這樣就實(shí)現(xiàn)了內(nèi)網(wǎng)穿透。
動(dòng)態(tài)轉(zhuǎn)發(fā)
無(wú)論本地轉(zhuǎn)發(fā)還是遠(yuǎn)程轉(zhuǎn)發(fā),都需要指定本地和遠(yuǎn)程主機(jī)的端口。動(dòng)態(tài)轉(zhuǎn)發(fā)(Dynamic Port Forwarding)則擺脫這種限制,只綁定本地端口,遠(yuǎn)程主機(jī)和端口由發(fā)起的請(qǐng)求決定。動(dòng)態(tài)轉(zhuǎn)發(fā)的語(yǔ)法是:”-D bind_address:port”,一個(gè)轉(zhuǎn)發(fā)示例:
ssh -D 8080 username@host
該命令讓ssh監(jiān)聽(tīng)本地8080端口,經(jīng)過(guò)8080端口的流量都通過(guò)ssh隧道由遠(yuǎn)程服務(wù)器代為請(qǐng)求,從而達(dá)到獲取被屏蔽資源、隱藏真實(shí)身份的目的。
動(dòng)態(tài)轉(zhuǎn)發(fā)實(shí)際上實(shí)現(xiàn)了正向代理功能,因此可以用來(lái)科學(xué)上網(wǎng)。本地轉(zhuǎn)發(fā)也可以做正向代理,但要對(duì)每一個(gè)請(qǐng)求的主機(jī)和端口做轉(zhuǎn)發(fā),比較繁瑣,實(shí)踐中不會(huì)這么用。
其它
- 從用戶端角度看,本地轉(zhuǎn)發(fā)是正向代理;從資源提供方角度看,本地轉(zhuǎn)發(fā)是反向代理;
- ssh連接斷開(kāi)遠(yuǎn)程轉(zhuǎn)發(fā)/內(nèi)網(wǎng)滲透便失效。如果希望遠(yuǎn)程轉(zhuǎn)發(fā)一直有效,需要ssh保活技術(shù),建議用frp等專注于內(nèi)網(wǎng)滲透的解決方案;
- 雖然ssh隧道中的流量都經(jīng)過(guò)了加密,但防火墻對(duì)ssh隧道中承載的流量能比較智能的識(shí)別,因此用作科學(xué)上網(wǎng)很容易受到干擾;
- 如果僅做端口轉(zhuǎn)發(fā),實(shí)踐中上述命令經(jīng)常與”-NT -f”選項(xiàng)結(jié)合使用。其中”-f”選項(xiàng)將命令放入后臺(tái)執(zhí)行,斷開(kāi)連接需要用kill命令;
- 從代理角度看,ssh隧道是低效的,建議用專用軟件;
- ssh隧道的流量都經(jīng)過(guò)了加密,從安全角度是十分可靠的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
linux安裝jdk,tomcat 配置vsftp遠(yuǎn)程連接的步驟
這篇文章主要介紹了linux安裝jdk,tomcat 配置vsftp遠(yuǎn)程連接,需要的朋友可以參考下2015-04-04在Linux中如何查看可用的網(wǎng)絡(luò)接口詳解
這篇文章主要給大家介紹了關(guān)于在Linux中如何查看可用的網(wǎng)絡(luò)接口的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03VSCode連接實(shí)驗(yàn)室服務(wù)器Xshell,Xftp向服務(wù)器傳輸文件的方法(win10)
這篇文章主要介紹了VSCode連接實(shí)驗(yàn)室服務(wù)器,Xshell,Xftp向服務(wù)器傳輸文件(win10),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08使用stress命令進(jìn)行Linux CPU壓力測(cè)試的實(shí)現(xiàn)方法
在Linux系統(tǒng)中,有許多工具可以用來(lái)進(jìn)行CPU壓力測(cè)試,其中一個(gè)非常常用的工具就是stress命令,stress命令是一個(gè)簡(jiǎn)單而強(qiáng)大的壓力測(cè)試工具,可以模擬系統(tǒng)在高負(fù)載情況下的運(yùn)行狀態(tài),幫助我們?cè)u(píng)估系統(tǒng)的穩(wěn)定性和性能,在本文中,我們將探討如何使用stress命令進(jìn)行 CPU壓力測(cè)試2024-08-08