ssh端口轉發--開啓多個加密通道

  一、ssh端口轉發連接數據庫

  今天發現了一個好玩的功能,讓ssh服務監聽2個端口,並且使用ssh端口轉發用這兩個端口登錄遠程的rac數據庫。以前都是讓ssh服務監聽一個端口並且開一個端口轉發,沒想到可以監聽多個端口。

  爲什麼要這樣呢?集團的***登錄一直都限制1521端口、限制外網的22端口,所以如果在家用這個接入平臺的話,就只能將服務器的ssh端口換一個,這個規則很討厭,每次我都是登錄到vcenter上修改服務器的ssh端口,例如改成222。但公司內部不限制22端口,每次到公司,我再把這個端口改回來。其實不改也行,在xmanager上設置222端口也是可以的,但你也許不明白強迫症人的心理......

  今天在家裏發現還是無法連接公司數據庫的1521端口,都TM這麼多年了,還者鳥樣,還是用ssh端口轉發試一下吧.

  我先說一下目的吧:因爲公司禁止1521端口,禁止22端口,所以無法直接ssh到兩臺rac服務器(當然也可以修改rac服務器的ssh端口來登錄上去),也無法通過sqldeveloper連接到實例。有一臺跳轉機開了222端口,可以ssh。所以我需要先ssh到跳轉機的222端口(這個是允許的,估計也是個漏洞吧),之後在這臺跳轉機上建立個ssh加密通道,轉發流量到2個目的地的1521端口。從跳轉機到目的地是沒有任何端口限制的。

 

拓撲如下:

wKioL1c5jFaBXgzXAAEd5bxL0G0288.jpg

 

在跳轉機上操作如下

ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f

 

sqldeveloper上配置如下:

wKiom1c5i7ihB9DKAAEE6HNJn8w644.jpg

之後測試連接,OK,能夠通。

之後連接racdb2實例,但222端口只能建立一個ssh通道,怎麼辦呢?讓sshd服務再監聽另外一個端口可以嗎?試一下:

Vim/etc/ssh/sshd_config

在添加一行Port 223,最終結果如下:

[root@scd ~]# grep-i port /etc/ssh/sshd_config

Port 222

Port 223

 

之後重啓sshd服務

Yesnetstat-ntplu|grep 22發現真的是OK

[root@scd ~]#netstat -ntplu|grep 22

tcp        0     0 0.0.0.0:222    0.0.0.0:*                   LISTEN      8802/sshd          

tcp        0     0 0.0.0.0:223    0.0.0.0:*                   LISTEN      8802/sshd          

tcp        0     0 :::222        :::*                        LISTEN      8802/sshd          

tcp        0     0 :::223        :::*                        LISTEN      8802/sshd

 

之後就可以打開第二個轉發通道了

ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f

 

Sqldeveloper配置如下:

wKioL1c5jL7zO4huAAEE6HNJn8w501.jpg

wKioL1c5jNWx5yufAAEPWD1sAkY002.jpg

最終的命令如下:

[root@scd ~]# moressh_port_forward.txt

ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f

ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f

 

[root@scd ~]# grep-i port /etc/ssh/sshd_config

Port 222

Port 223

# Disable legacy(protocol version 1) support in the server for new

#GatewayPorts no

二、ssh端口轉發原理與舉例

1、ssh端口轉發原理

原理講起來有些麻煩,還是引用一篇IBM developerworks上的一篇文章吧,

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

我這裏就不細說了。

我想說的是在我這裏用的是local類型,也就是本地轉發,我把兩條命令的數據流向畫了一下。

兩條命令的數據流向圖如下

wKiom1c5jBThJTcOAAIqxATLsww591.jpg

以第一個爲例,第二個相同:

  客戶端發起到10.0.0.165530端口的連接,10.0.0.1接收到數據後轉到本地的222端口,實際上就是跳轉機的65530端口和222端口建立了一條加密通道,之後10.0.0.1解密數據,在轉發到rac-1這臺服務器的1521端口。

  實際上這裏涉及到了3臺服務器:

1、跳轉機(65530端口的服務器)

2、和跳轉機建立通道的另一端的服務器(222端口的服務器),沒想好該叫什麼,暫時就這麼叫吧

3、目的地服務器(rac-1)

只是我這裏3臺服務器都合併成一臺設備了,所以顯得我這裏的命令有些奇怪,但只要掌握了數據流向就可以熟練應用了。

2、Ssh端口轉發配置舉例

以這次的測試爲例,拓撲圖如下:

wKiom1c5jEfiFGogAAFvV3l_VGA353.jpg

Step0:在客戶的上ssh10.0.0.1 222ssh 10.0.0.1 223測試客戶端到跳轉機的連通性,必須能夠連通,之後的配置纔有意義。

 

Step1:在跳轉機上添加如下兩條命令

ssh -L0.0.0.0:65530:rac-1:1521 -N 10.0.0.1 -p 222 -f

ssh -L0.0.0.0:65531:rac-2:1521 -N 10.0.0.1 -p 223 -f

-L/-N/-f選項的意義,自己man吧,應該都能讀懂

 

Step2:在跳轉機上修改sshd_config,添加2個允許ssh的端口,並重啓sshd

Port 222

Port 223

 

Step3:在跳轉機上將rac-1rac-2對應的ip寫到/etc/hosts(不寫的話你在ssh命令中就不能寫rac-1這個name了,你需要寫rac-1ip)

 

Step4:在客戶的上用sqldevelop測試,或者用telnet測試:telnet10.0.0.1 65530。應該是可以連通的

 

3、注意事項

  需要注意的一點是,我的跳轉機是redhat6.4的系統,默認是打開sshAllowTcpForwarding功能的。如果你配置ssh端口轉發不成功的話,不妨檢查一下該項配置,man sshd_config,然後搜索allowtcpforwarding,就像我這裏,默認是打開的。要記得打開該配置呀。

wKiom1c5jHXR3Xd8AAFrsypFuFo981.jpg

防火牆和selinux什麼的我就不說了,關閉就行了。另外,有人可能會問ip_forward是不是必須要打開呀?你覺得呢?我這裏就一塊網卡,轉發個球啊,默認的net.ipv4.ip_forward = 0

就行了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章