# 用 Fail2ban 保護 SSH:三步鎖死暴力破解攻擊
做 IT 嘅朋友一定試過——部 Linux 伺服器放咗上網冇幾耐,SSH port 就開始俾人狂掃。打開 /var/log/auth.log 一睇,成版都係「Failed password for root from 203.0.113.x」,仲要每分鐘幾十次。呢啲就係暴力破解攻擊(Brute Force Attack),黑客用字典同常見密碼逐個試,想撞中你個 SSH 密碼。
今日同大家分享一個免費又實用嘅防禦工具:**Fail2ban**。呢篇 **Fail2ban SSH** 教學會一步步教你點樣用佢封鎖暴力破解,保護你部伺服器。等我一步一步教你裝同設定。
Fail2ban SSH 防禦係咩嚟?
Fail2ban 係一個開源嘅入侵防禦工具,原理好簡單:佢會實時掃描你嘅 log 檔(例如 SSH 嘅 auth.log),當某個 IP 喺指定時間內連續登入失敗太多次,Fail2ban 就會自動加一條防火牆規則,將嗰個 IP 封鎖一段時間。咁樣攻擊者就冇得無限試密碼。
Step 1:安裝 Fail2ban
喺 Ubuntu / Debian 系統,一行指令就搞掂:
sudo apt update
sudo apt install fail2ban -y
裝完之後,Fail2ban 服務會自動啟動。你可以用下面指令確認佢行緊:
sudo systemctl status fail2ban
見到 `active (running)` 就代表成功。
Step 2:建立自訂設定檔
Fail2ban 預設有設定檔,但最好唔好直接改,而係複製一份出嚟做 override。咁樣升級時先唔會俾人覆蓋:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然後編輯 jail.local,搵到 `[sshd]` 呢一段,改成你嘅設定:
sudo nano /etc/fail2ban/jail.local
一個常用嘅 SSH 設定例子係咁:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 1h
findtime = 10m
上面每個參數嘅意思:
– **maxretry = 5**:10 分鐘內連續失敗 5 次就封鎖
– **bantime = 1h**:封鎖時間 1 小時(可以設 -1 代表永久封)
– **findtime = 10m**:統計失敗次數嘅時間窗口
Step 3:啟動並驗證
設定完之後,重啟 Fail2ban 令新設定生效:
sudo systemctl restart fail2ban
跟住用下面指令睇下 SSH jail 有冇成功啟動:
sudo fail2ban-client status sshd
如果見到類似輸出,就代表成功:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 12
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 203.0.113.55
你可以見到「Currently banned」已經有 IP 俾封鎖咗,代表 Fail2ban 已經開始發揮作用。
進階:手動封鎖同解封
有時你想即時封鎖某個 IP,可以手動指令:
sudo fail2ban-client set sshd banip 198.51.100.10
相反,如果想解封(例如誤封咗自己),用:
sudo fail2ban-client set sshd unbanip 198.51.100.10
延伸閱讀:用 rsync 做 Linux 伺服器備份教學 · Fail2ban 保護 SSH 相關教學
Fail2ban SSH 保護總結
Fail2ban 係一個「低成本、高回報」嘅安全措施,尤其適合中小企或者自管伺服器嘅朋友。裝完佢之後,SSH 俾暴力破解嘅機會大幅減少。當然,最好嘅做法仲係配合埋 SSH key 登入、停用 root 密碼登入、改預設 port 等,咁樣先至算係完整嘅防線。
🔗 參考資料:NVD NIST 漏洞資料庫
下次有機會再同大家分享點樣用 Fail2ban 保護埋 Nginx、Apache 等 web 服務,等我哋一步一步築起自己嘅安全城牆!
#Linux #IT教學 #SSH #技術分享




