SSH 被暴力破解怎麼辦?Fail2Ban、防火牆與登入日誌檢查

Linux VPS 經常會遇到 SSH 暴力破解嘗試。本文整理如何查看登入日誌、判斷是否成功登入、啟用 Fail2Ban、防火牆與 SSH 基本安全設定。

SSH暴力破解Fail2Ban防火牆UFWLinuxVPS登入日誌auth.log金鑰登入伺服器安全

VPS 只要有公開 IP,就很常看到 SSH 登入嘗試。看到大量 Failed password 不一定代表已經被入侵;重點是要判斷有沒有成功登入、是否有陌生帳號、是否有異常 sudo 紀錄,然後再補上 Fail2Ban、防火牆與 SSH 基本設定。

這篇只教你檢查與保護自己的 Linux VPS。請不要把這些觀念拿去測試第三方主機,也不要嘗試登入不屬於你的系統。

你會先搞懂這幾件事

  • SSH 暴力破解很常見,重點是有沒有成功登入。
  • 日誌要分開看失敗登入、成功登入、sudo 與帳號異動。
  • 啟用金鑰登入與停用密碼登入前,一定要先保留備用登入路徑。
  • Fail2Ban 是降低噪音與自動封鎖的工具,不是完整安全保證。
  • 如果已經有成功入侵跡象,可能需要重建主機,而不是只改密碼。

SSH 暴力破解很常見,重點是有沒有成功

先不要只因為 log 很長就恐慌。公開 SSH 通常會被自動化機器人嘗試登入,你要先回答:

  • 是否只有失敗登入?
  • 是否有你不認識的成功登入?
  • 是否有陌生使用者被建立?
  • 是否有異常 sudo 指令?
  • 是否有新服務、新排程或陌生程序?

如果只有大量失敗登入,通常先強化登入方式與防火牆即可。如果看到成功登入或系統被改動,處理等級要提高。

如何查看登入失敗與成功紀錄

不同 Linux 發行版日誌位置可能不同。Ubuntu / Debian 常見是 /var/log/auth.log,使用 systemd 的系統也可以用 journalctl

# 最近 24 小時 SSH 服務日誌
sudo journalctl -u ssh --since "24 hours ago"

# Ubuntu / Debian:查看失敗登入
sudo grep "Failed password" /var/log/auth.log

# Ubuntu / Debian:查看成功登入
sudo grep "Accepted" /var/log/auth.log

# 查看最近登入紀錄
last -a | head

看 log 時要注意時間、使用者名稱、來源 IP 與登入方式。例如 Accepted publickeyAccepted password 代表不同登入方式。

檢查是否有陌生帳號或異常 sudo 紀錄

先檢查系統帳號:

# 查看可登入帳號概況
awk -F: '$7 !~ /(nologin|false)$/ {print $1, $6, $7}' /etc/passwd

# 查看 sudo 群組成員
getent group sudo

# Ubuntu / Debian:查看 sudo 使用紀錄
sudo grep "sudo:" /var/log/auth.log

如果看到陌生帳號、陌生 sudo、你沒建立過的 SSH key、或奇怪的 cron job,就不要只改密碼。這可能代表主機已經被動過。

啟用金鑰登入與停用密碼登入的注意事項

停用密碼登入前,請先確認:

  • 你已經能用 SSH key 成功登入。
  • 你有主機控制台、VNC、救援模式或其他備用登入方式。
  • 你知道怎麼回復 sshd_config
  • 你沒有把所有管理者都鎖在外面。

常見設定在 /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no

修改後先測試設定語法,再重載 SSH:

sudo sshd -t
sudo systemctl reload ssh

請保留原本 SSH 視窗不要關,另外開新視窗測試能否登入。確認成功後再關閉舊連線。

Fail2Ban 基本觀念

Fail2Ban 會讀取日誌,當同一來源在短時間內登入失敗太多次,就自動用防火牆封鎖一段時間。它適合降低暴力破解噪音,也能減少服務壓力。

你可以先看完整的 Fail2Ban 防護教學。最常見的檢查方式:

sudo fail2ban-client status
sudo fail2ban-client status sshd

設定 Fail2Ban 前,請把自己的固定 IP 或管理來源加入白名單,避免輸錯密碼時把自己封掉。

防火牆與來源 IP 限制

如果只有你或公司固定 IP 需要登入 SSH,最有效的做法是限制來源:

# 範例:只允許指定來源連 SSH,請把 203.0.113.10 換成你的管理 IP
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw enable
sudo ufw status verbose

如果你的 IP 會變動,至少也要:

  • 不直接使用 root 登入。
  • 使用 SSH key。
  • 啟用 Fail2Ban。
  • 使用強密碼與 2FA 管理主機控制台。
  • 定期檢查登入日誌。

防火牆規則改錯可能導致你無法登入。正式主機操作前,先確認你有備用登入方式。

什麼情況應該立即重建主機或尋求協助

建議提高處理等級的情況:

  • 看到陌生來源成功登入。
  • 系統多了陌生帳號、SSH key 或 sudo 權限。
  • 發現未知程序、排程、服務或對外連線。
  • 網站、API、資料庫或信箱已經異常。
  • 日誌被清空或時間線不完整。
  • 主機裡有客戶資料、金鑰、付款或內部系統資訊。

如果已經有明確入侵跡象,單純安裝 Fail2Ban 可能太晚。通常要先保存證據、備份必要資料、輪替密碼與金鑰,並評估重建乾淨主機。

需要協助判斷目前環境是否安全?

如果你已經有網站、VPS、cPanel、WordPress、AI 工具或掃描報告,但不確定哪些問題要先處理,可以到侃瑞科技官方網站取得初步判斷。

查看資安健檢服務

延伸閱讀

需要協助判斷目前環境是否安全?

如果你已經有網站、VPS、cPanel、WordPress、AI 工具或掃描報告,但不確定哪些問題要先處理,可以到侃瑞科技官方網站取得初步判斷。

查看資安健檢服務 →