如何使用 PAM 限制通过 IP 登录失败的尝试?

Phi*_*ing 6 ssh authentication pam

我正在通过一个过程来加强我的服务器安全性,以防止您将服务器连接到 IP 并为其指定域名时出现的日常黑客攻击。我每天都会进行 1 到 8 次蛮力尝试以 root 或只是蛮力尝试不同的名称来访问 SSH,这是在没有公共声誉的服务器上(它没有运行任何大型网站等)。由于我配置 SSH 服务器的方式,我很确定这些尝试也会失败,但我真的不喜欢让人们尝试。

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

我现在在做什么:

我可以从我的 auth.log 中看到PAM确实获取了那些尝试登录的人的远程 IP 地址,我目前正在使用一个脚本,该脚本定期扫描这些失败的尝试并添加一个 IP 阻止防火墙。

我想做什么:

我想要做的是让这个 IP 禁止过程更快地做出响应。那不是等待轮询脚本获取它,而是希望 PAM 模块计算来自 IP(不是服务或用户)的连续失败尝试并采取一些操作,例如:

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

问题:

是否已经有一个很好的 PAM 模块可以记录未通过身份验证的 IP 还是我需要自己编写?

Rap*_*ebs 7

我的建议是错开您的安全解决方案。安全性最好在层中实现,拥有一个解决方案意味着您将遇到单点故障

Fail2Ban,正如上面 Jeff Ferland 所说的,是一个很好的第一步解决方案。它将监视您的日志文件是否有暴力攻击的迹象,并且可以配置为通常针对 PAM 进行侦听。

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


  • Introducing libpam_shield

有一个名为pam_shield的 PAM 模块。这不仅更高效(直接在登录层内操作),而且使用快速访问数据库,该数据库可以在重新启动后保持不变。

它使用较少的内存,并且不需要可能会失败的正在运行的服务。pam_shield也可以配置为与您的路由表以及 IPTables 一起使用。

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

为了使其与 Fail2Ban 完美配合,请将这些设置为 Fail2Ban 中配置的 1.5 倍。您也可能使禁令期更长。这样,fail2ban 将在第一次禁止用户......如果他们的禁令到期,并且他们再次被抓住,它将在第二次禁止他们更长时间。

这是配置文件手册页的链接:shield.conf


  • Introducing pam_tally2

您还可以考虑pam_tally2锁定特定用户帐户。

如果某个用户帐户是特定目标,则您需要锁定该用户帐户,并防止一起登录,或直到攻击得到处理。

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

希望这会有所帮助!我意识到原来的帖子现在有点旧了,但是在层中实现安全性非常重要......并涵盖所有基础!没有您可以“安装”来确保系统安全的软件包。甚至不是 Fail2Ban


Jef*_*and 2

虽然 PAM 对于限制登录速率和设置锁定(如何在某些不成功的尝试后锁定 Linux 用户帐户)很有用,但处理来自同一 IP 的多次尝试的更好工具是阻止其网络流量,因为它有许多连续的尝试尝试。

因此,答案不是 PAM 模块。相反,使用fail2ban