SSH配置防爆破和双因子登录

SSH配置防爆破和双因子登录

列举了多种ssh防爆破的实现方式,可用于Linux服务器加固。

  • fail2ban
  • pam
  • Google Authenticator 双因素认证 (2FA)

fail2ban

安装 Fail2Ban

sudo yum install epel-release
sudo yum install fail2ban

配置 Fail2Ban

安装完成后,需要配置 Fail2Ban。首先,复制默认的配置文件作为自定义配置文件。

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

打开 /etc/fail2ban/jail.local 文件,在文件中找到 [sshd] 部分,并进行以下配置:

[sshd]
enabled = true
port = ssh
filter = sshd
#logpath = /var/log/auth.log
logpath = /var/log/secure
maxretry = 5
bantime = 3600
findtime = 600
  • enabled:启用 SSH 监控。
  • port:SSH 服务端口,默认是 ssh(22)。
  • filter:使用 sshd 过滤器。
  • logpath:SSH 日志文件路径。对于 Debian/Ubuntu 系统是 /var/log/auth.log,对于 CentOS/Fedora 是 /var/log/secure
  • maxretry:最大重试次数,超过此次数将触发封禁。
  • bantime:封禁时间(秒)。
  • findtime:在此时间范围内触发 maxretry 次失败将被封禁。

启动并启用 Fail2Ban 服务

sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl status fail2ban
fail2ban-client status sshd

fail2ban支持的服务和程序

fail2ban是通过监控日志文件中的失败登录尝试并根据配置的策略封禁可疑的 IP 地址。所以Fail2Ban 是一个非常灵活的工具,除了 SSH 服务 (sshd) 之外,它还支持多种其他服务和应用程序。以下是一些常见的服务和组件,Fail2Ban 可以用来保护它们:

  1. Web 服务器:
    • Apache
    • Nginx
  2. 邮件服务器:
    • Postfix
    • Exim
  3. FTP 服务器:
    • vsftpd
  4. 数据库服务器:
    • MySQL
    • MariaDB
  5. 其他服务和应用:
    • OpenVPN
  6. 常见的安全日志:
    • syslog
    • auth.log
    • secure

Fail2Ban 使用 “过滤器” 来解析日志文件中的模式,以检测潜在的攻击。每个服务都有其特定的过滤器文件,位于 /etc/fail2ban/filter.d 目录中。

PAM

使用 PAM(可插入式认证模块)来防止 SSH 爆破攻击是一种有效的方法。以下是配置 PAM 以限制 SSH 登录尝试的步骤:

安装 PAM 模块

sudo yum install pam -y

配置 PAM 限制登录尝试次数

编辑 PAM 的 SSH 配置文件 /etc/pam.d/sshd,在文件的顶部添加以下行:

auth required pam_tally2.so deny=5 onerr=fail unlock_time=600 
  • pam_tally2.so:这是 PAM 模块,用于记录登录尝试次数并执行锁定。
  • deny=5:允许的最大登录尝试次数。超过此次数后,账号将被锁定。
  • onerr=fail:如果出现错误,默认执行锁定。
  • unlock_time=600:锁定时间(秒)。例如,这里设置为 600 秒(10 分钟)。

修改 SSH 配置文件并重启SSH 服务

确保 SSH 配置文件 /etc/ssh/sshd_config 中启用了 PAM。查找并确保以下行未被注释:

UsePAM yes

重启 :每次修改 PAM 或 SSH 配置文件后,需要重启 SSH 服务使更改生效:

systemctl restart sshd

检查和解锁用户:

如果用户被锁定,可以使用 pam_tally2 命令查看和解锁用户。例如,查看所有用户的登录尝试统计信息:

sudo pam_tally2 --reset

如果需要解锁特定用户,可以使用以下命令:

sudo pam_tally2 --user=username --reset 

其中 username 是要解锁的用户名。通过上述配置,当某个用户尝试登录超过设定次数后,将会被暂时锁定,从而有效防止 SSH 爆破攻击。这种方法通过 PAM 模块直接在认证层进行限制,增加了系统的安全性。

pam局限性

单纯使用 PAM 来封锁爆破登录的用户,root是大部分扫描ip爆破最多的用户,这种方式可能导致pam锁定root账号,可能影响正常用户登录。

所以我不建议用pam来防止ssh爆破。但是可以结合pam和fail2ban配合使用。配置 PAM 使用 Fail2Ban 和 单独使用 Fail2Ban 都能有效地防止 SSH 爆破攻击,但它们的工作方式和配置略有不同。

单独使用 Fail2Ban

  • 日志监控:Fail2Ban 通过监控日志文件(如 /var/log/auth.log/var/log/secure)来检测失败的登录尝试。
  • 触发封禁:当检测到超过设定次数的失败登录尝试时,Fail2Ban 会使用防火墙规则(如 iptables)封禁可疑的 IP 地址。

配置 PAM 使用 Fail2Ban

  • 认证过程集成:将 Fail2Ban 集成到 PAM 框架中,可以在认证失败时直接触发 Fail2Ban 的封禁逻辑。
  • 实时反应:PAM 可以在认证失败的瞬间调用 Fail2Ban,而不依赖于日志文件的周期性扫描。

Google Authenticator 双因素认证 (2FA)

亲测centos使用Google Authenticator存在问题,建议更换ubuntu使用。

安装Google Authenticator

sudo apt install git gcc make autoconf automake libtool qrencode libqrencode-dev libpam-google-authenticator -y

然后执行google-authenticator。

google-authenticator

修改sshd和pam配置

修改/etc/ssh/sshd_config。

UsePAM yes
ChallengeResponseAuthentication yes

在/etc/pam.d/sshd第一行添加。

auth required pam_google_authenticator.so

重启sshd登录测试

systemctl restart sshd

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论