如何使用 fail2ban 保護您的 Linux 服務器

已發表: 2022-01-29
在 Ubuntu 風格的 Linux 筆記本電腦上運行的風格化終端窗口。
Fatmawati Achmad Zaenuri/Shutterstock

使用fail2ban ,您的 Linux 計算機會自動阻止連接失敗過多的 IP 地址。 這是自我調節的安全性! 我們將向您展示如何使用它。

安全 安全 安全

溫莎公爵夫人沃利斯·辛普森曾經說過一句名言:“你永遠不能太富有或太瘦。” 我們已經為我們的現代互聯世界更新了這一點:您永遠不會太小心或太安全。

如果您的計算機接受傳入的連接請求,例如安全外殼 (SSH) 連接,或者充當 Web 或電子郵件服務器,您需要保護它免受暴力攻擊和密碼猜測者的攻擊。

為此,您需要監控無法進入帳戶的連接請求。 如果他們在短時間內多次未能進行身份驗證,則應禁止他們進行進一步的嘗試。

實際上可以實現的唯一方法是自動化整個過程。 通過一些簡單的配置, fail2ban將為您管理監控、禁止和取消禁止。

廣告

fail2ban與 Linux 防火牆iptables集成。 它通過向防火牆添加規則來強制禁止可疑的 IP 地址。 為了保持這個解釋整潔,我們使用帶有空規則集的iptables

當然,如果您擔心安全性,您可能有一個配置了完善的規則集的防火牆。 fail2ban只添加和刪除自己的規則——您的常規防火牆功能將保持不變。

我們可以使用以下命令查看我們的空規則集:

 sudo iptables -L 

相關: iptables 初學者指南,Linux 防火牆

安裝fail2ban

在我們用來研究本文的所有發行版上安裝fail2ban都很簡單。 在 Ubuntu 20.04 上,命令如下:

 sudo apt-get install fail2ban 

在 Fedora 32 上,鍵入:

 須藤 dnf 安裝 fail2ban 

在 Manjaro 20.0.1 上,我們使用了pacman

 sudo pacman -Sy fail2ban 

配置fail2ban

fail2ban安裝包含一個名為 jail.conf 的默認配置文件。 升級fail2ban時會覆蓋此文件,因此如果我們對此文件進行自定義,我們將丟失更改。

相反,我們會將 jail.conf 文件複製到一個名為 jail.local 的文件中。 通過將我們的配​​置更改放在 jail.local 中,它們將在升級過程中持續存在。 fail2ban自動讀取這兩個文件。

這是複製文件的方法:

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 

現在在您喜歡的編輯器中打開文件。 我們將使用gedit

 sudo gedit /etc/fail2ban/jail.local
廣告

我們將在文件中查找兩個部分:[DEFAULT] 和 [sshd]。 不過,請注意找到實際的部分。 這些標籤也出現在描述它們的部分的頂部附近,但這不是我們想要的。

/etc/fail2ban/jail.local 在 gedit 窗口中打開。

您會在第 40 行附近找到 [DEFAULT] 部分。這是一個包含大量評論和解釋的長部分。

/etc/fail2ban/jail.local 在 gedit 窗口中打開並滾動到第 89 行。

向下滾動到第 90 行左右,您會發現以下四個您需要了解的設置:

  • ignoreip:永遠不會被禁止的 IP 地址白名單。 他們有一張永久的“越獄免費”卡。 默認情況下,本地主機 IP 地址 ( 127.0.0.1 ) 及其 IPv6 等效地址 ( ::1 ) 都在列表中。 如果還有其他您知道永遠不應禁止的 IP 地址,請將它們添加到此列表中,並在每個 IP 地址之間留一個空格。
  • bantime: IP 地址被禁止的持續時間(“m”代表分鐘)。 如果您鍵入一個沒有“m”或“h”(小時)的值,它將被視為秒。 值 -1 將永久禁止 IP 地址。 要非常小心,不要將自己永久鎖定。
  • findtime:太多失敗的連接嘗試將導致 IP 地址被禁止的時間量。
  • maxretry: “太多失敗嘗試”的值。

如果來自同一 IP 地址的連接在 findtime 期間進行maxretry失敗的連接嘗試,則在findtime期間將被bantime 。 唯一的例外是ignoreip列表中的 IP 地址。

fail2ban將 IP 地址放入監獄一段時間。 fail2ban支持許多不同的監獄,每個監獄代表持有適用於單一連接類型的設置。 這使您可以對各種連接類型進行不同的設置。 或者您可以讓fail2ban僅監控一組選定的連接類型。

您可能已經從 [DEFAULT] 部分名稱中猜到了,但我們查看的設置是默認設置。 現在,讓我們看看 SSH 監獄的設置。

相關:如何在 Linux 上使用 gedit 以圖形方式編輯文本文件

配置監獄

Jails 允許您將連接類型移入和移出fail2ban's監控。 如果默認設置與您希望應用於監獄的設置不匹配,您可以為bantimefindtimemaxretry設置特定值。

廣告

向下滾動到第 280 行,您將看到 [sshd] 部分。

/etc/fail2ban/jail.local 在 gedit 窗口中打開並滾動到第 280 行。

您可以在此處設置 SSH 連接監獄的值。 要將這個監獄包括在監控和禁止中,我們必須輸入以下行:

 啟用 = 真

我們也輸入這一行:

 最大重試 = 3

默認設置為 5,但我們希望對 SSH 連接更加謹慎。 我們將其降為三個,然後保存並關閉文件。

我們將此監獄添加到fail2ban's監控中,並覆蓋了其中一個默認設置。 監獄可以使用默認設置和監獄特定設置的組合。

啟用fail2ban

到目前為止,我們已經安裝並配置了fail2ban 。 現在,我們必須使其能夠作為自動啟動服務運行。 然後,我們需要對其進行測試以確保它按預期工作。

廣告

要啟用fail2ban作為服務,我們使用systemctl命令:

 sudo systemctl 啟用 fail2ban

我們也用它來啟動服務:

 sudo systemctl start fail2ban 

我們也可以使用systemctl服務的狀態:

 sudo systemctl status fail2ban.service 

一切看起來都很好——我們得到了綠燈,所以一切都很好。

讓我們看看fail2ban是否同意:

 sudo fail2ban-客戶端狀態

這反映了我們設置的內容。 我們啟用了一個名為 [sshd] 的監獄。 如果我們在前面的命令中包含監獄的名稱,我們可以更深入地查看它:

 sudo fail2ban-client 狀態 sshd 

這列出了失敗的數量和被禁止的 IP 地址。 當然,目前所有的統計數據都是零。

測試我們的監獄

在另一台計算機上,我們將向我們的測試機器發出 SSH 連接請求,並故意輸入錯誤的密碼。 每次連接嘗試時,您都會嘗試三次以正確獲取密碼。

廣告

maxretry值將在三次失敗的連接嘗試後觸發,而不是三次失敗的密碼嘗試。 因此,我們必須輸入錯誤的密碼三次才能使連接嘗試失敗。

然後,我們將再次嘗試連接並再次輸入錯誤的密碼三遍。 第三次連接請求的第一次錯誤密碼嘗試應該觸發fail2ban.

在第三次連接請求的第一個錯誤密碼之後,我們沒有得到遠程機器的響應。 我們沒有得到任何解釋; 我們只是冷遇。

您必須按 Ctrl+C 才能返回命令提示符。 如果我們再試一次,我們會得到不同的響應:

 ssh [email protected] 

以前,錯誤消息是“權限被拒絕”。 這一次,連接被徹底拒絕。 我們是不受歡迎的人。 我們被禁止了。

讓我們再看一下 [sshd] 監獄的細節:

 sudo fail2ban-client 狀態 sshd 

廣告

3次失敗,1個IP地址(192.168.4.25)被封禁。

正如我們之前提到的, fail2ban通過向防火牆規則集中添加規則來強制執行禁令。 讓我們再看一下規則集(之前它是空的):

 sudo iptables -L 

INPUT 策略中添加了一條規則,將 SSH 流量發送到f2b-sshd鏈。 f2b-sshd鏈中的規則拒絕來自 192.168.4.25 的 SSH 連接。 我們沒有更改bantime的默認設置,因此,在 10 分鐘內,該 IP 地址將被取消禁止並可以發出新的連接請求。

如果您設置了更長的禁止持續時間(例如幾個小時),但希望允許某個 IP 地址更快地發出另一個連接請求,您可以提前假釋。

我們鍵入以下內容來執行此操作:

 sudo fail2ban-client 設置 sshd unbanip 192.168.5.25 

在我們的遠程計算機上,如果我們發出另一個 SSH 連接請求並輸入正確的密碼,我們將被允許連接:

 ssh [email protected] 

簡單有效

越簡單通常越好, fail2ban是解決棘手問題的優雅解決方案。 它只需要很少的配置,幾乎不會給您或您的計算機帶來任何操作開銷。

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦