读取 linux 的日志,发现遭到密码爆破。SSH 密码爆破是指攻击者使用暴力破解技术,尝试猜测 SSH 用户名和密码的过程。这通常涉及使用专门的工具或脚本,尝试从一个字典文件中的可能密码列表中猜测 SSH 账户的密码。
攻击者可能使用这种技术来获取未经授权的访问权限,并获得敏感数据或在系统中执行恶意活动。
由于配置了强密码,攻击者暂时没能得逞。
为了应对 SSH 密码爆破攻击,可以采取以下措施:
- 使用入侵检测系统 fail2ban, 检测到暴力破解行为,在防火墙中禁止攻击者的 IP 地址
- ssh 换用公钥身份验证,禁用密码
fail2ban#
简介#
fail2ban 是一种开源的入侵防御工具,主要用于检测和响应针对计算机系统的恶意攻击。它通过监视日志文件来查找可能的攻击行为,并根据预定义的规则阻止攻击者的 IP 地址或主机名的访问。
fail2ban 的主要作用包括:
- 防止暴力破解:fail2ban 可以监视 SSH、FTP、SMTP、POP3 等服务的日志文件,并检测到暴力破解行为。一旦检测到此类行为,它将尝试在防火墙中禁止攻击者的 IP 地址。
- 防止拒绝服务攻击:fail2ban 可以监视网络流量并检测到 DDoS 攻击。一旦检测到此类攻击,它将尝试在防火墙中阻止攻击者的 IP 地址。
- 实时监控:fail2ban 可以实时监视系统日志文件,并根据规则触发警报和阻止行动。这有助于及时发现和应对新的攻击行为。
- 日志分析:fail2ban 可以帮助管理员分析系统日志文件,找出潜在的安全威胁,并采取相应的措施。
总的来说,fail2ban 可以帮助管理员保护他们的系统免受恶意攻击和未经授权的访问。
操作#
所以可以使用 fail2ban 来实现。以下是实现步骤:
- 安装 fail2ban,以 CentOS 为例:
sudo yum install epel-release -y
sudo yum install fail2ban -y
- 编辑 fail2ban 配置文件:
sudo vi /etc/fail2ban/jail.local
添加以下内容:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 86400
此配置将启用 fail2ban 监视 SSH 登录尝试,如果同一 IP 地址在 3 次登录尝试中输错密码,则会被 ban 掉 1*24 小时。
- 启动 fail2ban 服务:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
现在,如果同一 IP 地址在 3 次登录尝试中输错密码,则会被 ban 掉 1*24 小时。如果您希望修改最大尝试次数或 ban 时间等设置,请修改上述配置文件并重新启动 fail2ban 服务。
ssh 公钥身份验证#
将 SSH 身份验证从基于口令的身份验证改为基于公钥的身份验证,有以下几个好处:
- 更安全:基于口令的身份验证存在被暴力破解的风险,因为攻击者可以使用暴力破解技术尝试猜测用户的密码。而基于公钥的身份验证使用了非对称加密技术,比密码更难猜测,因此更安全。
- 更方便:一旦设置了 SSH 公钥,您就无需在每次登录时输入密码,这使得登录更快、更方便。此外,当需要在多台远程服务器之间进行访问时,无需记住多个密码,也可以更轻松地进行身份验证。
将 SSH 验证方式从密码更改为公钥身份验证#
在 CentOS 中,将 SSH 验证方式从密码更改为公钥身份验证需要完成以下步骤:
- 生成公钥 / 私钥对
首先,在您的本地计算机上生成公钥 / 私钥对。您可以使用以下命令来生成公钥 / 私钥对:
ssh-keygen
该命令将提示您输入生成的密钥文件的名称和位置,并为您的密钥对生成随机的加密密码。默认情况下,这将在 ~/.ssh/
目录下创建一个名为 id_rsa.pub
和 id_rsa
的文件。确保将公钥文件(id_rsa.pub
)拷贝到目标 CentOS 服务器上。
- 确认目标服务器已启用公钥身份验证
接下来,您需要确保目标服务器上已启用公钥身份验证。打开 /etc/ssh/sshd_config
文件,找到并确保以下行未被注释:
PubkeyAuthentication yes
如果该行未被注释,请跳过此步骤。
- 将公钥添加到目标服务器上的授权密钥文件中
将您的公钥文件添加到目标服务器上的授权密钥文件中。打开 ~/.ssh/authorized_keys
文件,并将您的公钥文件内容(即 id_rsa.pub
文件中的所有文本)复制到该文件中。
如果 ~/.ssh/authorized_keys
文件不存在,请创建它。
- 重启 SSH 服务
完成以上步骤后,重启 SSH 服务以使更改生效。可以使用以下命令来重启 SSH 服务:
sudo systemctl restart sshd
现在,您应该能够使用公钥身份验证连接到目标 CentOS 服务器,而不需要密码。
禁用 SSH 密码身份验证,只允许使用公钥身份验证#
- 确保公钥身份验证已启用
首先,确保已启用公钥身份验证。打开 /etc/ssh/sshd_config
文件,找到并确保以下行未被注释:
PubkeyAuthentication yes
如果该行未被注释,请跳过此步骤。
- 禁用密码身份验证
要禁用密码身份验证,请将以下行添加到 /etc/ssh/sshd_config
文件中:
PasswordAuthentication no
这将禁用通过密码进行身份验证。请注意,如果您不使用公钥身份验证,则将无法连接到 SSH 服务器。
- 重启 SSH 服务
完成以上步骤后,重启 SSH 服务以使更改生效。可以使用以下命令来重启 SSH 服务:
sudo systemctl restart sshd
现在,SSH 服务器只允许使用公钥身份验证进行连接,而不允许使用密码进行连接。
其他 sshd_config#
ChallengeResponseAuthentication#
禁用 SSH 密码身份验证时,如果尝试通过密码进行连接,系统将显示一个提示,指示用户使用其他身份验证方法。如果您不想看到此提示,可以按照以下步骤操作:
ChallengeResponseAuthentication no
MaxAuthTries#
MaxAuthTries
是一个 sshd_config 文件中的参数,指定了在认证过程中允许的最大尝试次数。默认情况下,这个值为 6,也就是说,如果一个用户在登录过程中超过 6 次失败,那么连接将被中断。
这个参数的主要目的是为了增加系统安全性,避免恶意攻击者通过暴力破解密码等手段入侵系统。如果您将这个值设置得过小,用户可能会因为输入错误而被锁定,如果设置得过大,系统可能会更容易受到攻击。
您可以根据实际需要更改 MaxAuthTries
的值。例如,如果您担心有人会对系统进行暴力攻击,则可以将其降低,例如将其设置为 3 或 4。如果您有一个强大的密码策略,并且不希望用户因为输入错误而被锁定,则可以将其增加到 10 或更多。
请注意,修改了 MaxAuthTries
的值之后,您需要重新启动 ssh 服务才能生效,可以使用以下命令:
sudo systemctl restart sshd