如何使用 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 查看時的配置文件示例。

主要選項:

第 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