如何使用PAM来限制IP失败的login尝试?

我正在通过一个强化我的服务器安全性的过程来防止将服务器附加到IP并给它一个域名时出现的每日黑客攻击。 我可以每天从1到8次的暴力破解试图以root身份或者蛮力尝试不同的名字来访问SSH,而这是在没有公开声誉的服务器上运行(它没有运行任何大型网站等)。 由于我configuration了我的SSH服务器的方式,我敢肯定,这些尝试也将失败,但我真的不喜欢让别人尝试。

当然,我也为包括SSH在内的更敏感的服务设置了连接速率限制。

我现在在做什么:

我可以从我的auth.log中看到, PAM确实获得了那些试图login的远程IP地址,而且我正在使用一个脚本,它定期扫描这些失败的尝试,并添加一个IP阻止防火墙。

我想要做什么:

我想要做的是使这个IP禁止过程更快地做出回应。 这不是等待轮询脚本来接收它,我想要一个PAM模块来计算从IP(而不是服务或用户)连续失败的尝试,并采取一些行动,如:

  • 拒绝来自该IP的所有未来login尝试
  • 发出一个命令,将添加一个规则到防火墙,以完全禁止IP

问题:

是否已经有一个很好的PAM模块可以注意到IPauthentication失败,或者我需要自己写吗?

我推荐的是错开你的安全解决scheme。 最好在层中实现安全性,只有一个解决scheme意味着您将有单点故障

如上面Jeff Ferland所述,Fail2Ban是一个很好的第一步解决scheme。 它会监视你的日志文件是否有暴力攻击的迹象,并且可以configuration为通常监听PAM。

但是,如果这个日志文件丢失会发生什么? 权限改变? 如果日志文件目标更改? 如果fail2ban崩溃? 如果更新改变了你打算工作的方式? 正则expression式模式必须更新? 如果日志文件目标驱动器或分区变满,会发生什么情况? fail2ban变得毫无用处。


  • Introducing libpam_shield

有一个名为pam_shield的PAM模块。 这不仅更有效率(直接在login层中操作),而且它使用快速访问数据库,可以在重新启动后保留。

它使用更less的内存,并且不需要可能会失败的正在运行的服务。 还可以将pam_shieldconfiguration为使用路由表以及IPTables。

就像Fail2Ban一样,你给它一段时间来考虑主机的禁令。 您提供远程主机可以进行的最大尝试次数以及禁止它们的时间。

为了使它与Fail2Ban很好地配合,将它们设置为Fail2Ban中configuration的1.5倍。 你也可以让禁令期更长。 这样,fail2ban将会第一次禁止用户…如果他们的禁令到期了,他们又被抓住了,那么第二次就会禁止他们。

这里是一个到configuration文件手册页面的链接: shield.conf


  • Introducing pam_tally2

您也可以考虑使用pam_tally2来locking特定的用户帐户。

如果某个用户帐户是特定目标的 ,则需要locking该用户帐户,并防止全部login,或者直到处理该攻击。

当攻击源自“内部”时,这在共享服务器上尤其有用。 当你不能阻止本地主机(即127.0.0.1)。

希望这有助于! 我意识到原来的post现在有点老了,但是在层次上实现安全性非常重要,并且覆盖了所有的基础! 有没有包可以“只是安装”,使您的系统安全。 甚至不是Fail2Ban

虽然PAM可用于限速login和设置locking( 在某些不成功的尝试之后如何lockingLinux用户帐户 ),但处理来自同一IP的多次尝试的更好的工具是阻止其从networkingstream量中获得,尝试。

所以,为此,答案不是PAM模块。 而是使用fail2ban 。

有一个PAM模块可以让你维护一个名为PAM Auto Blacklist ( pam_abl )的黑名单 。 直到最近它还没有被更新一段时间,但它有一个新的维护者谁一直在积极的工作再次。

该模块始终在您想要做的第一步,即将禁止从一个IP失败,被禁止的未来login尝试。 这些尝试通过防火墙,然后再次备份到PAM。

尽pipe从模块本身还没有内置的与防火墙交互的方式,但是现在可以运行任意命令,这也允许第二步。

我运行一个命令,将一个禁止的主机添加到我在防火墙中设置的ipset中。


这是我如何处理禁止从PAM到防火墙:

/etc/pam.d/sshd中

 auth include system-remote-login auth required pam_abl.so config=/etc/security/pam_abl.conf 

pam_abl.conf文件中:

 host_clr_cmd=ipset del blacklist %h; logger clear host %h host_blk_cmd=ipset add blacklist %h; logger block host %h 

这与立即添加一个主机,不符合标准被阻止添加到我在iptables阻止的ipset列表。 你也可以像这样直接把主机放在iptables中:

 host_blk_cmd=iptables --append INPUT --source %h --jump DROP; logger block host %h 

防火墙有更多的configuration选项和设置,但这是防止被禁止的IP再次通过防火墙的部分。