所以我在我的服务器上运行了一些流行的 Web 应用程序。我希望这些可以从任何计算机上访问,而不会造成太多漏洞。
我使用 Apache 2.4.29 作为我的 HTTP 服务器。我目前对攻击者隐藏应用程序中潜在安全漏洞的想法是AuthType Basic
为相关虚拟主机启用 HTTP 基本身份验证 () 作为附加安全层。当然,我只允许 SSL 连接。
现在这一切都很容易完成。但我的问题是:我怎样才能最好地避免使用 HTTP 基本身份验证的蛮力式攻击?即,如何启用速率限制?
我目前的计划是这样的:
由于我使用 ufw(简单防火墙)来限制 SSH 连接,我想我可以在用于 HTTPS 的特定端口上做同样的事情。但是,我看到了两个问题:
- 攻击者不能在
Connection: Keep-Alive
不重新连接的情况下使用并继续尝试不同的密码吗?所以限制传入连接在这里没有任何用处。 - 如果我以某种方式禁用
Connection: Keep-Alive
,我想我会遇到底层 Web 应用程序的问题,因为它们需要大量单独的连接,以便浏览器可以检索其他文件。
如果我可以指示 Apache 只为经过身份验证的用户保持连接并在尝试失败时断开连接,那将是完美的。有没有办法做到这一点?我实际上不确定默认行为是什么,并且对 HTTP 了解不够,无法轻松测试。
Apache 中的KeepAlive
andMaxKeepAliveRequests
设置显然可以基于每个虚拟主机进行配置,但我不确定如何根据成功的身份验证更改这些设置。
HTTP 基本身份验证是通过在客户端发出的每个请求(即每个资源)中发送一个附加标头来完成的。
如果您未在请求中提供此标头,系统将提示您提供凭据。
因此,没有任何单一的登录页面可以通过任何类型的速率限制或防火墙规则来保护。限制所有页面的速率也不是一种选择。如果您将每个 IP 地址的速率限制为每秒仅一个请求,则有效用户每秒只能获取一个资源。因此,加载一个网页、两个样式表和四个图像至少需要 7 秒。