在错误请求(或错误页面)上关闭连接的网络服务器有什么价值吗?

信息安全 网络服务器 配置
2021-08-25 17:57:05

至少一个网络服务器,nginx具有“关闭连接而不发送任何标头”的能力,方法是将其配置为向各种格式错误的 HTTP 请求返回(非标准)444。

这有什么实际的安全价值,还是只是安全剧院攻击者如何应对未收到来自 IP 地址的响应?如果有任何价值,成本效益比是多少?是否值得nginx为此进行配置?

更新 - 在考虑之后,确实有两种情况我可能想要关闭连接。不仅是糟糕的 HTTP 请求,还有对不存在页面的格式良好的请求。

例如,一个get /bank-files/index.htm请求。我的网站上没有这样的页面。但是,目前我将所有请求传递给 Django 进程,它显然会在任何未找到的页面上返回 404。鉴于我的网站将有少量预先知道的子页面(“/”、“/users”、“/orders”等) - 我可以配置nginx为仅通过这些页面,并返回 444(关闭连接) 在其他任何事情上。假设它是值得的。:)

那么关闭与所有有效 HTTP 请求的连接但对于不存在的页面有什么价值吗?

4个回答

其价值在于避免让更高级别的应用程序软件(php、wordpress 等)使用并可能错误处理格式错误的请求。由于 nginx 层正在评估协议的正确性,而不是尝试对请求实际执行任何操作,因此它提供了一个预过滤器。

突然终止连接不会给你带来太多好处。它告诉攻击者你正在使用什么防御系统,同样的方法可以通过通用的 404 响应来实现,但对攻击者的用处不大。但它是那种不时出现的戏剧性安全剧院,它不会对任何人造成任何真正的伤害。

我认为 gowenfawr 和 George Bailey 是对的。

终止 HTTP 协议连接而不是返回错误响应是一种非常底层的机制。作为意外后果野兽的永久逃脱者,我建议不要实施没有明确目的的机制。人类容易出错,您可能会不小心阻止发送有效的错误消息。在没有正常响应的情况下跟踪错误只是花费几个深夜,然后是清晨,然后是深夜等等的错误方式。写下您的安全目标,然后找出实现这些目标的机制。

那么关闭与所有有效 HTTP 请求的连接但对于不存在的页面有什么价值吗?

那将是一个不寻常的设置,几乎没有利润。我建议检查您的 HTTP 标头以查看它们是否泄漏任何信息,例如服务器版本,并在不存在的页面上坚持 404,这样不会造成混淆。除了非常轻微的性能提升之外,我想不出任何关闭连接的安全价值。(它实际上会抵消保持活动,但我认为这对于可能带来 404 的流量来说并不重要)

这种轻微的性能提升可能会开始对 DoS 攻击产生影响,我不知道您的 404 页面可能有多昂贵。但即便如此,DoS 攻击在您网站的较大页面开始时会更有效,因此这可能不是一个可能的目标。

但话又说回来,我可能会遗漏一些东西。

它减少了信息泄露的可能性。

如果我提出格式不正确的请求,我很可能会得到一些有趣的东西来告诉我有关系统的信息。

如果无论请求如何,响应总是返回相同的值,那么您无法通过格式错误的请求真正找到有关系统的任何信息。

它的价值完全取决于您要保护的系统,以及您要保护的程度。我从来没有设置它,所以我无法谈论所涉及的努力。