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

在 Ubuntu、Debian 及 RHEL-based Linux 伺服器上安裝、配置及測試 Fail2Ban 的逐步指南。
如何在 Linux 上安裝及設定 Fail2Ban
Fail2Ban 監控您伺服器日誌中的可疑活動,並透過更新防火牆規則自動封鎖違規 IP。它可阻止暴力攻擊、減少日誌雜訊,並在設定後於背景中安靜地執行。本指南涵蓋 Ubuntu/Debian 上的安裝、核心設定、監獄設定,以及一些值得瞭解的進階選項。
先決條件
Fail2Ban 可在大多數 Linux 發行版上執行:Ubuntu、Debian、AlmaLinux、CentOS、RHEL、Rocky Linux 和 Fedora。您需要
- 系統上已安裝Python 3
- Root 或 sudo 存取權限,以便安裝套件和變更防火牆
- 使用中的防火牆(iptables、nftables、ufw 或 firewalld)
- 記錄登入失敗嘗試的記錄檔
(在 Debian 系統上為/var/log/auth.log,在 RHEL 系統上為/var/log/secure)
在以 RHEL 為基礎的系統上,請先啟用 EPEL 儲存庫。安裝 Fail2Ban 之前,請使用 ufwstatus或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 確認Fail2Ban 已在開機時啟用。
設定監獄
預設設定
開啟/etc/fail2ban/jail.local並調整[DEFAULT]區段。除非被覆寫,否則這些設定適用於所有監控系統:
| 參數 | 建議值 | 作用 |
|---|---|---|
時間 | 3600 | 封鎖 IP 1 小時 |
搜尋時間 | 600 | 計算 10 分鐘視窗內的故障次數 |
最大重試 | 3到5 次 | 觸發禁令前的失敗次數 |
忽略 IP | 127.0.0.1/8 ::1 | 永不被封禁的 IP |
在ignoreip中加入自己的管理 IP,這樣就不會將自己鎖在外面。範例:ignoreip = 127.0.0.1/8 ::1 203.0.113.50.
SSH 保護
在jail.local 啟用 SSH 監獄:
[sshd]
enabled = true檢查logpath是否指向您發行版的正確記錄檔。如果您已將 SSH 移至非標準連接埠 (例如 2222),請更新連接埠參數以符合。
網頁伺服器保護
啟用符合您 Web 伺服器的監獄:
- Nginx:
[nginx-http-auth]針對驗證失敗,[nginx-botsearch]針對惡意殭屍 - Apache:
[apache-auth]用於驗證,[apache-badbots]用於殭屍
回收監獄
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 "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 會將它們儲存在 SQLite 資料庫中,位置是/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 會默默禁止。若要取得電子郵件通知,請在jail.local 的[DEFAULT]區段加入下列內容:
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)saction_mwl動作會傳送一封包含封禁詳細資訊、WHOIS 資料以及觸發封禁的日誌行的電子郵件。如果您只想要 WHOIS 資料,請使用action_mw。您需要安裝 sendmail 之類的郵件傳輸代理程式,或透過msmtp 之類的 SMTP 中繼設定。
對於 Slack 或 Discord 警報,請建立一個腳本來傳送 webhook,並透過/etc/fail2ban/action.d/ 中的自訂動作檔來連接。
如果您正在尋找一個有完全 root 存取權限且頻寬不受限制的伺服器來執行 Fail2Ban,請查看 FDC 的專用伺服器。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?
立即开启性能
iperf3 教學:測試 Linux 與 Windows 上的網路速度
10 分鐘閱讀 - 2026年5月7日