SDB:SSH 系统攻击防护
请参阅本文的页面以获取更多信息。
通用
SSH,或安全外壳,是一种流行的通过计算机网络提供对远程系统安全访问的方法。在某些情况下,这些网络可能不安全,或者更糟糕的是,连接到公共网络,例如互联网,这允许全球访问该系统。一种常见的攻击是找到在互联网上运行 SSH 服务的系统,并通过尝试成千上万、数十万甚至数百万次身份验证尝试来系统地猜测帐户名和密码,直到找到正确的帐户名和密码。这被称为暴力破解、系统性或穷举攻击。 类似地,攻击者利用网站中的漏洞来发起其他类型的攻击,例如药房黑客、DDoS 攻击和恶意重定向。
对于“黑帽”攻击者来说,完成这项任务的资源成本很低,因为他们可以廉价地访问大量被攻陷的“僵尸”计算机。
称职的系统管理员将通过更改 SSH 服务端口(从默认 TCP 端口 22)、大大限制可以进行身份验证的帐户数量和/或要求使用密钥身份验证而不是使用密码等方法来确保任何 SSH 系统的安全性。(请参阅 openSSH 公钥认证)但是,这些方法可能并非总是可行的,例如在组访问的 SSH 资源的情况下。
解决方案
在 openSUSE 和许多其他 Linux 发行版中,有方法可以限制对重复身份验证失败的 SSH 客户端系统的访问。除了解锁 SSH 服务或使用密钥身份验证而不是密码之外,最有效的方法之一是在主机防火墙上使用基于主机的防火墙,在发生多次失败后阻止对 SSH 服务的访问。
DenyHosts
DenyHosts 是一个 Python 程序,它通过将条目添加到 /etc/hosts.deny 来自动阻止 ssh 攻击。 还会通知 Linux 管理员有关违规主机、被攻击的用户和可疑登录的信息。DenyHosts 可从 openSUSE 存储库获得。
sshguard
sshguard 独立于 SSHD 守护程序和脚本工作。它开箱即用地监视多个系统日志。当发生多次无效的登录尝试时,将在您的防火墙中创建一个条目,以阻止未来的攻击者。虽然最初是为保护 SSH 服务器而创建的,但现在它支持许多其他协议服务器。
Sshguard 正在积极维护中。它支持 IPv6、白名单和日志身份验证,并与所有主要的防火墙系统接口。Sshguard 不可用在 openSUSE 存储库中。您可以按照 安装和配置 sshguard 上的说明进行安装和配置
sshdfilter
sshdfilter 尚未积极维护,但似乎在限制访问方面提供了更多选项,例如针对 root 帐户尝试、未知用户帐户尝试以及密码失败频率不同的时间。它也更难安装。
来自官方网站:sshdfilter 阻止对 ssh 守护程序的频繁暴力破解攻击,它通过直接读取 sshd 记录输出(或 syslog 输出)并生成 iptables(或 ipfw)规则来做到这一点,该过程足够快,可以在尝试任何密码之前阻止攻击。阻止策略由一个 blockrules 列表定义,主要由用户名或用户名类型定义。有两种安装路线,原始样式的 sshdfilter 会启动 sshd 本身,并在启动 sshd 时使用 -e 和 -D 选项。较新的样式使用 syslog 配置行,该行将 sshd 消息写入专用命名管道,通常为 /var/run/sshd.fifo。无论哪种方式,这意味着 sshdfilter 可以在事件发生时看到事件并对其采取行动。
Sshdfilter 不可用在 openSUSE 存储库中。您可以按照 上的说明进行安装和配置
Fail2Ban
Fail2Ban 是另一个工具,它监视系统日志中的多次身份验证失败,并自动将违规主机添加到 iptables 规则(临时阻止)。它高度可定制,因为它支持监视许多已知的服务器(包括 Apache 和 )。它还可以发送有关阻止的地址的通知,但是强烈建议不要启用 SSH 的通知,因为很容易让您的邮箱被填满或您的服务器由于 SSH 系统攻击产生的大量流量而被标记为垃圾邮件发送者。
Fail2Ban 可在 OpenSUSE 存储库中使用。
缺点
当服务被阻止到特定源地址时,如果发生太多失败,就存在有人操纵这些攻击以使其看起来来自他们不在的地方以创建拒绝服务攻击的可能性。对于 SSH 来说,由于协议的工作方式,这很困难,但并非不可能。
在实施上述解决方案之前,应仔细权衡发生这种情况的可能性。