SSH 跳板機的安全設定
在現代雲端架構或企業內部網路中,我們經常面臨一個挑戰:如何安全地存取位於私有子網(Private Subnet)內的伺服器?這些伺服器通常沒有公開的 IP 位址,直接從互聯網連接是不現實的。此時,「SSH 跳板機」(SSH Jump Host 或 Bastion Host)便成為了解決方案中的關鍵角色。
雖然 SSH 內建的 ProxyJump 功能已經相當方便,但若跳板機本身的安全設定不當,整個內部網路的防禦線將形同虛設。本文將引導您如何在 Ubuntu 22.04 或 Debian 12 上,為 SSH 跳板機建立堅固的安全防線。
第一步:強化 SSH 伺服器核心設定
首先,我們需要編輯跳板機上的 SSH 設定檔。請使用您偏好的編輯器打開 /etc/ssh/sshd_config。
sudo nano /etc/ssh/sshd_config
請務必修改以下幾個關鍵參數,以減少暴力破解風險並提升整體安全性:
- 變更預設連接埠:將
Port 22改為其他未使用的埠號(例如2222),這能有效減少自動化掃描工具的干擾。 - 禁止 Root 直接登入:確保
PermitRootLogin設定為no。永遠建議使用一般帳號登入,再透過sudo取得權限。 - 啟用公鑰認證並禁用密碼:為了防止密碼被暴力破解,建議完全禁用密碼登入。
PubkeyAuthentication yes PasswordAuthentication no - 限制使用者群組:僅允許特定群組(例如
sshusers)透過 SSH 登入跳板機。AllowGroups sshusers
修改完成後,重新啟動 SSH 服務以套用變更:
sudo systemctl restart sshd
注意:在重啟服務前,請務必確認您擁有另一條連線管道(如雲平台的 Serial Console 或 VNC),以防連線中斷無法修復。
第二步:建立專用帳號與群組
為了實踐最小權限原則,我們不應該讓所有員工共用同一個帳號。建議建立一個專門用於 SSH 跳板的群組。
sudo groupadd sshusers
sudo useradd -m -s /bin/bash -G sshusers john
接著,為該使用者設定公鑰認證。將您的本地端公鑰內容複製到跳板機上使用者的 authorized_keys 檔案中:
sudo mkdir -p /home/john/.ssh
sudo nano /home/john/.ssh/authorized_keys
# 將您的公鑰貼上並儲存
sudo chown -R john:john /home/john/.ssh
sudo chmod 700 /home/john/.ssh
sudo chmod 600 /home/john/.ssh/authorized_keys
第三步:配置客戶端簡化連線
設定好跳板機後,我們希望從本地端或內部其他伺服器連線到後端機器時,無需手動輸入複雜的跳板指令。這可以透過編輯本地的 ~/.ssh/config 檔案來實現。
假設您的網路架構如下:
- 跳板機 IP:
203.0.113.10 - 內部目標伺服器 IP:
10.0.0.5
在本地端的 ~/.ssh/config 中加入以下設定:
Host bastion
HostName 203.0.113.10
User john
Port 2222
IdentityFile ~/.ssh/id_rsa_bastion
Host internal-server
HostName 10.0.0.5
User deploy
ProxyJump bastion
IdentityFile ~/.ssh/id_rsa_internal
現在,您只需要執行 ssh internal-server,SSH 客戶端就會自動透過跳板機建立隧道,連接到內部伺服器。
常見問題與解決方案
Q1:連線時出現 "Permission denied (publickey)" 錯誤,但確認公鑰已正確放置,該如何除錯?
這通常是因為檔案權限過寬所致。SSH 對權限要求極為嚴格。請務必確認:
- 使用者的家目錄權限不能是
777或775,建議設為750或700。 .ssh目錄權限必須是700。authorized_keys檔案權限必須是600。 您可以使用ssh -v user@host指令查看詳細除錯訊息,通常會明確指出是哪個檔案的權限問題。
Q2:如何防止跳板機被惡意掃描或攻擊?
除了前述的 SSH 設定外,強烈建議安裝 fail2ban。它可以監控 SSH 日誌,當偵測到多次失敗的登入嘗試時,自動封鎖來源 IP。
sudo apt update
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 jail.local 中啟用 sshd 防護:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
小結
SSH 跳板機是連接公共網路與私有基礎設施的重要橋樑。透過變更預設埠號、禁用密碼登入、實施公鑰認證以及利用 ProxyJump 簡化流程,我們不僅提升了安全性,也改善了操作體驗。請記住,安全是一個持續的過程,定期審視日誌並更新套件,才能確保您的雲端環境穩如泰山。