如何在 Linux 上安裝及設定 Fail2Ban

9 分鐘閱讀 - 2026年5月14日

hero section cover
目錄
  • 如何在 Linux 上安裝與設定 Fail2Ban
  • 先決條件
  • 在 Ubuntu/Debian 上安裝 Fail2Ban
  • 設定 Jails
  • 測試與監控
  • 進階設定
分享

在 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 statussystemctl 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:

參數建議值功能說明
bantime3600將 IP 位址封鎖 1 小時
findtime600在 10 分鐘內統計失敗次數
maxretry35觸發封禁前的失敗次數
ignoreip127.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)s

The action_mwl action 會發送一封電子郵件,內容包含封鎖詳情、WHOIS 資料以及觸發封鎖的日誌行。若您僅需 WHOIS 資料,請使用 action_mw 若您僅需 WHOIS 資料,請使用。您需要安裝如 sendmail 之類的郵件傳輸代理程式,或透過類似 msmtp.

若要使用 Slack 或 Discord 通知,請建立一個會發送 webhook 的腳本,並透過 /etc/fail2ban/action.d/.

若您正在尋找具備完整 root 權限及不限流量的伺服器來運行 Fail2Ban,請查看 FDC 的專用伺服器

background image
您的服务器是否阻碍了您的发展?

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?

立即开启性能

博客

本周特色

更多文章
為什麼擁有一個強大且不計費的 VPS 是很重要的?

為什麼擁有一個強大且不計費的 VPS 是很重要的?

非計費 VPS 以固定的連接埠速度提供定額頻寬。它與計費計劃有何不同、何時會有好處,以及購買前需要檢查的事項。

7 分鐘閱讀 - 2025年5月9日

Linux 記憶體管理:交換、OOM 殺手與 Cgroups

12 分鐘閱讀 - 2026年5月31日

更多文章