pam_tally2 不计入 ssh 失败

Ser*_*nyy 5 ssh pam

我添加了行

auth required pam_tally2.so deny=3 unlock_time=180
Run Code Online (Sandbox Code Playgroud)

到我的/etc/pam.d/login文件,在 3 次尝试testuser被暂停后,这在 tty 中很好。

但是,同样的行/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).
Run Code Online (Sandbox Code Playgroud)

正如您在 3 次尝试失败后所看到的,用户仍然可以尝试输入密码。

ssh3次罢工后如何禁止用户?

小智 2

对于 SSH,最好使用与 pam 不同的东西,通过 iptables 和文件提供了一个很好的解决方案sshd_config。这只是获得您想要的东西的一种方法,也基于文档,通常建议使用 SSH 密钥而不是密码身份验证方法检查https://help.ubuntu.com/community/SSH/OpenSSH/Configuring

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

    MaxAuthTries 1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您需要创建以下防火墙规则

    • 创建新链

      iptables -N SSHATTACK   
      iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7  
      iptables -A SSHATACK -j DROP  
      
      Run Code Online (Sandbox Code Playgroud)
    • 阻止每个在 120 秒内建立超过 3 个连接的 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    
      
      Run Code Online (Sandbox Code Playgroud)
  3. 您可以检查对该文件所做的尝试/var/log/syslog


Jak*_*uje 1

常见的做法是使用fail2ban它在网络级别而不是 pam 级别工作,并且它可以为 .net 完成的所有加密节省资源sshd

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

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