Linux SSH 安全加固
SSH(Secure Shell)是 Linux 伺服器遠端管理的主要方式,因此確保 SSH 的安全性至關重要。若未妥善設定,攻擊者可能透過暴力破解、MITM(中間人攻擊)或零日漏洞來入侵伺服器。本篇將提供 SSH 的安全加固技巧,並涵蓋日誌分析與防禦措施。
目錄
- 變更 SSH 預設連接埠
- 禁用 root 直接登入
- 使用 SSH 金鑰驗證
- 限制 SSH 允許的使用者
- 啟用 Fail2Ban 防暴力攻擊
- 限制 SSH 連線 IP
- 設定 SSH 連線超時與閒置斷線
- 啟用 SSH 日誌與監控
- 結語
變更 SSH 預設連接埠
攻擊者通常會掃描預設的 22 連接埠,因此更改 SSH 連接埠可以降低暴力攻擊風險。
- 編輯 SSH 設定檔:
sudo nano /etc/ssh/sshd_config
- 修改
Port
參數(假設變更為 2222):
Port 2222
- 重新啟動 SSH 服務:
sudo systemctl restart sshd
- 設定防火牆開放新連接埠:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
- 測試新連接埠:
ssh -p 2222 user@server-ip
禁用 root 直接登入
允許 root 直接登入容易成為暴力破解目標,建議禁用並改用一般使用者登入後切換權限。
- 編輯
/etc/ssh/sshd_config
:
PermitRootLogin no
- 重新啟動 SSH 服務:
sudo systemctl restart sshd
使用 SSH 金鑰驗證
使用 SSH 金鑰取代密碼驗證可大幅提高安全性。
- 產生 SSH 金鑰:
ssh-keygen -t rsa -b 4096
- 傳送公鑰至遠端伺服器:
ssh-copy-id -p 2222 user@server-ip
- 禁用密碼驗證(僅允許金鑰登入):
PasswordAuthentication no
- 重新啟動 SSH:
sudo systemctl restart sshd
限制 SSH 允許的使用者
若伺服器上有多個使用者,應明確指定哪些使用者能登入 SSH。
- 編輯
/etc/ssh/sshd_config
,新增:
AllowUsers user1 user2
- 重新啟動 SSH 服務:
sudo systemctl restart sshd
啟用 Fail2Ban 防暴力攻擊
Fail2Ban 可監控 SSH 登入失敗記錄,並暫時封鎖可疑 IP。
- 安裝 Fail2Ban:
sudo dnf install fail2ban -y
- 新增
/etc/fail2ban/jail.local
設定:
[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 3600
- 啟動 Fail2Ban:
sudo systemctl enable --now fail2ban
- 查看封鎖狀態:
sudo fail2ban-client status sshd
限制 SSH 連線 IP
若伺服器只需特定 IP 連線,可設定 /etc/hosts.allow
和 /etc/hosts.deny
。
允許特定 IP
echo "sshd: 192.168.1.100 203.0.113.50" | sudo tee -a /etc/hosts.allow
阻擋所有其他 IP
echo "sshd: ALL" | sudo tee -a /etc/hosts.deny
設定 SSH 連線超時與閒置斷線
防止長時間閒置的 SSH 會話可降低攻擊風險。
- 編輯
/etc/ssh/sshd_config
,新增:
ClientAliveInterval 60
ClientAliveCountMax 3
- 重新啟動 SSH 服務:
sudo systemctl restart sshd
啟用 SSH 日誌與監控
查看 SSH 登入日誌
sudo journalctl -u sshd --no-pager | tail -n 50
或使用:
sudo tail -f /var/log/secure
查找 SSH 失敗登入嘗試
sudo grep "Failed password" /var/log/secure
找出多次失敗的 IP
sudo awk '{print $11}' /var/log/secure | sort | uniq -c | sort -nr | head -10
設定 SSH 存取記錄保留時間
LogLevel VERBOSE
重新啟動 SSH:
sudo systemctl restart sshd
結語
本篇提供了完整的 SSH 安全加固方案,包括變更連接埠、禁用 root 登入、SSH 金鑰驗證、使用者限制、Fail2Ban 防禦、IP 限制與日誌監控。透過這些設定,您可以顯著降低 SSH 伺服器的安全風險,確保伺服器的安全性與穩定性。