學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 防火墻知識 >

通過ssh反向連接內(nèi)網(wǎng)主機的方法是什么

時間: 加城1195 分享

  防火墻主要由服務(wù)訪問規(guī)則、驗證工具、包過濾和應(yīng)用網(wǎng)關(guān)4個部分組成,防火墻就是一個位于計算機和它所連接的網(wǎng)絡(luò)之間的軟件或硬件。那么怎么.用ssh反向連接內(nèi)網(wǎng)主機呢?可能有點復(fù)雜,下面一起看看具體步驟!

  具體步驟

  一.用ssh反向連接內(nèi)網(wǎng)主機

  可以通過ssh反向連接到內(nèi)網(wǎng)主機(有防火墻的主機)

  好,下面是步驟:

  0. 在兩側(cè)都安裝ssh

  1. 在被控端運行ssh -f -N -R 10000:localhost:22 username@主控端ip。這里的10000和22是端口號,也就是說,在主控端10000端口和被控端的22端口上建立了一個通道。

  2. 在主控端運行 ssh username@localhost -p 10000。這里的username是你被控端的username,10000就是剛才的那個端口號。

  ok了。

  二.SSH公鑰(public key)驗證

  也就是如何不用密碼的SSH登錄… 本講解適用于Client/Server都使用OpenSSH的情況(商業(yè)版SSH的key文件格式有所不同,這里的方法直接使用是無效的)。

  目標: Client 免輸密碼ssh登錄Server

  SSH支持多種登錄驗證方式,我們默認使用的是鍵盤交互方式(keyboard- interactive),也就是手工輸入密碼的那種。這里我們要改成公鑰(publickey)驗證方式,并且設(shè)置

  passphrase為空,以達到免輸密碼登錄的目的。

  1. Client端:

  cd ~/.ssh

  #產(chǎn)生公鑰文件(id_dsa.pub)和私鑰文件(id_dsa), 類型DSA, 長度1024 bits

  #注意詢問passphrase的時候直接回車

  ssh-keygen -t dsa -b 1024

  #將公鑰復(fù)制到遠程主機去

  scp id_dsa.pub Server:~/.ssh/id_dsa.pub.Client2. Server端:

  cd ~/.ssh

  #將Client的公鑰放入Server的信任列表

  cat id_dsa.pub.Client >> authorized_keys

  #更新權(quán)限,很重要

  chmod 0600 *從此以后Client SSH登錄Server就不要手工輸入密碼了。

  三.備注 – SSH常見術(shù)語及對應(yīng)的解釋

  前提:內(nèi)網(wǎng)機器能訪問外網(wǎng)機器,但是只有局域網(wǎng)IP

  首先要設(shè)置信任關(guān)系。

  然后在內(nèi)網(wǎng)機器上運行腳本auto.sh(我這里設(shè)置時每小時運行一次,保持連接40分鐘,如果不連接會自動斷開)

  #!/bin/bash

  ssh -R 2222:localhost:22 root@外網(wǎng)機器IP “touch login; sleep 2400; touch logout”

  需要登錄內(nèi)網(wǎng)機器時,使用如下命令即可

  ssh -p 2222 root@localhost

  最近想在家里登錄公司的機器查看代碼,期間碰到了一些問題,因為公司里的機器是沒有對外IP的,而且請網(wǎng)管

  做個端口映射也比較麻煩,所以在家里不能直接連接到公司的機器上。在網(wǎng)上搜索了一下,找到了ssh反向連接這

  個解決方法,成功解決了不能直接連接的問題,并對反向連接的實現(xiàn)感興趣,按照自己的想法,寫了一個簡單的示

  例。

  SSH反向連接的使用

  1、什么是反向連接?

  反向連接是指主機A(受控端)主動連接主機B(控制端),在主機A和主機B之間建立一個遠程連接,通過這個連

  接主機B可以主動的向主機A發(fā)送一些請求。

  2、為什么需要主機A主動去連接主機B呢?

  這是因為主機A在局域網(wǎng)內(nèi),如果沒有對主機A進行端口映射,對于主機B來說主機A是不可見的,如果在主機B這

  邊向主機A發(fā)送連接請求,這個請求是不可達的。而主機B有自己獨立的IP,對于主機A來說是可見的,可以直接向

  主機B請求連接。

  3、SSH反向連接的過程

  方法就是主機A主動去連接主機B,主機B響應(yīng)主機A的連接請求,它們之間就建立了一個遠程連接。然后主機B在

  本地再創(chuàng)建一個本地連接,重定向到主機A和主機B剛才建立的遠程連接上,之后對這個本地連接的操作都會反饋到

  遠程連接上去。整個過程類似于文件的DUP,這就在主機A和主機B之間建立了連接通道,此時對于主機B來說,主

  機A已經(jīng)是可見了。

  連接流程如下:

  3.1、主機A ssh客戶端向主機B sshd服務(wù)端發(fā)送請求,建立遠程連接。

  3.2、主機B sshd服務(wù)端創(chuàng)建本地連接很遠程連接的映射(反向連接通道)。

  3.3、主機B ssh客戶端向主機B sshd服務(wù)端的連接通道發(fā)送請求, 建立主機B ssh和主機A sshd的連接。

  完成連接后,主機A對于主機B可見的形式就是存在于主機B的那個本地連接。

  4、為什么需要在主機B對遠程連接映射一個本地連接?

  反向連接就是CS架構(gòu),不過是受控端主動向控制端請求連接,讓它們之間的連接建立。傳統(tǒng)的CS方式是可以解決

  主機A和主機B之間的連接問題,但是那樣主機A和主機B的連接方式并不靈活,兩者之間能做的事情,只能是CS之際

  協(xié)議規(guī)定的事情。在主機B上建立了主機A的連接映射后, 對于主機B來說主機A已經(jīng)不是局域網(wǎng)內(nèi)那臺不可見的主

  機,主機A已經(jīng)是存在主機B的一臺可見主機,這樣就消除了局域網(wǎng)和廣域網(wǎng)的阻礙。 主機A和主機B之間建立的那

  個遠程連接就是主機A和主機B的通道-“網(wǎng)線”。

  5、SSH反向連接的使用

  要建立反向連接,首先在主機A上運行:

  代碼: ssh -f -N -R 10000:localhost:22 lyb@jb51.net

  10000是主機B上的本地連接端口, 22是主機B上遠程連接的那個端口, lyb@jb51.net是主機B的地址

  連接上后,會需要輸入密碼。連接成功后,SSH反向連接就建立起來了。要連接到主機A,在主機B上運行:

  代碼: ssh lyb@localhost -p 10000

  即可。

  —————————-

  內(nèi)網(wǎng)主機A(192.168.1.1) 外網(wǎng)主機 B(100.100.100.100)

  正常情況 可以從內(nèi)網(wǎng)主機A 通過ssh 連接到外網(wǎng)主機B

  #ssh username@100.100.100.100

  現(xiàn)在需要 通過外網(wǎng)主機B 連接 內(nèi)網(wǎng)主機A

  原理:

  利用ssh自身功能, 建立 主機B 到主機A 的連接通道。

  操作:

  1.在主機A上建立通道

  ssh -NfR 2222:localhost:22 httpd@100.100.100.100 -p 22

  注釋: -Nf 命令在后臺運行

  -R 建立反向通道

  2222 在主機B上建立端口映射

  localhost:22 將主機B端口2222 映射到主機A端口22上

  httpd@100.100.100.100 遠程登錄主機B用戶名及IP

  -p 22 主機B ssh登錄端口

  執(zhí)行后可以查看進程

  ps axu |grep ssh

  ssh -NfR 2222:localhost:22 httpd@100.100.100.100

  2.登錄主機B

  查看已經(jīng)建立好的映射端口

  netstat -antp

  tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN -

  登錄內(nèi)網(wǎng)主機A

  ssh -p 2222 httpd@localhost

  注釋:

  -p2222 已建立到內(nèi)網(wǎng)主機A的映射端口

  httpd 內(nèi)網(wǎng)主機A的ssh 登錄用戶

  @localhost 可以看到映射端口只監(jiān)聽到127.0.0.1 上

  執(zhí)行命令后顯示登錄成功,則大功告成

  PS:

  1. 如果用key登錄則無須輸入密碼

  2. 如果報錯: Permission denied (publickey,gssapi-with-mic).

  key不對或者key用戶不對。

  使用的過程中碰到一個問題, 就是在主機A上發(fā)起請求的時候, 需要輸入密碼。 如果我在家里, 不可能跑到公

  司了去輸入密碼。于是用ssh public key的方法和寫一個腳本來解決。腳本如下:

  復(fù)制代碼代碼如下:

  #!/bin/bash

  while true;do

  RET=`ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"`

  if [ "$RET" = "" ]; then

  echo "restart ssh server"

  ssh -f -N -R 10000:localhost:22fi

  sleep 10

  done

  補充閱讀:防火墻主要使用技巧

  一、所有的防火墻文件規(guī)則必須更改。

  盡管這種方法聽起來很容易,但是由于防火墻沒有內(nèi)置的變動管理流程,因此文件更改對于許多企業(yè)來說都不是最佳的實踐方法。如果防火墻管理員因為突發(fā)情況或者一些其他形式的業(yè)務(wù)中斷做出更改,那么他撞到槍口上的可能性就會比較大。但是如果這種更改抵消了之前的協(xié)議更改,會導(dǎo)致宕機嗎?這是一個相當高發(fā)的狀況。

  防火墻管理產(chǎn)品的中央控制臺能全面可視所有的防火墻規(guī)則基礎(chǔ),因此團隊的所有成員都必須達成共識,觀察誰進行了何種更改。這樣就能及時發(fā)現(xiàn)并修理故障,讓整個協(xié)議管理更加簡單和高效。

  二、以最小的權(quán)限安裝所有的訪問規(guī)則。

  另一個常見的安全問題是權(quán)限過度的規(guī)則設(shè)置。防火墻規(guī)則是由三個域構(gòu)成的:即源(IP地址),目的地(網(wǎng)絡(luò)/子網(wǎng)絡(luò))和服務(wù)(應(yīng)用軟件或者其他目的地)。為了確保每個用戶都有足夠的端口來訪問他們所需的系統(tǒng),常用方法是在一個或者更多域內(nèi)指定打來那個的目標對象。當你出于業(yè)務(wù)持續(xù)性的需要允許大范圍的IP地址來訪問大型企業(yè)的網(wǎng)絡(luò),這些規(guī)則就會變得權(quán)限過度釋放,因此就會增加不安全因素。服務(wù)域的規(guī)則是開放65535個TCP端口的ANY。防火墻管理員真的就意味著為黑客開放了65535個攻擊矢量?

  三、根據(jù)法規(guī)協(xié)議和更改需求來校驗每項防火墻的更改。

  在防火墻操作中,日常工作都是以尋找問題,修正問題和安裝新系統(tǒng)為中心的。在安裝最新防火墻規(guī)則來解決問題,應(yīng)用新產(chǎn)品和業(yè)務(wù)部門的過程中,我們經(jīng)常會遺忘防火墻也是企業(yè)安全協(xié)議的物理執(zhí)行者。每項規(guī)則都應(yīng)該重新審核來確保它能符合安全協(xié)議和任何法規(guī)協(xié)議的內(nèi)容和精神,而不僅是一篇法律條文。

  四、當服務(wù)過期后從防火墻規(guī)則中刪除無用的規(guī)則。

  規(guī)則膨脹是防火墻經(jīng)常會出現(xiàn)的安全問題,因為多數(shù)運作團隊都沒有刪除規(guī)則的流程。業(yè)務(wù)部門擅長讓你知道他們了解這些新規(guī)則,卻從來不會讓防火墻團隊知道他們不再使用某些服務(wù)了。了解退役的服務(wù)器和網(wǎng)絡(luò)以及應(yīng)用軟件更新周期對于達成規(guī)則共識是個好的開始。運行無用規(guī)則的報表是另外一步。黑客喜歡從來不刪除規(guī)則的防火墻團隊。


通過ssh反向連接內(nèi)網(wǎng)主機的方法是什么相關(guān)文章:

1.在Linux下的SSH端口轉(zhuǎn)發(fā)的程序

2.外網(wǎng)SSH怎么訪問內(nèi)網(wǎng)LINUX

3.如何解決端口映射之后還有訪問不了內(nèi)網(wǎng)的服務(wù)器

4.如何實現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)服務(wù)器

5.如何解決水星路由器外網(wǎng)無法訪問映射后的服務(wù)器

4042621