如何使用 fail2ban 保護您的 Linux 服務器
已發表: 2022-01-29 使用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]。 不過,請注意找到實際的部分。 這些標籤也出現在描述它們的部分的頂部附近,但這不是我們想要的。
您會在第 40 行附近找到 [DEFAULT] 部分。這是一個包含大量評論和解釋的長部分。
向下滾動到第 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
監控。 如果默認設置與您希望應用於監獄的設置不匹配,您可以為bantime
、 findtime
和maxretry
設置特定值。
向下滾動到第 280 行,您將看到 [sshd] 部分。
您可以在此處設置 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 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦