
# 用 fail2ban 保護你部 Linux 伺服器免受暴力破解攻擊
如果你有部 Linux 伺服器放咗上網,好快就會發現 SSH port 日日都俾人「撞門」。啲自動化 bot 會不停用唔同嘅 username 同密碼嘗試登入,呢個就係所謂嘅**暴力破解攻擊(brute force)**。今次同大家介紹一個免費又好用嘅工具 —— **fail2ban**,佢可以自動偵測呢啲攻擊,仲會即時 ban 咗個 IP。
## 咩係 fail2ban?
**fail2ban** 係一個開源嘅入侵防護軟件,佢會監察你部機嘅 log(例如 SSH、HTTP、FTP),當發現某個 IP 短時間內連續登入失敗太多次,就會自動用防火牆規則(通常係 iptables 或 nftables)封鎖佢一段時間。簡單講,就係幫你「自動鎖門」。
## 點樣安裝 fail2ban
首先用 SSH 登入你部伺服器,然後用套件管理員安裝。以下用 Ubuntu/Debian 做例子:
sudo apt update
sudo apt install fail2ban -y
裝完之後,**fail2ban** 會自動啟動。你可以確認下佢個狀態:
sudo systemctl status fail2ban
見到 `active (running)` 就代表搞掂。
## 設定 fail2ban 保護 SSH
**fail2ban** 嘅預設設定已經有一個 SSH 保護規則(叫做 `sshd` jail),但係建議大家自訂一份設定檔,等升級嗰陣唔會俾系統覆蓋。
首先複製預設設定:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然後編輯 `jail.local`,搵到 `[sshd]` 呢一段,設定你想要嘅參數:
sudo nano /etc/fail2ban/jail.local
喺 `[sshd]` 段落入面,可以咁樣設定:
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600
findtime = 600
上面嘅意思係:喺 **10 分鐘**(findtime = 600 秒)入面,如果有 IP 登入失敗 **5 次**(maxretry),就會被 **ban 一個鐘**(bantime = 3600 秒)。
儲存之後,重新載入設定:
sudo systemctl restart fail2ban
## 檢查 fail2ban 有冇正常運作
你可以用 `fail2ban-client` 命令睇下個狀態:
sudo fail2ban-client status
sudo fail2ban-client status sshd
第二條命令會顯示 `sshd` jail 嘅狀態,包括目前已經 ban 咗幾多個 IP:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 42
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 3
|- Total banned: 3
`- Banned IP list: 203.0.113.5 198.51.100.7 192.0.2.10
見到 `Banned IP list` 有嘢,就代表 **fail2ban** 真係做緊嘢,幫你擋走晒啲攻擊者。
## 想手動解 ban 點算?
如果唔小心 ban 咗自己或者同事嘅 IP,可以用呢條命令解 ban:
sudo fail2ban-client unban 203.0.113.5
想睇下有咩 IP 被 ban,直接用:
sudo fail2ban-client banned
## 小貼士:配合強密碼 + SSH Key
**fail2ban** 只係第一道防線,最好仲要配合以下措施:
1. **停用密碼登入,改用 SSH Key**:喺 `/etc/ssh/sshd_config` 設定 `PasswordAuthentication no`
2. **改用非標準 SSH port**:例如將 port 22 改成 2222
3. **用強密碼**:避免用 `admin`、`123456` 呢類易估嘅密碼
## 總結
**fail2ban** 係一個安裝簡單、效果顯著嘅安全工具,尤其適合中小型企業同個人用戶。佢可以自動幫你擋走大部分嘅暴力破解攻擊,令你部伺服器安全好多。如果你部 Linux 機仲未裝,真係建議你即刻裝返個,幾分鐘就搞掂,何樂而不為呢?
🔗 參考資料:NVD NIST 漏洞資料庫
下次我會再同大家分享更多伺服器安全嘅實用技巧,記得留意返我哋嘅 blog!



