pam_tally2 不计算 ssh 上的故障

pam_tally2 不计算 ssh 上的故障

我已经添加了行

auth required pam_tally2.so deny=3 unlock_time=180

到我的/etc/pam.d/login文件,在 tty 中一切正常,但尝试 3 次后就testuser被暂停了。

然而,这句话却/etc/pam.d/sshd没有任何效果。

xieerqi:$ ssh testuser@localhost
Password: 
Password: 
Password: 
Permission denied (publickey,keyboard-interactive).

xieerqi:$ ssh testuser@localhost                                                                                           
Password: 
Password: 
Password: 
Permission denied (publickey,keyboard-interactive).

如您所见,3 次尝试失败后,用户仍然可以尝试输入密码。

如何ssh在 3 次警告后禁止某个用户?

答案1

对于 SSH,最好使用与 pam 不同的其他东西,通过 iptables 和sshd_config文件可以实现很好的解决方案。这只是获得所需内容的一种方法,而且根据文档,通常建议使用 SSH 密钥而不是密码验证方法检查https://help.ubuntu.com/community/SSH/OpenSSH/Configuring

  1. 您需要更改/etc/ssh/sshd_config添加行

    MaxAuthTries 1
    
  2. 您需要创建以下防火墙规则

    • 创建新链

      iptables -N SSHATTACK   
      iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7  
      iptables -A SSHATACK -j DROP  
      
    • 阻止每个在 120 秒内建立超过三个连接的 IP 地址 120 秒。如果发生第四次连接尝试,则请求将委托给 SSHATTACK 链,该链负责记录可能的 ssh 攻击并最终丢弃该请求。

      iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set     
      iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK    
      
  3. 您可以检查对该文件所做的尝试/var/log/syslog

答案2

常见的做法是使用fail2ban在网络级别而不是 pam 级别上工作的功能,并且可以节省所有由 进行的加密的资源sshd

无论如何,在身份验证失败后,您是否尝试输入正确的密码?密码被接受了吗?登录了什么/var/log/auth.log

sshd服务器始终运行所有 pam 堆栈,即使用户不存在、被暂停或锁定,以消除使用旁路攻击(例如识别现有用户)。这似乎是您遇到的问题。它可以工作,但ssh出于安全原因您无法看到它。

答案3

尝试改变行的顺序,PAM 逐行执行它们
例如:
/etc/pam.d/common-auth

auth    required                        pam_tally2.so deny=3 onerr=fail unlock_time=300 debug
auth    [success=1 default=ignore]      pam_unix.so nullok
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional                        pam_cap.so

对我有用。

相关内容