Fail2ban 是一個用 Python 編寫的開源安全框架,可以保護服務器免受 蠻力攻擊. 它會掃描日誌文件並禁止嘗試登錄失敗的 IP 地址。 它的工作原理是更新防火牆以在可配置的時間段內拒絕來自這些 IP 地址的新連接。
默認情況下,Fail2ban 使用 Iptables 並且它可以與其他防火牆一起使用。 Fail2ban 支持 IPv4 和 IPv6。
默認情況下,Fail2ban 配置為監控 SSH 登錄嘗試 並且可以監控其他日誌文件,例如 Apache、vsftpd 和 Postfix 等。
在本教程中,我將帶您了解如何安裝和配置 禁止失敗 在 Ubuntu 20.04。
在 Ubuntu 上安裝 Fail2ban
首先,打開您的終端並更新軟件包列表。
$ sudo 適當更新
Fail2Ban 已經打包在大多數 Linux 發行版中。 要使用 APT 包管理器安裝 fail2ban,請運行:
$ sudo apt安裝fail2ban
安裝後,通過以下方式驗證它是否正在運行:
$ sudo systemctl 狀態 fail2ban
從輸出中,我們可以看到fail2ban 服務處於活動狀態並按預期運行。

要檢查 fail2ban 進程正在運行,請鍵入:
$ sudo ps -efww | egrep fail2ban
輸出:
根 1310843 1 0 11:17 ? 00:00:02 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
偉大的。 讓我們大致了解與 Fail2ban 相關的配置文件,以及如何將設置調整為黑名單或白名單 IP 地址。
配置文件概覽
Fail2ban 的配置文件位於 /etc/fail2ban
目錄如圖。

主要的配置文件是 /etc/fail2ban/jail.conf
和 /etc/fail2ban/jail.d/defaults-debian.conf
.
無論您做什麼,都不建議修改這些文件,因為在更新 fail2ban 包時它們很有可能被覆蓋。
作為一種變通方法,配置 Fail2ban 的推薦方法是創建 jail.conf
歸檔到 jail.local
然後定義您自己的設置。 您不必包括來自 jail.conf
文件,只有那些你想覆蓋。
所以,讓我們首先創建 jail.local
配置文件如下。
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
現在,使用您最喜歡的文本編輯器打開該文件。 在這裡,我使用的是 vim 編輯器。
$ sudo vim /etc/fail2ban/jail.local
將 IP 地址列入白名單
使用 ignoreip
指令,您可以排除被禁止的 IP 地址、IP 範圍或整個子網。 您可以在此處添加要列入白名單或允許訪問的遠程計算機的 IP 地址。 可以使用空格或逗號添加多個 IP。
為了 example, 將 IP 地址列入白名單 192.168.2.50 , 192.168.2.100 添加條目如下。

禁止設置
禁止條件由以下參數定義:
- 班時間
- 找時間
- 最大重試
班時間 – 這是禁止或拒絕 IP 地址嘗試重新連接服務器的時間段。 默認情況下,這設置為 10 分鐘,但您可以根據自己的喜好隨意設置。
找時間 – 這是實施禁令之前失敗登錄嘗試之間的持續時間。 這被設置為10分鐘。 這意味著,如果您嘗試 SSH 登錄並且失敗到達 最大的 值在 10 分鐘內,然後您正在連接的 IP 將被禁止。
最大重試 – 這表示在禁止 IP 之前嘗試連接失敗的最大次數。 B 默認設置為 5 秒,這應該沒問題,但我更喜歡 3 秒以盡量減少連接嘗試的轟炸。

電子郵件通知
Fail2ban 擁有在 IP 地址被禁止後發送電子郵件警報的能力。 要發送和接收電子郵件,您需要安裝和配置 SMTP 服務器。 要使用電子郵件通知功能,請添加以下行
動作 = %(action_mw)s
參數 %(action_mw)s
禁止可疑 IP 地址並發送電子郵件至 admin 帶有詳細的 whois 報告。 要包括日誌消息,請將參數設置為 %(action_mwl)s
.
另外定義發送電子郵件地址以及收件人。

Fail2ban監獄
Fail2ban 的作案手法使用了監獄的概念。 也就是說,如果有問題的 IP 地址嘗試登錄或訪問服務失敗,它將被置於“監獄”中並且無法發起連接,直到 班時間 過去了。
監獄,簡單來說,就是一個帶有過濾器和動作的服務。 Fail2ban 查看日誌條目,一旦確定匹配的日誌條目並滿足條件,就會實施操作。
SSH jail 通常默認啟用,以限制來自可疑 IP 地址的惡意 SSH 連接。 要為另一個服務啟用監獄,只需添加 啟用 = 真 監獄標題後的屬性。 您還可以提供我們之前看到的禁止設置。

Fail2ban 客戶端
Fail2ban 提供了一個命令行工具來與 Fail2ban 交互,稱為 fail2ban 客戶端. 您可以執行無數任務,包括禁止和取消禁止 IP 地址。
要檢查 Fail2ban 的狀態並查看是否有任何禁止的 IP 或違反的過濾器,請運行以下命令:
$ sudo fail2ban 客戶端狀態 sshd
下面的輸出確認在 SSH 登錄嘗試失敗後是否存在被禁止或列入黑名單的 IP 地址。 IP 地址當前在 SSH 監獄中。

您還可以過濾 fail2ban.log 文件以列出所有被禁止的 IP 地址:
$ sudo zgrep ‘禁止’ /var/log/fail2ban.log*
輸出:
2021-04-29 11:17:55,081 fail2ban.actions [1310843]: 注意 [sshd] 禁止 117.221.69.37 2021-04-29 11:17:55,123 fail2ban.actions [1310843]: 注意 [sshd] 禁令 49.233.251.133 2021-04-29 11:17:55,131 fail2ban.actions [1310843]: 注意 [sshd] 禁止 106.52.93.202 2021-04-29 11:17:55,139 fail2ban.actions [1310843]: 注意 [sshd] 禁令 222.187.232.205 2021-04-29 11:17:55,147 fail2ban.actions [1310843]: 注意 [sshd] Ban 222.187.239.107
要取消禁止列入黑名單的 IP 地址,請運行以下命令:
$ sudo fail2ban-client 設置 sshd unbanip 192.168.2.102
現在再次驗證Fail2ban的狀態,這一次,被禁止的IP不再註冊。

要禁止 IP 地址,請鍵入:
$ sudo fail2ban-client 設置 sshd banip 192.168.2.102
如需更多命令行選項,請運行以下命令:
$ fail2ban-client -h

結論
請記住,Fail2ban 不能替代用於保護系統的防火牆和其他安全措施。 它只是一個額外的安全層,為您的服務器提供額外的保護層,以抵禦暴力攻擊,尤其是來自自動化機器人和腳本的暴力攻擊。 關於如何在 Ubuntu 20.04 上安裝和配置 Fail2ban 的教程到此結束。