如何保護 Linux VPS 上的 SSH
公開的 VPS 一上線,幾分鐘內就會遭到自動化的登入嘗試。以下步驟能大幅提高 SSH 的攻擊門檻。這些步驟以 Ubuntu 或 Debian 為準;如果你還沒有伺服器,可以租用 Linux VPS,從乾淨的映像檔開始。在從第二個視窗測試新設定之前,請保持目前的 SSH 工作階段開啟。
1. 建立具有 sudo 權限的一般使用者
adduser deploy
usermod -aG sudo deploy2. 使用 SSH 金鑰取代密碼
在你自己的電腦上執行:
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IP在關閉密碼登入之前,先用金鑰登入一次,確認可以正常運作。
3. 關閉密碼與 root 登入
建立 /etc/ssh/sshd_config.d/99-hardening.conf:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3檢查語法並重新載入服務。在 Ubuntu 與 Debian 上服務名稱為 ssh,在 RHEL 系列系統上則為 sshd:
sudo sshd -t && sudo systemctl reload ssh開啟第二個終端機並重新登入。確認成功後,才關閉舊的工作階段。
4. 啟用防火牆
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose只開放你需要的連接埠,例如網頁伺服器所需的 80 與 443。你也可以在雲端主控台中設定防火牆規則,將 SSH 限制為只允許你自己的 IP 位址連線。
5. 使用 Fail2ban 封鎖重複的失敗登入
sudo apt install -y fail2ban建立 /etc/fail2ban/jail.local:
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd6. 自動安裝安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades7. 選用的補充措施
- 變更 SSH 連接埠可以減少記錄檔的雜訊,但它本身並不是安全措施。
- 為私密金鑰設定密碼片語,並將備份保存在安全的地方。
- 使用
last與sudo journalctl -u ssh --since today檢視登入紀錄。 - 伺服器設定完成後,建立一個快照,以便之後還原到乾淨的基準狀態。
如果你被鎖在伺服器外,請使用雲端控制台中的瀏覽器主控台登入,並修正設定。我們的DDoS 防護指南涵蓋了下一層的防禦措施。
常見問題
停用 root 登入安全嗎?
安全,但前提是你已先建立 sudo 使用者,並測試過其金鑰可以正常運作。你仍然可以透過 sudo 執行管理指令。
如果只使用金鑰,還需要 Fail2ban 嗎?
這是選用的。停用密碼登入後,暴力破解便無法成功,但 Fail2ban 仍能減少記錄檔的雜訊與系統負載。
如果遺失 SSH 金鑰怎麼辦?
使用雲端控制台中的主控台登入,將新的公開金鑰加入 ~/.ssh/authorized_keys,並移除舊的金鑰。