Jump to content

如何保護Web 應用程序免受密碼破解(上)

什麼是Fail2ban,它是如何工作的? Fail2ban是一種用於掃描日誌文件、檢測可疑活動(例如過多失敗的身份驗證嘗試)並阻止潛在惡意IP 地址的工具。

這項免費服務有助於保護Linux 機器免受暴力破解和其他自動攻擊。通常,Fail2ban 用於更新防火牆規則以在指定時間內拒絕IP 地址。

Fail2ban 具有以下優點:

易於設置

免費使用

可以與大量應用程序交互

提供大量配置參數

易於監控當前保護狀態

與各種通知服務集成

儘管Fail2ban 可以幫助您最大程度地減少不正確的身份驗證嘗試次數,並在一定程度上降低密碼破解和未經授權訪問的風險,但這並不是靈丹妙藥。

不利的一面是,Fail2ban 無法解決因服務器身份驗證策略薄弱而出現的問題。即使是最好的Fail2ban 配置也不能替代我們上面討論的密碼保護最佳實踐。此外,Fail2ban 僅適用於Linux,不適用於IPv6。

為了有效地保護您的服務,您還可以應用用於多因素和公共/私人身份驗證機制的工具。

image.png

Fail2ban 優缺點

Fail2ban 如何運作?以下是對其機制的簡單解釋:

任何應用程序或服務器總是將日誌保存在特定文件中,包括失敗的身份驗證嘗試的唯一日誌。

Fail2ban 掃描這些文件,搜索與身份驗證失敗相關的日誌。

如果檢測到失敗的身份驗證嘗試,Fail2ban 會保存嘗試時間和負責的IP 地址。

Fail2ban 計算在指定時間段內來自同一IP 的失敗身份驗證嘗試。

如果IP 地址超過允許的嘗試次數,Fail2ban 會創建一個新的防火牆規則來阻止此IP 地址。

結果,可疑的IP 地址將失去訪問服務器的能力。經過一段可配置的時間後,IP 地址可以自動解禁,也可以手動解禁。

例如,您可以配置Fail2ban,如果任何威脅行為者開始密碼破解攻擊,他們的IP 地址將被禁止五個小時。

現在,讓我們探索配置過程本身。

如何配置Fail2ban您可以配置Fail2ban 來讀取不同應用程序的日誌。開箱即用,此工具可以與以下應用程序類型交互:

SSH 服務器

HTTP 服務器

網絡郵件和群件服務器

網絡應用

HTTP 代理服務器

FTP服務器

郵件服務器

郵件服務器驗證器

DNS 服務器

來自不同類別的各種服務器應用程序

默認情況下,Fail2ban 啟用使用sshd的通信,這是一個OpenSSH 服務器進程。這意味著在多次SSH 身份驗證嘗試失敗後,負責的IP 地址將被禁止。

為了與任何應用程序交互,Fail2ban 使用Jail,它是一個過濾器和一個或多個操作的組合。此交互允許您在身份驗證嘗試失敗後禁止IP 地址。

默認情況下, Jail配置保存在jail.conf 文件中。如果要更改默認設置,請複製配置文件並將副本命名為jail.local。如果jail.local 文件存在,Fail2ban 將自動使用它而不是默認文件。

我們不建議更改原始配置文件,因為如果出現任何錯誤,返回默認設置將是一個挑戰。此外,一旦安裝了Fail2ban 的新更新,jail.conf 文件也將更新,所有自定義設置都將消失。

以下是Fail2ban 如何確定失敗的身份驗證嘗試:

該工具具有寫入jail.local 配置文件中的服務日誌文件的路徑。

失敗的身份驗證日誌和常規異常會自動添加到Fail2ban 文本過濾器中。

該工具使用文本過濾器掃描日誌文件。

如果您打開配置文件,您會發現一個相當大的Fail2ban 可以與之交互的應用程序列表。這些應用程序的名稱在括號中,如下面的示例代碼所示:

#Mailservers

[assp]

port=smtp,465,submission

logpath=/root/path/to/assp/logs/maillog.txt

[courier-smtp]

port=smtp,465,submission

logpath=%(syslog_mail)s

backend=%(syslog_backend)s

[postfix]

#Touseanothermodessetfilterparameter'mode'injail.local:

mode=more

port=smtp,465,submission

logpath=%(postfix_log)s

backend=%(postfix_backend)s

[postfix-rbl]

filter=postfix[mode=rbl]

port=smtp,465,submission

logpath=%(postfix_log)s

backend=%(postfix_backend)s

maxretry=1默認情況下,Fail2ban 被配置為僅使用SSH,所有其他通信協議都被禁用。如果需要開啟其他類型的通信,在配置文件中找到需要的類型,添加如下字符串:

enabled=true這是一個例子:

[nginx-http-auth]

enabled=true

port=http,https

logpath=%(nginx_error_log)s如果需要,您還可以更改與特定應用程序交互的現有參數或添加新參數。以下是常用參數列表:

ignoreip指定要被Fail2ban 忽略的IP 地址。默認情況下,此參數設置為忽略當前機器的流量。

bantime 以秒為單位設置禁令持續時間。默認值為600 秒。

findtime定義了監視來自每個IP 地址的失敗身份驗證嘗試的時間段。默認值為600 秒。

maxretry指定在findtime 指定的時間內每個地址的失敗登錄嘗試限制。

usedns確定是否使用反向DNS 進行阻止。如果設置為NO,那麼Fail2ban 將阻止IP 地址而不是主機名。如果設置為YES,該工具將嘗試使用反向DNS 來查找主機名並阻止它。默認值為WARN。它的工作方式與YES 值一樣,但也會記錄警告。系統工程師稍後可以查看所有警告。

協議指定將被阻止的流量類型。默認情況下它是TCP。

port指定要禁止的端口。

logpath顯示日誌文件的路徑。

注意:上面的列表並未描述所有Fail2ban 參數。您可以在配置文件中找到所有這些。

您可以在/etc/fail2ban 文件夾中的文件中的日誌路徑參數中找到默認設置的日誌文件路徑(例如,上面代碼示例中的nginx_error_log ) :

paths-common.conf — 具有默認服務日誌路徑的文件

paths-opensuse.conf、paths-arch.conf、paths-debian.conf — 包含不同Linux 系統特定路徑的文件

如果您打開上面提到的文件,您可以看到類似於這些的日誌文件的路徑:

apache_error_log=/var/log/apache2/*error.log

apache_access_log=/var/log/apache2/*access.log

auditd_log=/var/log/audit/audit.log

exim_main_log=/var/log/exim/mainlog

nginx_error_log=/var/log/nginx/*error.log

nginx_access_log=/var/log/nginx/*access.log如有必要,您可以編輯過濾器以指示應在日誌中搜索哪些文本以確定失敗的身份驗證。每個過濾器都位於/etc/fail2ban/filter.d 文件夾中的單獨文件中。

image.png

屏幕截圖1. /etc/fail2ban/filter.d文件夾中的過濾器列表

當您打開任何過濾器文件時,您將看到一個正則表達式,其中包含所需的失敗身份驗證文本,如下例所示:

image.png

屏幕截圖2. 驗證失敗的過濾文本

配置完成後,使用以下命令重新加載Fail2ban:

sudofail2ban-clientreload如果您只更改一個Jail文件的設置,則無需重新啟動該工具。只需使用此命令重新加載它:

image.png

此外,您可以將Fail2ban 配置為與配置文件中不存在的任何應用程序進行交互。您需要做的就是如上所述添加您的自定義配置。

如何使用Fail2ban要檢查當前啟用了哪些Jails ,請使用以下命令:

sudofail2ban-clientstatus以下是響應示例:

Status

|-Numberofjail:2

`-Jaillist:nginx-http-auth,sshd如您所見,服務器上啟用了nginx-http-auth 和sshd Jails 。如果你想檢查任何Jail參數的值,你不需要打開配置文件;只需使用以下命令:

image.png

下面的代碼示例向我們展示了sshd Jail maxretry 等於5:

sudofail2ban-clientgetsshdmaxretry5如果Jail超過其失敗身份驗證嘗試的限制,Fail2ban 將禁止在Jail配置中為IP 地址指定的端口。要檢查Jail狀態,請使用以下命令:

image.png

下面是一個響應示例,向我們展示了兩個IP 地址當前被禁止進行SSH 訪問:

Statusforthejail:sshd

|-Filter

||-Currentlyfailed:0

||-Totalfailed:25

|`-Filelist:/var/log/auth.log

`-Actions

|-Currentlybanned:2

|-Totalbanned:5

`-BannedIPlist:192.168.10.107192.168.10.115如果您嘗試在您的IP 在禁止列表中時訪問服務器,您會收到如下所示的“連接被拒絕”錯誤:

ssh:connecttohost192.168.10.105port22:Connectionrefused如果IP 地址被任何HTTP 服務器Jail禁止,錯誤將類似於:

curl:(7)Failedtoconnectto192.168.10.105port80:Connectionrefused您還可以使用以下命令手動將任何IP 地址添加到禁止列表:

image.png

這是一個例子:

sudofail2ban-clientsetnginx-http-authbanip10.100.1.210要手動取消禁止IP 地址,請使用以下命令:

image.png

這是一個例子:

sudofail2ban-clientsetnginx-http-authunbanip10.100.1.210考慮到這一點,讓我們開始在Fail2ban 中配置通知。

如何配置Viber 聊天機器人以接收Fail2ban 通知如果要監控Fail2ban 活動,請使用以下三個步驟配置實時活動通知:

配置您要使用的任何通知服務

準備Fail2ban 動作配置文件

更新jail.local 文件中的action參數值

Fail2ban 具有使用電子郵件服務的配置。您需要做的就是在服務器上配置服務。

但是,如果您想通過Viber 等消息服務獲取通知怎麼辦?讓我們討論如何配置它!

首先,要將Viber 用作通知服務,您需要創建一個Viber 聊天機器人。您可以在Viber API 文檔頁面上找到有關Viber 聊天機器人設置和配置的文檔。

一旦您的聊天機器人準備就緒,請務必執行以下步驟:

1. 獲取Viber 聊天機器人的身份驗證令牌。您可以在Viber 管理面板頁面上找到它。

2.在訂閱Viber 聊天機器人的所有用戶列表中找到您的用戶ID。為此,請使用以下HTTP 請求:

image.png

響應將向您顯示成員列表,如下例所示:

image.png

選擇所需成員的ID 並複制。

現在,您可以開始配置Fail2ban。轉到/etc/fail2ban/action.d 文件夾,其中包含所有可能的Fail2ban 操作的配置。

為Viber 通知創建一個新的配置文件。我們將其命名為viber_notifications.conf。現在將以下內容添加到文件中:

image.png

讓我們弄清楚上面的字符串是什麼意思以及我們可以配置什麼:

actionban和actionunban參數描述了Fail2ban禁止或取消禁止可疑IP 地址時需要執行的操作。在我們的例子中,HTTP 請求會將消息從您的Viber 聊天機器人發送給您指定的用戶。

image.png

sender為配置通知發送者名稱的參數。在我們的示例中,我們使用名稱“Fail2ban”。

type是幫助您配置消息類型的參數。您可以使用Viber 發送不同的消息類型。在我們的示例中,我們使用文本類型。

image.png

name=default是一個字符串,表示將動態分配Jail名稱

我們的下一步是配置jail.local。為此,您需要在必要的Jail部分添加一個操作參數或更新[DEFAULT]部分中的默認參數。該參數應包含兩個操作:第一個用於IP 禁止,第二個用於Viber 通知。

這是使用action參數的示例

action=%(action_)s

viber_notifications注意:%(action_)s是默認操作值。此操作將禁止IP 地址。讓我們將Viber 操作配置名稱“viber_notifications”添加到第二個字符串。

現在,由於對jail.conf 文件進行了更改,您需要重新加載Fail2ban 客戶端並重新啟動服務:

sudofail2ban-clientreload

systemctlrestartfail2ban聊天機器人將如下所示:

screenshot-3-Fail2ban-notifications-in-a-viber-chatbot.jpg

屏幕截圖3. Viber 聊天機器人中的Fail2ban 通知

配置完成。現在您可以使用Viber 聊天機器人實時監控Fail2ban 活動!

結論密碼破解攻擊是對任何應用程序的嚴重威脅。惡意行為者使用不同的方法來未經授權訪問用戶帳戶並竊取用戶的敏感數據。

為了保護您的應用程序免受此類威脅,請應用嚴格的身份驗證策略並使用Fail2ban 等服務設置可靠的密碼破解保護。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...