如何設定 Fail2ban 來保護您的 Linux 伺服器

最後更新: 3月2026

IT 專業人員在現代化資料中心使用筆記型電腦工作,非常適合介紹伺服器安全。

將 Linux 伺服器暴露在網路中,就好比放置了一塊吸引機器人的磁鐵。如果您沒有設定任何安全措施,您的日誌中可能已經記錄了成千上萬次的登入失敗嘗試;不斷有自動化程式嘗試各種使用者名稱和密碼組合,試圖透過暴力破解攻擊來控制您的機器。

這時 Fail2ban 就派上用場了,它就像一個不知疲倦的守護者。嚴格來說,它並非防火牆,而是透過分析系統日誌來阻止入侵。一旦偵測到有人試圖強行闖入,它就會使用 iptables 或 nftables 等工具來封鎖其 IP 位址,從而將入侵者拒之門外。接下來,我們將介紹如何設定它,讓你的伺服器固若金湯。

Fail2ban究竟是什麼?它是如何運作的?

簡而言之,Fail2ban 是一個守護進程,它會持續監控您服務的日誌檔案。當它發現符合預定義規則(稱為過濾器)的可疑模式時,就會開始統計失敗次數。如果某個 IP 位址在一定時間內達到允許的嘗試次數上限,程式就會執行對應的操作,通常是將該 IP 位址加入防火牆的黑名單中。

這些配置被組織成所謂的「監獄」(jail)。監獄本質上是一組應用於特定服務(例如 SSH、Apache 或 MySQL)的規則。這樣,您可以對遠端存取設定非常嚴格的策略,而對 Web 伺服器設定更寬鬆的策略,從而確保入侵者被自動阻止,而無需您每五分鐘手動檢查一次日誌。

  Linux 的最佳 Web 資源:完整指南

網路攻擊的標誌,圖中一人手持駭客面具,旁邊是 Linux 伺服器機架。

根據您的 Linux 發行版進行安裝

根據您使用的系統不同,安裝命令略有差異,但幾乎所有官方儲存庫中通常都有提供。

  • 在 Ubuntu 和 Debian 系統上: 很簡單,你只需要運行 sudo apt update 接下來 sudo apt install fail2ban.
  • 在 Rocky Linux 或 AlmaLinux 系統上: 由於這些是企業版發行版,您必須先啟用 EPEL 儲存庫。 sudo dnf install epel-release 然後使用以下命令安裝軟體包 sudo dnf install fail2ban fail2ban-firewalld.
  • 在 Alpine Linux 系統中: 使用 APK 管理器 sudo apk add fail2ban 而且,由於它使用 OpenRC,因此您必須啟用它。 sudo rc-update add fail2ban default 並以…開始 sudo rc-service fail2ban start.

資料中心伺服器機架的專業細節圖,藍色燈光代表伺服器基礎架構。

主配置:.local 檔案的秘密

一個非常常見的錯誤是直接編輯文件。 jail.conf千萬別這麼做!系統更新時,該檔案可能會被覆寫。正確的做法是建立一個名為 `.txt` 的副本。 本地監獄您在第二個文件中新增的任何參數都將優先於原始文件,您的變更將被覆寫。 免受更新影響.

首先,您可以使用以下命令克隆原始檔案: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 然後用你喜歡的編輯器打開它,例如 nano 或 vim。在「部分」中 [默認] 在這裡,您需要定義系統的整體行為:

  • 禁令時間: 惡意 IP 位址凍結的時間長度。單位可以是秒,也可以用“m”表示分鐘(例如,10m)。
  • 查找時間: Fail2ban 檢查錯誤的時間間隔。如果某人在一小時內失敗 5 次,但檢​​查時間為 10 分鐘,則不會被封鎖。
  • 最大重試次數: 系統提示之前允許的失敗嘗試次數 夠了,封禁該IP位址。.
  • 忽略 IP: 避免被封禁至關重要。您必須在此輸入您的 公用IP地址 或您的 VPN 範圍。
  資質認證:提升個人形象的完整指南

光纖網路電纜連接到企業伺服器的特寫鏡頭,展示了網路連接性和安全性。

逐步保護特定服務

完成常規設定後,就可以啟動您最關心的服務的隔離區了。為了使保護措施生效,您必須進行以下設定。 enabled = true 在其各自的章節中 jail.local.

SSH 訪問(最關鍵的一點)

埠 22 是首要目標。一個穩健的配置將定義 maxretry = 3bantime = 3600 (一小時)。 Fail2ban 將讀取該檔案。 /var/log/auth.log (在 Debian/Ubuntu 系統上) 在/ var /日誌/安全 (在 CentOS/RHEL 上)偵測驗證失敗並關閉攻擊者的存取權限。

Web伺服器(Apache和Nginx)

如果您擁有網站或線上商店,機器人會嘗試存取敏感路徑,例如: /wp-admin o /login.php您可以在以下位置建立自訂篩選器: /etc/fail2ban/filter.d/ 檢測這些模式。例如,為了 保護 WordPress監控 403 錯誤或失敗嘗試 wp-login.php如果 IP 位址超過 Apache 或 Nginx jail 中設定的限制,則將其封鎖。

資料庫和FTP

對於 MySQL,您可以監控該短語的錯誤日誌。 用戶存取被拒絕對於 FTP(例如 ProFTPD),確保以下幾點至關重要: logpath 請確保日誌檔案的實際路徑與 Fail2ban 的日誌檔案路徑一致,因為如果 Fail2ban 找不到日誌文件,則保護功能將無法正常運作。

使用 fail2ban-client 進行高階管理

您並非總是需要編輯文件並重新啟動服務才能進行快速更改。該命令 fail2ban-client 它允許您透過控制台即時管理系統。

要查看哪些監獄處於活動狀態以及有多少 IP 位址被阻止,請使用 sudo fail2ban-client status如果您想深入了解某項服務(例如 SSH),請執行 sudo fail2ban-client status sshd此外,如果因疏忽而導致 您已封鎖一位同事 或者,您可以使用以下命令快速自行釋放 IP 位址。 sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.

維護和故障排除

如果您發現 Fail2ban 沒有如預期進行阻止,首先應該查看該工具本身的日誌檔案。 /var/log/fail2ban.log。 穿著 tail -f 您可以即時查看哪些人被禁言以及原因。

  Chrome 遠端桌面:個人電腦的終結?

請記住,Fail2ban 會將鎖定狀態儲存在 SQLite 資料庫中。 /var/lib/fail2ban/fail2ban.sqlite3因此,如果您重新啟動伺服器,已封鎖的 IP 位址將被解封。 將繼續處於封鎖狀態 直到您的處罰期結束。每當您更改設定檔時,請務必使用以下命令套用變更: sudo systemctl restart fail2ban.

部署此工具可將您的伺服器從易受攻擊的目標轉變為自動化堡壘,透過在網路層攔截惡意流量來降低 CPU 負載,讓您高枕無憂,因為您無需擔心殭屍網路無法透過暴力破解入侵。透過結合使用 .local 檔案、管理特定 jail 以及持續的日誌監控,您可以建立縱深防禦系統,這對於任何 Linux 系統管理員來說都至關重要。