## 點解你需要 Fail2Ban?
做 IT 嘅你一定見過呢個畫面:朝早返工 check server log,發現成晚有幾千次 SSH login attempt,來自世界各地唔同 IP。雖然未必攻得入,但係咁樣俾人狂撞密碼,一來消耗 server 資源,二來萬一有個 account 用咗弱密碼就大鑊。
Fail2Ban 就係專為呢個情況而設嘅開源工具。佢會持續監控你嘅 log file,一旦發現某個 IP 喺短時間內有太多次失敗登入,就會自動用 firewall rule ban 咗佢一段時間。簡單嚟講,就係幫你自動還拖。
今日就同大家 step-by-step 示範點樣喺 Ubuntu Server 上面安裝同設定 Fail2Ban,保護你嘅 SSH 服務。
## 安裝 Fail2Ban
首先 SSH 入去你嘅 server,然後用 apt 安裝:
sudo apt update
sudo apt install fail2ban -y
安裝完成之後,Fail2Ban 會自動啟動。你可以 check 下個 status:
sudo systemctl status fail2ban
正常應該見到 `active (running)`。
## 基本設定檔設定
Fail2Ban 嘅預設設定檔喺 `/etc/fail2ban/jail.conf`,但係官方建議唔好直接改呢個 file,而係創建一個 `jail.local` 去 override 設定:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然後編輯 `jail.local`:
sudo nano /etc/fail2ban/jail.local
搵到 `[DEFAULT]` section,設定以下參數:
[DEFAULT]
# 白名單 — 呢啲 IP 永遠唔會俾人 ban
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# ban 嘅時長(秒)— 預設 10 分鐘,建議 set 長啲
bantime = 3600
# 搵到失敗記錄嘅時間窗口(秒)
findtime = 600
# 喺 findtime 入面最多可以有幾多次失敗
maxretry = 5
以上設定意思係:如果同一個 IP 喺 10 分鐘內有 5 次失敗登入,就會俾人 ban 一個鐘。
## 啟用 SSH Jail
繼續喺 `jail.local` 入面,搵到 `[sshd]` section,確保佢係 enabled:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
如果你改咗 SSH port(例如改用 2222),記得改 `port = 2222`。
## 重新啟動同測試
儲存設定檔之後,重新啟動 Fail2Ban:
sudo systemctl restart fail2ban
然後檢查 SSH jail 係咪正常運作:
sudo fail2ban-client status sshd
你會見到類似以下輸出:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
## 進階用法:自訂 Jail 保護其他服務
Fail2Ban 唔止可以保護 SSH,仲可以保護 Nginx、Apache、Postfix 等服務。例如你想保護 Nginx 免受 HTTP 暴力攻擊:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
## 常用管理指令
# 睇晒所有 jail 嘅狀態
sudo fail2ban-client status
# 手動 ban 一個 IP
sudo fail2ban-client set sshd banip 203.0.113.5
# 手動 unban 一個 IP
sudo fail2ban-client set sshd unbanip 203.0.113.5
# 睇 banned IP list
sudo fail2ban-client get sshd banned
## 總結
Fail2Ban 係一個輕量但好實用嘅安全工具,安裝設定都唔使 10 分鐘,但係可以幫你擋走大量自動化攻擊。對於任何對外開放 SSH 嘅 Linux server 嚟講,呢個基本上係必裝嘅套件。
記住,Fail2Ban 係第一道防線,但唔係萬能。你仲應該配合 SSH key authentication、停用 root login、改 default port 等措施,先至算係基本嘅伺服器安全加固。安全永遠係多層防禦,冇單一工具可以做到完美保護。
#監控 #Server #SSH #自動化 #IT教學




