概述SSHGuard是一种入侵防御实用程序,它可以解析日志并使用系统防火墙自动阻止行为不端的IP地址(或其子网)。SSHGuard最初旨在为OpenSSH服务提供额外的保护层,它还保护范围广泛的服务,例如Vsftpd和Postfix。它可以识别多种日志格式,包括Syslog、Syslog-ng和原始日志文件。SSHGuard与Fail2ban非常相似,不同之处在于它是用C编写的(Fail2ban是用Python编写的),更轻且提供的功能更少。在本指南中,我们将演示如何安装和配置SSHGuard以阻止Linux服务器中的SSH暴力攻击。第1步:在Linux上安装SSHGuard在Debian/Ubuntu上安装SSHGuard首先,更新包列表,然后使用apt包管理器从默认存储库安装SSHGuard。$sudoaptupdate$sudoaptinstallsshguard安装后,SSHGuard服务自动启动,可以通过以下命令验证:$sudosystemctlstatussshguard在Yum/RHEL系统上安装SSHGuard对于基于RHEL的发行版,比如CentOS,先安装EPEL存储库。$sudoyuminstallepel-release或$sudodnfinstallepel-release安装好EPEL后,继续使用dnf包管理器安装SSHGuard。$sudodnfinstallsshguard安装后启动,设置SSHGuard随系统自动启动。$sudosystemctlstartsshguard$sudosystemctlenablesshguard查看SSHGuard的运行状态。$sudosystemctlstatussshguard步骤2:Linux上的SSHGuard配置SSHGuard主动监控/var/log/auth.log、/var/log/securesystemd日志和syslog-ng日志文件以查找失败的登录尝试。对于每次不成功的登录尝试,远程主机将被禁止一段时间,默认设置为120秒。之后,每次连续失败的登录尝试,禁令时间都会增加1.5倍。禁止违规主机的时间和其他参数在sshguard.conf文件中指定。您可以使用vim编辑器访问配置文件。$sudovim/etc/sshguard/sshguard.conf在基于RHEL的发行版上,配置文件位于以下路径。$sudovim/etc/sshguard.conf这是从Ubuntu/Debian查看时的示例配置文件。主要选项:BACKEND:指令指向后端可执行文件的完整路径。在这个例子中,我们看到IPtables被设置为默认的防火墙后端。THRESHOLD:指令在攻击分数超过指定值时阻止攻击者。BLOCK_TIME:该选项是在每次连续登录尝试失败后阻止攻击者的秒数。默认情况下,它在第一次尝试后设置为120。这会随着每次连续失败的登录尝试而增加。DETECTION_TIME:该选项是指攻击者在他的分数被重置之前被系统注册或记住的时间量(以秒为单位)。WHITELIST_file:包含不应列入黑名单的主机的白名单文件的完整路径的选项。第三步:配置SSHGuard阻断SSH暴力破解攻击为了防御暴力破解攻击,您需要配置以下防火墙来使用sshguard。使用UFW阻止SSH攻击如果您在Ubuntu/Debian系统上安装并启用了UFW,请修改/etc/ufw/before.rules文件。$sudovimetc/ufw/before.rules$sudovimetc/ufw/before.rules在“allowallonloopback”部分后添加以下行。#allowallonloopback-Aufw-before-input-ilo-jACCEPT-Aufw-before-output-olo-jACCEPT#将sshd的控制权交给sshguard:sshguard-[0:0]-Aufw-before-input-ptcp--dport22-jsshguard保存文件并重启UFW。$sudosystemctlrestartufw现在尝试使用错误的凭据从不同的系统登录服务器,并注意在第一次登录尝试失败后您将被锁定120秒。您可以通过检查auth.log日志文件来验证这一点。$sudotail-f/var/log/auth.log在下一次失败的日志尝试之后,阻塞时间增加到240秒,然后是480秒,然后是960秒,依此类推。使用Firewalld阻止SSH攻击如果您正在运行firewalld,请确保它已设置并启用。然后执行以下命令以在您的首选区域上启用sshguard。$sudofirewall-cmd--permanent--zone=public--add-rich-rule="rulesourceipset=sshguard4drop"要应用更改,请重新加载firewalld和sshguard。$sudofirewall-cmd--reload$sudosystemctlrestartsshguard然后验证规则如下:$sudofirewall-cmd--info-ipset=sshguard4使用iptables来阻止SSH攻击如果你还在使用Iptables,首先,创建在Iptablesforsshguard一个新的链规则来阻止不需要的访问者。#iptables-Nsshguard接下来,更新INPUT链以将流量定向到sshguard并阻止来自恶意方的所有流量。#iptables-AINPUT-jsshguard要阻止滥用者访问特定端口,例如SSH、POP和IMAP,请运行以下命令:#iptables-AINPUT-mmultiport-ptcp--destination-ports22,110,143-jsshguard最后,保存规则使更改生效。#iptables-save>/etc/iptables/iptables.rules第4步:如何将SSH阻止的主机列入白名单要将阻止的主机列入白名单,只需在白名单文件中指定其主机名或IP地址即可:/etc/sshguard/whitelist-Ubuntu/Debian/etc/sshguard.whitelist-基于RHEL的发行版之后,一定要重新启动sshguard守护进程和防火墙后端以应用更改。总结在本指南中,我们演示了如何在Linux系统上使用SSHGuard阻止SSHBruteforce攻击。
