設定 SSH 隧道(埠轉發)實戰

安全劍客發表於2019-12-24
SSH隧道或SSH埠轉發是一種在客戶端和伺服器機器之間建立加密SSH連線的方法,通過該連線可以中繼服務埠。

SSH轉發對於傳輸使用未加密協議(如VNC或FTP),訪問地理限制內容或繞過中間防火牆的服務的網路資料非常有用。 基本上,您可以轉發任何TCP埠並通過安全的SSH連線隧道傳輸流量。

SSH 埠轉發有三種型別:

本地埠轉發。 - 將連線從客戶端主機轉發到 SSH 伺服器主機,然後轉發到目標主機埠。
遠端埠轉發。 - 將埠從伺服器主機轉發到客戶端主機,然後轉發到目標主機埠。
動態埠轉發。 - 建立 SOCKS 代理伺服器,允許跨一系列埠進行通訊。
在本文中,我們將討論如何設定本地,遠端和動態加密的 SSH 隧道。

本地埠轉發

本地埠轉發允許您將本地 (ssh 客戶端)計算機上的埠轉發到遠端 (ssh 伺服器)計算機上的埠,然後將其轉發到目標計算機上的埠。

在這種型別的轉發中, SSH 客戶端偵聽給定埠,並將與該埠的任何連線隧道連線到遠端 SSH 伺服器上的指定埠,然後該埠連線到目標計算機上的埠。目標計算機可以是遠端 SSH 伺服器或任何其他計算機。

本地埠轉發主要用於連線內部網路(如資料庫或 VNC 伺服器)上的遠端服務。

在  Linux , macOS 和其他 Unix 系統中建立本地埠轉發將 -L 選項傳遞給 ssh 客戶端:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

使用的選項如下:

[LOCAL_IP:]LOCAL_PORT - 本地機器的 ip 和埠號。當 LOCAL_IP 省略 SSH 客戶端會連線本地主機。
DESTINATION:DESTINATION_PORT - 目標計算機的 IP 或主機名和埠。
[USER@]SERVER_IP - 遠端 SSH 使用者和伺服器 IP 地址。

LOCAL_PORT 可以使用任何大於 1024 的埠號。埠號小於 1024 特權埠,只能由 root 使用者使用。如果您的 SSH 伺服器正在偵聽 22 以外的埠(預設值),請使用該 -p [PORT_NUMBER] 選項。

目標主機名必須可從 SSH 伺服器解析。

假設您在內部(專用)網路上的計算機 db001.host 上執行 MySQL 資料庫伺服器,在埠 3306 上可以從計算機訪問,並且您希望使用本地計算機 pub001.host 上的 mysql 客戶端連線到資料庫伺服器。為此,您可以轉發連線,如下所示:

ssh -L 3336:db001.host:3306 user@pub001.host

執行該 命令後,系統將提示您輸入遠端 SSH 使用者密碼。輸入後,您將登入遠端伺服器並建立 SSH 隧道。建立基於 SSH 金鑰的身份驗證連線到伺服器而不輸入密碼是更好的選擇。

現在,如果您將本地計算機資料庫客戶端指向 127.0.0.1:3336 ,則連線將 db001.host:3306 通過 pub001.host 將充當中間伺服器的計算機轉發到 MySQL 伺服器。

您可以在單個 ssh  命令中將多個埠轉發到多個目標。例如,您在計算機上執行另一個 MySQL 資料庫伺服器, db002.host 並且您希望從您將執行的本地客戶端連線到兩個伺服器:

ssh -L 3336:db001.host:3306 3337:db002.host:3306 user@pub001.host

要連線到您將使用的第二臺伺服器 127.0.0.1:3337 。

目標主機與 SSH 伺服器相同時,而不是指定可以使用的目標主機 IP 或主機名 localhost 。

假設您需要通過在同一伺服器上執行的 VNC 連線到遠端計算機,並且無法從外部訪問它。您將使用的命令是:

ssh -L 5901:127.0.0.1:5901 -N -f user@remote.host

該 -f 選項告訴 ssh 命令在後臺執行而 -N 不是執行遠端命令。我們正在使用, localhost 因為 VNC 和 SSH 伺服器在同一主機上執行。

如果您在設定隧道時遇到問題,請檢查遠端 SSH 伺服器配置並確保 AllowTcpForwarding 未設定為 no 。預設情況下,允許轉發。

遠端埠轉發

遠端埠轉發與本地埠轉發相反。它允許您將遠端 (ssh 伺服器)計算機上的埠轉發到本地 (ssh 客戶端)計算機上的埠,然後將其轉發到目標計算機上的埠。

在這種型別的轉發中, SSH 伺服器偵聽給定埠,並將與該埠的任何連線隧道連線到本地 SSH 客戶端上的指定埠,然後該埠連線到目標計算機上的埠。目標計算機可以是本地計算機或任何其他計算機。

在 Linux , macOS 和其他 Unix 系統中建立遠端埠轉發將 -R 選項傳遞給 ssh 客戶端:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

使用的選項如下:

[REMOTE:]REMOTE_PORT - 遠端 SSH 伺服器上的 IP 和埠號。空 REMOTE 表示遠端 SSH 伺服器將在所有介面上繫結。
DESTINATION:DESTINATION_PORT - 目標計算機的 IP 或主機名和埠。
[USER@]SERVER_IP - 遠端 SSH 使用者和伺服器 IP 地址。
本地埠轉發主要用於從外部向某人提供對內部服務的訪問。

假設您正在本地計算機上開發 Web 應用程式,並且希望向其他開發人員顯示預覽。您沒有公共 IP ,因此其他開發人員無法通過 Internet 訪問該應用程式。

如果您可以訪問遠端 SSH 伺服器,則可以按如下方式設定遠端埠轉發:

ssh -L 8080:127.0.0.1:3000 -N -f user@remote.host

上面的命令將使 ssh 伺服器偵聽埠 8080 並將從該埠到埠的本地計算機的所有流量隧道傳輸 3000 。現在您的開發人員可以輸入 the_ssh_server_ip:8080 他/她的瀏覽器並預覽您的應用程式。如果您有麻煩設定遠端埠轉發,確保 GatewayPorts 被設定為 yes 在遠端 SSH 伺服器配置。

動態埠轉發

動態埠轉發允許您在充當 SOCKS 代理伺服器的本地 (ssh 客戶端)計算機上建立套接字。當客戶端連線到此埠時,連線將轉發到遠端 (ssh 伺服器)計算機,然後將其轉發到目標計算機上的動態埠。

這樣,使用 SOCKS 代理的所有應用程式將連線到 SSH 伺服器,伺服器將所有流量轉發到其實際目的地。

在 Linux , macOS 和其他 Unix 系統中建立動態埠轉發 (SOCKS) 將 -D 選項傳遞給 ssh 客戶端:

ssh -R [LOCAL_IP:]LOCAL_PORT [USER@]SSH_SERVER

使用的選項如下:

[LOCAL_IP:]LOCAL_PORT - 本地機器的 ip 和埠號。當 LOCAL_IP 省略 SSH 客戶端結合在本地主機。
[USER@]SERVER_IP - 遠端 SSH 使用者和伺服器 IP 地址。
動態埠轉發的典型示例是通過 SSH 伺服器隧道傳輸 Web 瀏覽器流量。

以下命令將在埠上建立 SOCKS 隧道 9090 :

ssh -D 9090 -N -f user@remote.host

建立隧道後,您可以配置應用程式以使用它。本文介紹如何配置 Firefox 和 Google Chrome 瀏覽器以使用 SOCKS 代理。必須為要對其進行隧道傳輸的每個應用程式單獨配置埠轉發。

在 Windows 中設定 SSH 隧道

Windows 使用者可以使用 PuTTY SSH 客戶端建立 SSH 隧道。你可以在這裡下載 PuTTY 。

啟動 Putty 並在 Host name (or IP address) 欄位中輸入 SSH 伺服器 IP 地址。

設定 SSH 隧道(埠轉發)實戰設定 SSH 隧道(埠轉發)實戰

在 Connection 選單下,展開 SSH 並選擇 Tunnels 。檢查 Local 單選按鈕以設定本地, Remote 遠端和 Dynamic 動態埠轉發。

如果設定本地轉發,請在該 Source Port 欄位中 Destination 輸入本地轉發埠,然後輸入目標主機和 IP ,例如 localhost:5901 。
對於遠端埠轉發,請在該 Source Port 欄位中 Destination 輸入遠端 SSH 伺服器轉發埠,然後輸入目標主機和 IP ,例如 localhost:3000 。
如果設定動態轉發,則僅輸入 Source Port 欄位中的本地 SOCKS 埠。

設定 SSH 隧道(埠轉發)實戰設定 SSH 隧道(埠轉發)實戰

單擊 Add 按鈕,如下圖所示。

設定 SSH 隧道(埠轉發)實戰設定 SSH 隧道(埠轉發)實戰

返回 Session 頁面以儲存設定,這樣您每次都不需要輸入它們。在 Saved Session 欄位中輸入會話名稱,然後單擊 Save 按鈕。

設定 SSH 隧道(埠轉發)實戰設定 SSH 隧道(埠轉發)實戰

選擇已儲存的會話,然後單擊 Open 按鈕登入遠端伺服器。

設定 SSH 隧道(埠轉發)實戰設定 SSH 隧道(埠轉發)實戰

將顯示一個詢問您的使用者名稱和密碼的新視窗。輸入使用者名稱和密碼後,您將登入到伺服器並啟動 SSH 隧道。

設定公鑰驗證將允許您在不輸入密碼的情況下連線到伺服器。

總結

我們已經向您展示瞭如何設定 SSH 隧道並通過安全的 SSH 連線轉發流量。為了便於使用,您可以在 SSH 配置檔案中定義 SSH 隧道,或建立將設定 SSH 隧道的 Bash 別名

原文地址: https://www.linuxprobe.com/set-ssh-tunel.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2670364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章