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