Fail2Ban 伺服器安全加固教學:自動阻擋 SSH 暴力破解攻擊

## 點解你需要 Fail2Ban? 做 IT 嘅你一定見過呢個畫面:朝早返工 check server log,發現成晚有幾千次 SSH login attempt,來自世界各地唔同 IP。雖然未必攻得入,但係咁樣俾人狂撞密碼,一來消耗 server 資源,二來萬一有個 account 用咗弱密碼就大鑊。 Fail2Ban 就係專為呢個情況而設嘅開源工具。佢會持續監控你嘅 log file,一旦...

## 點解你需要 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教學

Fail2Ban 伺服器安全加固教學:自動阻擋 SSH 暴力破解攻擊 - 文章重點速覽 infographic