Ssh

用於遠端 ssh 登錄的 macOS 埠轉發

  • August 27, 2017

我想使用 22 以外的埠從網路外部遠端 ssh 登錄到 LAN 上的伺服器(macOS Sierra)。(我聽說使用預設埠以外的埠可以提高安全性。這是真的嗎?)

我已經成功配置了我的路由器(Cisco RV325,它有一個固定的 WAN IP 地址,比如 99.99.99.99),這樣我就可以在埠 22 上遠端登錄到伺服器(在靜態 LAN IP 地址 12.0.0.123),比如所以:

$ ssh USERNAME@99.99.99.99 -p 22 

這工作正常。我現在希望能夠通過另一個埠(比如 60022)登錄,如下所示:

$ ssh USERNAME@99.99.99.99 -p 60022 

我不明白如何將流量從埠 60022 轉發到 22。這是我應該在路由器中還是在本地伺服器中執行的操作?路由器的“埠範圍轉發表”配置確實允許將給定埠範圍的數據包轉發到特定 IP,但它似乎不允許我從一個埠轉換到另一個埠。

如果它應該發生在伺服器中,我不明白該怎麼做。以及如何讓 macOS 甚至開始監聽埠 60022?

我曾嘗試將這些 Ubuntu 指令適應Mac,但未成功。我嘗試使用pfctl來設置轉發:

$ echo "
rdr pass inet proto tcp from any to any port 60022 -> 127.0.0.1 port 22
pass in proto tcp from any to any port 60022
" | sudo pfctl -f -
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled
$

這似乎沒有打開埠 60022,因為(1)當我這樣做時埠沒有顯示,sudo lsof -i -P | grep LISTEN並且(2)當我坐在伺服器上並嘗試登錄時連接被拒絕:

$ ssh USERNAME@127.0.0.1 -p 60022 -v
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /Users/USERNAME/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 60022.
debug1: connect to address 127.0.0.1 port 60022: Connection refused
ssh: connect to host 127.0.0.1 port 60022: Connection refused
$ 

而在埠 22 上登錄工作正常:

$ ssh USERNAME@127.0.0.1 -p 22 -v
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /Users/USERNAME/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 22.
debug1: Connection established.
...
Password:
$

總之:

  1. 如何告訴 macOS 開始偵聽埠 60022?
  2. 如何告訴 macOS 將埠 60022 轉換為 22?
  3. 關於如何做到這一點的任何好的介紹/教程?
  4. 我是否應該嘗試轉發到 60022(例如),或者使用預設埠 22 是否足夠安全?

正如@yoonix 建議的那樣,您可以完全在路由器中完成所需的目標,而無需修改伺服器(macOS 或其他)。摘要問題 #1 和 #2(甚至是文章的標題)可能有點誤導。至於摘要問題 #4,請參閱@Gordon Davisson 的評論。

為實現目標,請按如下方式設置路由器:

  1. 使用瀏覽器登錄 RV325 配置頁面。選擇“設置”>“埠地址轉換”。
  2. 在“埠地址轉換錶”下點擊“服務管理…”按鈕。在彈出視窗中點擊“添加”,然後輸入服務名稱(此埠地址轉換設置的方便暱稱),從彈出菜單中選擇“TCP”,然後輸入外部埠(60022)和內部埠( 22)。點擊“保存”,然後關閉彈出視窗。
  3. 回到“埠地址轉換錶”,點擊“添加”。從彈出菜單中選擇您的服務名稱,輸入轉發 IP 地址(範例中為 12.0.0.123),然後選中狀態框以啟用它。點擊“保存”。
  4. 轉到“防火牆”>“訪問規則”,然後點擊“服務管理…”按鈕。在彈出視窗中點擊“添加”,然後輸入服務名稱(此訪問規則的暱稱),然後輸入您要打開的外部埠號(或埠號範圍)(此為 60022-60022例子)。點擊“保存”,然後關閉彈出視窗。
  5. 最後,在“訪問規則”中點擊“添加”。選擇“允許”和您在上面創建的服務名稱。將“源 IP”和“目標 IP”保留為“任何”。點擊“保存”。

從現在開始,路由器將負責必要的轉發和埠轉換,這樣ssh USERNAME@99.99.99.99 -p 60022就可以將您發送到所需伺服器上的登錄守護程序 12.0.0.113 。

引用自:https://serverfault.com/questions/870473