如何使用 SSHGUARD 阻止 SSH 暴力攻擊
概述
SSHGuard 是一個入侵防禦實用程序,它可以解析日誌並使用系統防火牆自動阻止行爲不端的 IP 地址(或其子網)。最初旨在爲 OpenSSH 服務提供額外的保護層,SSHGuard 還保護範圍廣泛的服務,例如 Vsftpd 和 Postfix。它可以識別多種日誌格式,包括 Syslog、Syslog-ng 和原始日誌文件。SSHGuard 與 Fail2ban 非常相似,只是它是用 C 編寫的(Fail2ban 是用 Python 編寫的),更輕巧,提供的功能更少。
在本指南中,我們將演示如何安裝和配置 SSHGuard 以阻止 Linux 服務器中的 SSH 暴力攻擊。
第一步:在 Linux 上安裝 SSHGuard
在 Debian/Ubuntu 上安裝 SSHGuard
首先,更新軟件包列表,然後使用 apt 軟件包管理器從默認存儲庫安裝 SSHGuard。
$ sudo apt update
$ sudo apt install sshguard
安裝後,SSHGuard 服務會自動啓動,您可以使用以下命令進行驗證:
$ sudo systemctl status sshguard
在 Yum/RHEL 系統上安裝 SSHGuard
對於基於 RHEL 的發行版,例如 CentOS,首先安裝 EPEL 存儲庫。
$ sudo yum install epel-release
或者
$ sudo dnf install epel-release
有了 EPEL,繼續使用 dnf 包管理器安裝 SSHGuard。
$ sudo dnf install sshguard
安裝後啓動並將 SSHGuard 設置爲隨系統自啓。
$ sudo systemctl start sshguard
$ sudo systemctl enable sshguard
檢查 SSHGuard 運行狀態。
$ sudo systemctl status sshguard
第 2 步:Linux 上的 SSHGuard 配置
SSHGuard 會主動監控 /var/log/auth.log、/var/log/secure systemd 日誌和 syslog-ng 日誌文件以查找失敗的登錄嘗試。
對於每次不成功的登錄嘗試,遠程主機將被禁止一段時間,默認設置爲 120 秒。此後,每次連續失敗的登錄嘗試,禁令時間都會增加 1.5 倍。
禁止違規主機的時間以及其他參數在 sshguard.conf 文件中指定。您可以使用 vim 編輯器訪問配置文件。
$ sudo vim /etc/sshguard/sshguard.conf
在基於 RHEL 的發行版上,配置文件位於以下路徑中。
$ sudo vim /etc/sshguard.conf
這是從 Ubuntu / Debian 查看時的配置文件示例。
主要選項:
-
BACKEND:指令指向後端可執行文件的完整路徑。在這個例子中,我們看到 IPtables 被設置爲默認的防火牆後端。
-
THRESHOLD:指令在攻擊者的攻擊分數超過指定值時阻止攻擊者。
-
BLOCK_TIME:選項是在每次連續失敗的登錄嘗試後阻止攻擊者的秒數。默認情況下,第一次嘗試後設置爲 120。這會隨着每次連續失敗的登錄嘗試而增加。
-
DETECTION_TIME:選項是指攻擊者在其得分被重置之前被系統註冊或記住的時間(以秒爲單位)。
-
WHITELIST_file:選項指向包含不應列入黑名單的主機的白名單文件的完整路徑。
第 3 步:配置 SSHGuard 以阻止 SSH 暴力攻擊
爲了抵禦暴力攻擊,您需要在以下防火牆上進行配置以使用 sshguard。
使用 UFW 阻止 SSH 攻擊
如果您在 Ubuntu / Debian 系統上安裝並啓用了 UFW,請修改 /etc/ufw/before.rules 文件。
$ sudo vim etc/ufw/before.rules
$ sudo vim etc/ufw/before.rules
在 “allow all on loopback” 部分之後添加以下行。
# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard
保存文件並重新啓動 UFW。
$ sudo systemctl restart ufw
現在嘗試使用錯誤的憑據從不同的系統登錄服務器,並注意在第一次登錄嘗試失敗後您將被鎖定 120 秒。
您可以通過檢查 auth.log 日誌文件來驗證這一點。
$ sudo tail -f /var/log/auth.log
在下一次失敗的日誌嘗試之後,阻塞時間增加到 240 秒,然後是 480 秒,然後是 960 秒,依此類推。
使用 Firewalld 阻止 SSH 攻擊
如果您正在運行 firewalld,請確保已設置並啓用它。然後執行以下命令以在您的首選區域上啓用 sshguard。
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"
要應用更改,請重新加載 Firewalld 和 sshguard。
$ sudo firewall-cmd --reload
$ sudo systemctl restart sshguard
然後驗證規則如下:
$ sudo firewall-cmd —-info-ipset=sshguard4
使用 iptables 阻止 SSH 攻擊
如果您仍在使用 Iptables,首先,在 Iptables 中爲 sshguard 創建一個新的鏈式規則,以阻止不需要的訪客。
# iptables -N sshguard
接下來,更新 INPUT 鏈以將流量引導至 sshguard 並阻止來自惡意方的所有流量。
# iptables -A INPUT -j sshguard
要阻止濫用者訪問特定端口,例如 SSH、POP 和 IMAP,請運行以下命令:
# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard
最後,保存規則以使更改生效。
# iptables-save > /etc/iptables/iptables.rules
第 4 步:如何將 SSH 阻止的主機列入白名單
要將被阻止的主機列入白名單,只需在白名單文件中指定其主機名或 IP 地址即可:
/etc/sshguard/whitelist - Ubuntu/Debian
/etc/sshguard.whitelist - RHEL-based distros
之後,請務必重新啓動 sshguard 守護程序和防火牆後端以應用更改。
來源:
https://www.toutiao.com/article/7090081998626423327/?log_from=5641103b723aa_1650851460117
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/yYgULi5fXenu1BA1LyGqvQ