SSHGuard是一个开源守护进程,它通过使用Linux防火墙后端之一(iptables、FirewallD、pf和ipfw)监控和聚合系统日志、检测攻击和阻止攻击者来实现保护Linux服务器免受暴力攻击。
最初旨在为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
在RHEL系统上安装SSHGuard
对于基于 RHEL 的发行版,例如CentOS、Rocky和AlmaLinux,首先按照以下命令安装EPEL存储库。
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm 或者 $ 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
第二步:在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:指向包含这些不应该是blacklisted./li主机白名单文件的完整路径。
第三步:配置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
第四步:如何将SSH阻止的主机列入白名单
要将被阻止的主机列入白名单,只需在位于以下位置的白名单文件中指定其主机名或IP地址即可:
/etc/sshguard/whitelist - Ubuntu/Debian /etc/sshguard.whitelist - RHEL-based distros
设置完成在之后,请务必重新启动sshguard守护程序和防火墙以使应用更改生效。
总结
以上简单介绍了在Linux 服务器中使用SSHGuard守护程序阻止SSH暴力攻击,设置过程仅供参考。
其实,在使用Linux服务器时候,网络攻击一直让很多站长很是头疼,验证威胁着网站的数据安全和正常运行,因此,平时我们只有不断的做好安全防护措施,才能保障Linux服务器的安全运行。