当我意识到我的操作系统上游存储库中缺少一些可能非常有用的东西时,我一直在列举我的一台后端生产服务器上剩余的安全问题。
我一直在寻找PAM 模块,它根据DNS 阻止列表(域名解析)。
我的用例是...虽然IDS 软件可以在检测到 探测、漏洞扫描或暴力攻击-
一些服务(i.e. Apache2, proFTPd, Sendmail, SpamAssassin)
包括域名解析模块或功能,有助于大大减少可参与攻击的机器数量。它通过阻止已知的受感染或僵尸机器、公共代理和 TOR 出口中继节点(例如)来实现这一点。
据我所知,其他一些则没有。Dovecot/Saslauthd
不包括此类功能。这些经常被针对暴力攻击在我的网络上。这些服务仍然在IDS系统的覆盖范围内,但遭受了大多数攻击。
使用 PAM 模块在身份验证期间根据 DNSBL 检查远程主机 IP……有效全部服务可以有额外的弹性层来抵御分布式暴力攻击或探测(限制可能用于上述攻击的机器)
我想知道是否有现有的 PAM 模块可以实现此目的?如果没有,为什么开发人员忽略了这一点?
这将是一个非常简单的模块,但(在我看来)它可以发挥很大的作用。
目前,我已经编写了一个与 PAM 交互的脚本(通过“pam_exec.so”模块)。由于某种原因,这不起作用(只是导致 BASH 崩溃)。有机会时,我打算尝试使用“pam_script.so”模块。
我愿意编写一个 PAM 模块来执行此操作,但不确定将软件放入 Debian 或 Ubuntu 存储库有多难。
谢谢
答案1
我不知道有这样的模块。你的第二个问题(为什么)将征求主要基于意见的答案,因为我无法想出任何明确的理由来解释为什么这样的 PAM 模块不能存在。
以下是我在评估可行性时确定的设计考虑因素:
- 速度: 必须不是停止登录并返回。ssh+PAM 已经处于一个糟糕的境地当谈到默认配置下的 DNS 延迟时。我甚至可以说,对每个服务器的 DNS 查找应该并行进行,以避免超时相互叠加。
- 重试很糟糕:只要重试被视为属于 的权限,使用 C 库进行 DNS 查找是可以的
/etc/resolv.conf
。如果实施了 DNS 重试,则模块一定不使用 C 库进行 DNS 查找。最终结果将是嵌套的重试操作。 - 跳过私有 IP 范围:RFC1918(及类似)空间应始终获得免费通行证,因为将此信息传递给 DNSBL 是没有用的。
- 锁定注意事项:当所有 DNS 都不可用时会发生什么?除非使用私有 IP,模块是否总是登录失败?这必须记录下来。
- 如果在堆栈中被调用,则会生成日志错误
auth
。堆栈auth
用于身份验证。此模块不用于身份验证。auth
如果用户将模块放在此处,则绕过堆栈的决策(SSH 密钥身份验证、GSSAPI 身份验证等)将使模块失效。
答案2
我自己更喜欢 Redhat,但我一直想知道是否有类似的模块。好问题。我还没有看到可以处理这个问题的模块。
就发布软件而言,这可能会有所帮助。
我从来没有在主存储库方面有过好运气,但 rpmforge (现在为 repoforge ) 有一些相当容易参与的方式。看这里。
对于 debian / ubuntu,我还没有看到一个大型的第三方存储库。它们似乎都是针对特定产品的。我的东西似乎从来都不太合适,而且我永远无法证明运行自己的面向公众的存储库是合理的。
我倾向于将需要为 Debian 衍生产品打包的所有内容都保留在 github 上。
答案3
您可以轻松实现这一点,但这样做并不是一个好主意。
首先,让我们回顾一下 PAM 是什么:它是一个系统,用于处理用户登录. 认证、授权、计费等。
因此,该提案的缺陷在于:
- 它会减慢合法登录速度。通常情况下,这种减速是不可察觉的,因为 DNS 查找不会花费太多时间,但它们能需要几秒钟或完全超时。发生这种情况时你会怎么做?你会拒绝合法用户吗?
- 更重要的是,它会完全阻挡合法登录,即使一切运行正常。许多用户不幸使用了动态 IP 地址,他们自己可能在一台参与僵尸网络的充满恶意软件的计算机上,导致 IP 地址被列入 DNSBL,或者最近被分配了一个被列入 DNSBL 的 IP 地址,尽管他们自己是干净的。
有很多方法可以应对针对各种服务的暴力攻击,其中最常用的是 fail2ban,但这个提议似乎是一个非常糟糕的想法。