Fail2Ban 在 NGINX 的防護應用

Fail2Ban 是一款強大的安全工具,用於防止暴力破解攻擊。它會監控系統日誌,偵測不正常的登錄行為,並根據預設規則封鎖攻擊來源 IP。當 Fail2Ban 被與 NGINX 結合使用時,能夠有效地防止來自 Web 應用層的各種攻擊,包括暴力破解、SQL 注入攻擊等。

在本文中,我們將介紹如何將 Fail2Ban 集成到 NGINX 中進行防護,涵蓋設置、配置和一些常見運用範例。

1. 安裝 Fail2Ban 和 NGINX

首先,確保您的伺服器已安裝 Fail2Ban 和 NGINX。如果尚未安裝 Fail2Ban,可以使用以下命令安裝:

安裝 Fail2Ban

對於基於 Debian 或 Ubuntu 的系統:

sudo apt update
sudo apt install fail2ban

對於 CentOS 或 Red Hat 系統:

sudo yum install fail2ban

安裝 NGINX

如果您的伺服器尚未安裝 NGINX,可以使用以下命令:

對於 Debian 或 Ubuntu:

sudo apt update
sudo apt install nginx

對於 CentOS 或 Red Hat:

sudo yum install nginx

2. 配置 Fail2Ban 防護 NGINX

Fail2Ban 主要是通過監控伺服器日誌來實現防護。對於 NGINX,Fail2Ban 可以監控訪問日誌和錯誤日誌來檢測惡意行為。以下是如何配置 Fail2Ban 以防護 NGINX 的步驟。

2.1 創建 NGINX 監控規則

Fail2Ban 需要有針對 NGINX 日誌的正確規則。首先,您需要為 NGINX 創建一個新的設定檔案,這樣 Fail2Ban 才知道如何解析 NGINX 的訪問日誌。

/etc/fail2ban/filter.d/ 目錄下,創建一個名為 nginx-http-auth.conf 的文件:

sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf

在該文件中,加入以下內容來設置 Fail2Ban 監控 NGINX 的認證失敗:

[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*(HTTP/1\.0|HTTP/1\.1)" 401
ignoreregex =

這個正則表達式將會匹配到 NGINX 日誌中所有返回 401 Unauthorized 的請求,這通常是暴力破解登錄或非法訪問的跡象。

2.2 配置 Jail 設定

接下來,您需要設置 Jail 配置文件,告訴 Fail2Ban 哪些規則要應用於 NGINX。編輯 Fail2Ban 的 jail.local 配置文件:

sudo nano /etc/fail2ban/jail.local

在文件中添加以下設定:

[nginx-http-auth]
enabled  = true
port     = http,https
filter   = nginx-http-auth
logpath  = /var/log/nginx/access.log
maxretry = 3
bantime  = 3600

這裡的設定說明如下:

  • enabled:啟用此監控規則。
  • port:指定監控的端口,這裡我們設置為 HTTP 和 HTTPS。
  • filter:指定使用的過濾器,即我們在之前創建的 nginx-http-auth.conf
  • logpath:設置 NGINX 訪問日誌的路徑,通常是 /var/log/nginx/access.log
  • maxretry:最大重試次數,當某個 IP 地址達到這個次數時會被封鎖。
  • bantime:封鎖時間,這裡設置為 1 小時(3600 秒)。

2.3 重新啟動 Fail2Ban

配置完成後,重啟 Fail2Ban 服務使配置生效:

sudo systemctl restart fail2ban

3. 檢查 Fail2Ban 的運行狀況

您可以使用以下命令來檢查 Fail2Ban 是否正確運行並監控 NGINX:

sudo fail2ban-client status

要查看 NGINX 監控規則的狀態,請運行:

sudo fail2ban-client status nginx-http-auth

這將顯示哪些 IP 地址因為多次認證失敗而被封鎖。

4. 增加或解除 IP 地址

Fail2Ban 允許您手動增加或解除對特定 IP 地址的封鎖。

4.1 增加 IP 地址

如果您想手動封鎖某個 IP 地址,可以使用以下命令:

sudo fail2ban-client set nginx-http-auth banip <IP_ADDRESS>

4.2 解除 IP 地址

如果您想解除封鎖某個 IP 地址,可以使用以下命令:

sudo fail2ban-client set nginx-http-auth unbanip <IP_ADDRESS>

5. 防護範例

5.1 防止暴力破解 SSH

Fail2Ban 可以監控 NGINX 訪問日誌並檢測到 SSH 暴力破解的跡象。例如,當多次失敗的 SSH 登入請求來自同一個 IP 時,Fail2Ban 可以自動封鎖該 IP。設置 jail.local 配置中的 SSH 監控規則如下:

[sshd]
enabled  = true
port     = ssh
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 3600

5.2 防止 Web 應用暴力破解

您可以使用 Fail2Ban 來防護 Web 應用的暴力破解攻擊。例如,當大量錯誤的登錄嘗試被檢測到時,Fail2Ban 可以封鎖源 IP。設置 NGINX 的配置如下:

[nginx-badbots]
enabled  = true
port     = http,https
filter   = nginx-badbots
logpath  = /var/log/nginx/access.log
maxretry = 2
bantime  = 3600

6. 小結

Fail2Ban 是一款簡單且有效的防護工具,可以幫助您防止 NGINX 伺服器遭受暴力破解和其他惡意攻擊。通過對 NGINX 訪問日誌的監控,Fail2Ban 能夠及時偵測不正常的行為並封鎖可疑的 IP 地址。無論是 SSH、HTTP 還是其他 Web 應用,Fail2Ban 都可以提供強有力的防護。

將 Fail2Ban 配合 NGINX 使用,能夠有效提升伺服器的安全性,對於防止暴力破解和 Web 應用攻擊非常有幫助。如果您的伺服器面臨來自外部的安全威脅,Fail2Ban 是一個值得一試的防護工具。

瀏覽次數:24