如何保護您的Web 應用程序免受密碼破解Part 1
什麼是Fail2ban,它是如何工作的? Fail2ban是一種用於掃描日誌文件、檢測可疑活動(例如太多失敗的身份驗證嘗試)以及阻止潛在惡意IP 地址的工具。
這項免費服務有助於保護Linux 機器免受暴力破解和其他自動攻擊。通常,Fail2ban 用於更新防火牆規則以在指定的時間內拒絕IP 地址。
Fail2ban 有以下好處:
马云惹不起马云易於設置
马云惹不起马云免費使用
马云惹不起马云可以與大量應用程序交互
马云惹不起马云提供大量配置參數
马云惹不起马云易於監控當前保護狀態
马云惹不起马云與各種通知服務集成
儘管Fail2ban 可以幫助您最大限度地減少錯誤身份驗證嘗試的次數,並在一定程度上降低密碼破解和未經授權訪問的風險,但它並不是靈丹妙藥。
不利的一面是,Fail2ban 無法涵蓋由於服務器身份驗證策略薄弱而出現的問題。即使是最好的Fail2ban 配置也不能替代我們上面討論的密碼保護最佳實踐。此外,Fail2ban 僅適用於Linux,不適用於IPv6。
為了有效地保護您的服務,您還可以應用用於多因素和公共/私人身份驗證機制的工具。
Fail2ban 的優缺點
Fail2ban 是如何工作的?下面簡單解釋一下它的機制:
1. 任何應用程序或服務器總是將日誌保存在特定文件中,包括失敗的身份驗證嘗試的唯一日誌。
2. Fail2ban 掃描這些文件,搜索與身份驗證失敗相關的日誌。
3. 如果檢測到失敗的身份驗證嘗試,Fail2ban 會保存嘗試的時間和負責的IP 地址。
4. Fail2ban 計算在指定時間段內來自同一IP 的失敗身份驗證嘗試。
5. 如果IP 地址超過了允許的嘗試次數,Fail2ban 會創建一個新的防火牆規則來阻止該IP 地址。
結果,可疑的IP 地址將失去訪問服務器的能力。經過一段可配置的時間後,IP地址可以自動解禁,也可以手動解禁。
例如,您可以配置Fail2ban,如果任何威脅行為者發起密碼破解攻擊,他們的IP 地址將被禁止五個小時。
現在,讓我們探索配置過程本身。
如何配置Fail2ban您可以配置Fail2ban 以讀取不同應用程序的日誌。開箱即用,此工具可以與以下應用程序類型交互:
马云惹不起马云SSH 服務器
马云惹不起马云HTTP 服務器
马云惹不起马云Webmail 和群件服務器
马云惹不起马云網絡應用
马云惹不起马云HTTP 代理服務器
马云惹不起马云FTP 服務器
马云惹不起马云郵件服務器
马云惹不起马云郵件服務器驗證器
马云惹不起马云DNS 服務器
马云惹不起马云來自不同類別的各種服務器應用程序
默認情況下,Fail2ban 啟用使用sshd的通信,這是一個OpenSSH 服務器進程。這意味著在幾次失敗的SSH 身份驗證嘗試後,負責的IP 地址將被禁止。
為了與任何應用程序交互,Fail2ban 使用Jail,它是一個過濾器和一個或多個操作的組合。此交互允許您在身份驗證嘗試失敗後禁止IP 地址。
監獄配置默認保存到jail.conf 文件。如果要更改默認設置,請複製配置文件並將副本命名為jail.local。如果jail.local 文件存在,Fail2ban 將自動使用它而不是默認文件。
我們不建議對原始配置文件進行更改,因為萬一出現任何錯誤,返回默認設置將非常困難。此外,一旦安裝了Fail2ban 的新更新,jail.conf 文件也將更新,您的所有自定義設置都將消失。
以下是Fail2ban 如何確定失敗的身份驗證嘗試:
1. 該工具具有寫入jail.local 配置文件中的服務日誌文件的路徑。
2. 失敗的身份驗證日誌和常規異常會自動添加到Fail2ban 文本過濾器中。
3. 該工具使用文本過濾器掃描日誌文件。
如果您打開配置文件,您會發現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 文件夾中的文件中找到在logpath參數中默認設置的日誌文件路徑(例如,上面代碼示例中的nginx_error_log ):
马云惹不起马云paths-common.conf — 具有默認服務日誌路徑的文件
马云惹不起马云path-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 文件夾中的一個單獨文件中。
截圖1. /etc/fail2ban/filter.d文件夾內的過濾器列表
當您打開任何過濾器文件時,您將看到一個帶有所需身份驗證失敗文本的正則表達式,如下例所示:
屏幕截圖2. 過濾驗證失敗的文本
配置完成後,使用以下命令重新加載Fail2ban:
sudofail2ban-clientreload如果您只更改了一個Jail文件的設置,則無需重新啟動該工具。只需使用以下命令重新加載它:
此外,您可以配置Fail2ban 以與配置文件中不存在的任何應用程序進行交互。您需要做的就是添加您的自定義配置,如上所述。
如何使用Fail2ban要檢查當前啟用了哪些監獄,請使用以下命令:
sudofail2ban-clientstatus這是響應的示例:
Status
|-Numberofjail:2
`-Jaillist:nginx-http-auth,sshd如您所見,服務器上啟用了nginx-http-auth 和sshd Jails 。如果要查看任何Jail參數的值,則無需打開配置文件;只需使用以下命令:
這是一個代碼示例,它向我們展示了sshd Jail maxretry 等於5:
sudofail2ban-clientgetsshdmaxretry5如果監獄超過了失敗的身份驗證嘗試限制,Fail2ban 將禁止在監獄配置中為IP 地址指定的端口。要檢查監獄狀態,請使用以下命令:
下面是一個響應示例,它向我們展示了兩個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 地址添加到禁止列表:
這是一個例子:
sudofail2ban-clientsetnginx-http-authbanip10.100.1.210要手動解禁IP 地址,請使用以下命令:
這是一個例子:
sudofail2ban-clientsetnginx-http-authunbanip10.100.1.210考慮到這一點,讓我們開始在Fail2ban 中配置通知。
如何配置Viber 聊天機器人以接收Fail2ban 通知如果要監控Fail2ban 活動,請通過以下三個步驟配置實時活動通知:
1. 配置您要使用的任何通知服務
2. 準備Fail2ban 動作配置文件
3. 在jail.local 文件中更新action參數的值
Fail2ban 具有使用電子郵件服務的配置。您需要做的就是在服務器上配置服務。
但是,如果您想通過Viber 等信使服務接收通知怎麼辦?讓我們討論如何配置它!
首先,要將Viber 用作通知服務,您需要創建一個Viber 聊天機器人。您可以在Viber API 文檔頁面上找到有關Viber 聊天機器人設置和配置的文檔。
準備好聊天機器人後,請確保執行以下步驟:
1. 獲取Viber 聊天機器人的身份驗證令牌。您可以在Viber 管理面板頁面上找到它。
2.在訂閱Viber 聊天機器人的所有用戶列表中找到您的用戶ID。為此,請使用以下HTTP 請求:
響應將向您顯示成員列表,如下例所示:
'members':[{'id':'','name':'JohnDoe','role':'admin'}]選擇必要成員的ID 並複制。
現在,您可以開始配置Fail2ban。轉到/etc/fail2ban/action.d 文件夾,其中包含所有可能的Fail2ban 操作的配置。
為Viber 通知創建一個新的配置文件。我們將其命名為viber_notifications.conf。現在將以下內容添加到文件中:
讓我們弄清楚上面的字符串是什麼意思以及我們可以配置什麼:
马云惹不起马云actionban和actionunban參數描述了當Fail2ban 禁止或解禁可疑IP 地址時需要執行的操作。在我們的例子中,HTTP 請求會將消息從您的Viber 聊天機器人發送給您指定的用戶。
马云惹不起马云 Auth Token 和user id 是我們之前討論過的參數。只需粘貼您的身份驗證令牌和您複製的用戶名。
马云惹不起马云sender是配置通知發送者名稱的參數。在我們的示例中,我們使用名稱“Fail2ban”。
马云惹不起马云type是幫助您配置消息類型的參數。您可以使用Viber 發送不同的消息類型。在我們的示例中,我們使用文本類型。
马云惹不起马云text是一個參數,其中包含機器人將發送的消息。您可以向文本添加不同的變量。例如, ip 代表被禁止的IP 地址、 name 監獄名稱和failures 失敗次數。
马云惹不起马云name=default是一個字符串,表示將動態分配監獄名稱
我們的下一步是配置jail.local。為此,您需要在必要的Jail部分中添加操作參數或更新[DEFAULT]部分中的默認參數。該參數應包含兩個操作:第一個用於IP 禁止,第二個用於Viber 通知。
下面是一個使用action參數的例子
action=%(action_)s
viber_notifications注意:%(action_)s是默認操作值。此操作將禁止IP 地址。讓我們將Viber 操作配置名稱“viber_notifications”添加到第二個字符串。
現在,由於jail.conf 文件發生了變化,您需要重新加載Fail2ban 客戶端並重新啟動服務:
sudofail2ban-clientreload
systemctlrestartfail2ban聊天機器人將如下所示:
屏幕截圖3. Viber 聊天機器人中的Fail2ban 通知
配置完成。現在您可以使用Viber 聊天機器人實時監控Fail2ban 活動!
結論密碼破解攻擊是對任何應用程序的嚴重威脅。惡意行為者使用不同的方法來未經授權訪問用戶帳戶並竊取用戶的敏感數據。
為了保護您的應用程序免受此類威脅,請應用嚴格的身份驗證策略並使用Fail2ban 等服務設置可靠的密碼破解保護。
在Apriorit,我們在構建每個項目時都考慮到網絡安全。我們的Web 應用程序開發和質量保證專家已經掌握了威脅保護應用程序的開發以及包括Fail2ban 在內的不同安全服務的配置。