如何在 Linux 上安裝及設定 Fail2Ban
9 分鐘閱讀 - 2026年5月14日

在 Ubuntu、Debian 及 RHEL-based Linux 伺服器上安裝、配置及測試 Fail2Ban 的逐步指南。
如何在 Linux 上安裝與設定 Fail2Ban
Fail2Ban 會監控您的伺服器日誌以偵測可疑活動,並透過更新防火牆規則自動封鎖違規 IP。它能阻止暴力破解攻擊、減少日誌雜訊,且一旦設定完成,便會靜默地在背景運行。本指南涵蓋 Ubuntu/Debian 系統的安裝、核心設定、jail 設定,以及幾項值得了解的高階選項。
先決條件
Fail2Ban 可在大多數 Linux 發行版上運行:Ubuntu、Debian、AlmaLinux、CentOS、RHEL、Rocky Linux 以及 Fedora。您需要:
- 系統已安裝 Python 3
- 具備 root 或 sudo 權限,以便安裝套件及變更防火牆設定
- 一個正在運作的防火牆(iptables、nftables、ufw 或 firewalld)
- 可記錄登入失敗嘗試的日誌檔案(
/var/log/auth.log在基於 Debian 的系統上,/var/log/secure在 RHEL 基礎系統上)
在 RHEL 系統上,請先啟用 EPEL 軟體庫。安裝 Fail2Ban 之前,請先確認防火牆正在運行,可透過 ufw status 或 systemctl status firewalld.
在 Ubuntu/Debian 上安裝 Fail2Ban
更新套件並安裝 Fail2Ban:
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban啟用服務使其於開機時自動啟動,然後啟動該服務:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban將預設設定檔複製至本機覆寫檔案。請務必編輯 jail.local,而非 jail.conf,以免套件更新覆寫您的設定:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local確認一切運作正常:
sudo systemctl status fail2ban
sudo fail2ban-client status第一個指令應顯示「Active: active (running)」。第二個指令會列出您的活躍監獄。請透過 sudo systemctl is-enabled fail2ban.
設定 Jails
預設設定
開啟 /etc/fail2ban/jail.local 並調整 [DEFAULT] 區段。除非被覆寫,否則這些設定將套用至所有 Jails:
| 參數 | 建議值 | 功能說明 |
|---|---|---|
bantime | 3600 | 將 IP 位址封鎖 1 小時 |
findtime | 600 | 在 10 分鐘內統計失敗次數 |
maxretry | 3 至 5 | 觸發封禁前的失敗次數 |
ignoreip | 127.0.0.1/8 ::1 | 從未被封鎖的 IP |
將您自己的管理 IP 加入 ignoreip 以免將自己鎖在門外。範例: ignoreip = 127.0.0.1/8 ::1 203.0.113.50.
SSH 保護
在 jail.local:
[sshd]
enabled = true確認 logpath 是否指向您發行版的正確日誌檔案。若您已將 SSH 移至非標準埠(例如 2222),請更新 port 參數以配合。
Web 伺服器保護
啟用與您的網頁伺服器相符的隔離環境:
- Nginx:
[nginx-http-auth]用於驗證失敗的情況,[nginx-botsearch]針對惡意機器人 - Apache:
[apache-auth]用於身份驗證,[apache-badbots]針對機器人
Recidive Jail
該 [recidive] 隔離區會攔截那些在其他隔離區中反覆被封禁的 IP 位址,並施加更長的懲罰,通常為一週(604,800 秒)。這對於會不斷變換攻擊手法的頑固攻擊者非常有用。
完成變更後,請重新載入:
sudo systemctl restart fail2ban
sudo fail2ban-client status測試與監控
測試封禁
在生產環境中採用 Fail2Ban 之前,請先進行測試。從遠端機器(非您的管理員 IP)嘗試 SSH 登入,直到超過 maxretry。此時您應被封鎖。請透過以下指令確認:
sudo fail2ban-client status sshd即時監看封禁狀況:
tail -f /var/log/fail2ban.log若不慎封鎖了合法 IP,請解除封鎖:
sudo fail2ban-client set sshd unbanip 203.0.113.50日常監控
透過 grep 指令檢視封鎖紀錄:
grep "Ban\|Unban" /var/log/fail2ban.log實用管理指令:
| 指令 | 用途 |
|---|---|
fail2ban-client status | 列出所有活躍的隔離區 |
fail2ban-client banned | 顯示所有目前被封鎖的 IP 位址 |
fail2ban-client set <jail> unbanip <IP> | 解除特定 IP 的封禁 |
fail2ban-client unban --all | 清除所有封禁 |
fail2ban-client set <jail> banip <IP> | 手動封鎖 IP |
封禁設定會保留至系統重新啟動後。Fail2Ban 將其儲存於位於 /var/lib/fail2ban/fail2ban.sqlite3.
進階設定
切換至 nftables
nftables 是 iptables 的現代替代方案。它能在單一框架中處理 IPv4 與 IPv6,面對大型封鎖清單時具備更佳的擴展性,並內建速率限制功能。若您使用的是 Ubuntu 22.04 以上、Debian 11 以上或任何近期發行版,這將是更佳的選擇。
設定位置 jail.local:
[DEFAULT]
banaction = nftables-multiport重新啟動 Fail2Ban,然後透過 sudo nft list ruleset。您應會看到 f2b-table 以及 f2b-chain 。僅當您使用舊版系統或有相容性需求時,才應繼續使用 iptables。
電子郵件通知
預設情況下,Fail2Ban 會靜默封鎖。若要接收電子郵件警示,請在 [DEFAULT] 部分中 jail.local:
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)sThe action_mwl action 會發送一封電子郵件,內容包含封鎖詳情、WHOIS 資料以及觸發封鎖的日誌行。若您僅需 WHOIS 資料,請使用 action_mw 若您僅需 WHOIS 資料,請使用。您需要安裝如 sendmail 之類的郵件傳輸代理程式,或透過類似 msmtp.
若要使用 Slack 或 Discord 通知,請建立一個會發送 webhook 的腳本,並透過 /etc/fail2ban/action.d/.
若您正在尋找具備完整 root 權限及不限流量的伺服器來運行 Fail2Ban,請查看 FDC 的專用伺服器。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?
立即开启性能Linux 記憶體管理:交換、OOM 殺手與 Cgroups
12 分鐘閱讀 - 2026年5月31日