1. 程式人生 > >ssh 埠轉發工具 tunnel

ssh 埠轉發工具 tunnel

相信很多大公司為了安全和許可權管理都在使用堡壘機,這裡介紹一個方便快速開發,安全直連伺服器的方法。

什麼是SSH埠轉發,SSH tunnel?

SSH埠轉發是SSH的一種機制,用於從客戶端到伺服器的隧穿應用埠,反之亦然。它可以用於嚮應用程式加密通過防火牆,一些系統管理員和It專業人員使用它來從家裡的機器中打開後門進入內部網路。它還可以被黑客和惡意軟體濫用,以開放從內部網路的訪問。

本地轉發

本地轉發用於將一個埠從客戶端轉發到伺服器。通常的做法是:SSH客戶機配置連結用的監聽埠,當它接收到連線時,它將轉發連線到SSH伺服器。伺服器連線到一個配置好的目標埠,可能在不同的機器上而不是SSH伺服器。

本地埠轉發的典型用途包括:

  • 通過跳轉伺服器進行隧道會話和檔案傳輸。
  • 從外部網路連線到內部網路上的伺服器。
  • 連線到Internet上的遠端檔案共享。

相當多的組織通過某個跳轉伺服器來訪問內部SSH。伺服器可能是一個標準的Linux/Unix box,通常帶有一些額外的硬化、入侵檢測和/或日誌記錄,或者它可能是一個商業跳轉伺服器解決方案。例如,CryptoAuditor可以充當跳轉伺服器,記錄所有會話,並將會話內容傳遞給分析,以獲得可疑活動的早期預警。

許多跳轉伺服器允許傳入埠轉發只要連線驗證通過,這樣的埠轉發是很方便的,因為它允許精通技術的使用者非常透明地使用內部資源。例如,他們會他們的本地機器上一個埠轉發到公司內部網web伺服器,內部郵件伺服器的IMAP埠,一個本地檔案伺服器的445和139埠,一臺印表機,版本控制儲存庫,或任何其他系統內部網路。通常,埠被隧道到內部機器上的SSH埠上。

在OpenSSh中,本地埠轉發需要使用-L引數進行配置:

ssh -L 80:intra.example.com:80 gw.example.com

這裡的例子是開啟一個連結到跳轉伺服器gw.example.com ,同時轉發任意一個本地使用80埠的連結至intra.example.com80埠。

預設情況下,任何人(即使在不同的機器上)都可以連線到SSH客戶機機器上指定的埠。然而,這可以通過提供一個bind地址來限制在同一主機上的程式:

ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com

在 OpenSSH 客戶端配置檔案中引數LocalForward 能夠被用來配置轉發而不需要在命令列中指定它。

遠端轉發

在OpenSSH中使用引數-R實現遠端SSH埠轉發。例如:

ssh -R 8080:localhost:80 public.example.com

這允許遠端伺服器上的任何人連線到遠端伺服器上的TCP埠8080。然後,連線將被隧道重新連線到客戶端主機,然後客戶端在本地主機上與埠80進行TCP連線。任何其他主機名或IP地址都可以用來代替localhost來指定要連線的主機。

這個特殊的例子對於允許外部訪問內部web伺服器是很有用的。或者將一個內部的web應用程式公開到公共網際網路上。這有利於在家工作的員工或攻擊者。

預設情況下,OpenSSH只允許從伺服器主機連線到遠端轉發埠。然而,伺服器配置檔案sshdconfig中的gatewayport選項可以用來控制它。以下是可選的配置:

GatewayPorts no

這可以防止連線到伺服器計算機外部的轉發埠。

GatewayPorts yes

這允許任何人連線到轉發的埠。如果伺服器在公共網際網路上,網際網路上的任何人都可以連線到埠。

GatewayPorts clientspecified

這意味著客戶端可以指定一個IP地址,該IP地址允許連線到埠的連線。其語法是:

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

在這個例子中,只有來自IP地址為52.194.1.73且目標埠是8080的被允許

OpenSSH還允許將轉發的遠端埠指定為0。在這種情況下,伺服器將動態分配一個埠並將其報告給客戶端。當使用引數-O forward,客戶端將把分配的埠號列印到標準輸出。

在企業內部開後門

遠端SSH埠轉發通常被員工用來開啟企業的後門。例如,員工可能會從Amazon AWS中獲得一個免費的伺服器,並從辦公室登入到該伺服器,從伺服器上的埠指定遠端轉發到內部企業網路上的某個伺服器或應用程式。多個遠端轉發可以被指定為開啟對多個應用程式的訪問。

該員工還會在伺服器上設定“GatewayPorts yes”(大多數員工在家裡沒有固定的IP地址,因此他們不能限制IP地址)。

例如,下面的命令可以開啟埠5432的內部Postgres資料庫,以及埠2222的內部SSH埠。

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

伺服器端配置

OpenSSH伺服器配置檔案中的引數AllowTcpForwarding 必須啟用以允許埠轉發。預設情況下,轉發是允許的。這個選項的可能值是yes或all,允許所有TCP轉發,local允許本地轉發,以及remote 允許遠端轉發。

另一個選項是AllowStreamLocalForwarding轉發,它可以用來轉發Unix領域套接字。它允許與AllowTcpForwarding相同的值。預設是yes

例如:

AllowTcpForwarding remote AllowStreamLocalForwarding no

如上所述的GatewayPorts 配置選項也會影響到遠端埠的前進。可能的值是no(預設只允許來自伺服器主機的本地連線;),yes(Internet上的任何人都可以連線到遠端轉發埠)和clientspecified(客戶端可以指定一個可以連線的IP地址,任何人都可以,如果沒有指定的話)。

如何防止SSH埠轉發繞過防火牆

建議在不需要的時候明確禁用埠轉發。啟用埠轉發可以使組織暴露於安全風險和後門。例如,如果一個伺服器只提供SFTP檔案傳輸,允許埠轉發,那麼這些轉發可能會被用來從外部網中意外地進入內部網路。

實際生產中,埠轉發只能由伺服器或防火牆來阻止。企業不能控制Internet上的所有伺服器。基於防火牆的控制也很棘手,因為大多陣列織在Amazon AWS和其他雲服務中都有伺服器,而且這些伺服器通常是使用SSH訪問的。

CryptoAuditor® 提供了一個方便的解決方案。它可以用來確保埠轉發被阻止。它可以審計、記錄和控制SSH連線,並且能夠在不中斷其他用途的情況下阻止埠轉發。因此,在公共雲中的伺服器或與外部合作伙伴或服務提供者使用SFTP檔案傳輸時,它尤其有用。

CryptoAuditor 是控制出站連線的遠端轉發的極少數已知解決方案之一。這種連線是從網際網路到內部網路的反向隧道的最高風險連線。當開發人員和管理員需要訪問外部雲伺服器時,完全阻塞防火牆的出站SSH連線是不可行的。