如何使用 SSHGUARD 阻止 SSH 暴力攻击
SSHGuard是一个开源守护程序,可保护主机免受暴力攻击。它通过监控和汇总系统日志、检测攻击以及使用Linux 防火墙后端之一阻止攻击者来实现此目的:iptables、FirewallD、pf和ipfw。
SSHGuard最初旨在为OpenSSH 服务提供额外的保护层,但它还可以保护Vsftpd和Postfix等多种服务。它可以识别多种日志格式,包括 Syslog、Syslog-ng 和原始日志文件。
[ 你可能还喜欢:如何保护和强化 OpenSSH 服务器]
SSHGuard与Fail2ban非常相似,只是它是用C编写的(Fail2ban是用Python编写的),更轻量,并且提供的功能较少。
在本指南中,我们将演示如何安装和配置SSHGuard以阻止Linux 服务器中的SSH暴力攻击。
步骤 1:在 Linux 上安装 SSHGuard
我们首先在 Linux 上安装SSHGuard。
在 Debian/Ubuntu 上安装 SSHGuard
首先,更新包列表,然后使用apt 包管理器从默认存储库安装SSHGuard。
$ sudo apt update $ sudo apt install sshguard
安装后,SSHGuard服务会自动启动,您可以使用以下命令进行验证:
$ sudo systemctl status sshguard
在 RHEL 系统上安装 SSHGuard
对于基于 RHEL 的发行版(例如CentOS、Rocky和AlmaLinux ),请首先按照以下命令安装EPEL存储库。
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm OR $ 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选项指向包含不应列入黑名单的主机的白名单文件的完整路径。/li>
步骤 3:配置 SSHGuard 以阻止 SSH 暴力攻击
为了抵御暴力攻击,您需要在以下防火墙上进行配置以与sshguard配合使用。
使用 UFW 阻止 SSH 攻击
如果您在Ubuntu / Debian系统上安装并启用了 UFW,请修改/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守护程序和防火墙后端以应用更改。
在本指南中,我们演示了如何使用 Linux 服务器中的SSHGuard守护程序阻止SSH暴力攻击。欢迎您提供反馈。