服务器是否应该返回444?
服务器是否应该返回444?

先说结论:面对大量恶意请求,建议直接关闭连接(444)(也就是直接切断链接不返回任何内容)
我们先逐个分析200、404、403、500、502、503、444不同的返回响应有哪些区别。

状态码 类型 是否占用服务器资源 核心原因简述
200(正常返回)​ 正常 极大 消耗资源最多。服务器不仅需要处理请求,还可能执行后端程序、查询数据库,最后返回一个完整的“正常”页面内容,极大浪费资源。
404 Not Found 客户端错误 (4xx) 是,消耗较少 服务器找不到请求的资源(如页面、图片)
403 Forbidden 客户端错误 (4xx) 是,消耗较少 服务器理解请求,但拒绝授权访问
500 Internal Server Error 服务器错误 (5xx) 是,消耗很大 服务器内部处理请求时发生意外错误
502 Bad Gateway 服务器错误 (5xx) 作为网关的服务器从上游服务器收到了无效响应
503 Service Unavailable 服务器错误 (5xx) 是,但会主动拒绝请求以节省资源 服务器暂时无法处理请求(如服务器过载或维护中)
444 (连接关闭)​ (非标准码,Nginx定义) 否,消耗极低 服务器直接关闭连接,不返回任何HTTP响应

200一般是普通用户访问网站获得的响应,如果针对攻击和恶意请求也返回200,等于没有防火墙。

一般默认采用403作为防火墙拒绝返回的代码,明确告诉客户端(恶意请求方)我们的服务器不欢迎你,虽然这是最文明也最明确的的返回方式,但是这样可能导致对方大量更换不同的代理IP,持续攻击服务器。

如果针对大量攻击使用403返回拒绝代码,403得走完整个HTTP处理流程:解析请求、找资源、执行权限判断、生成403页面、发HTTP头部和完整的HTML错误页面。这过程消耗CPU、内存、带宽资源。

444就简单粗暴多了,识别到黑名单IP后,内核层面直接发TCP RST包断连,跳过所有应用层处理。可以看出444是最节省服务器资源的返回码。不在响应层面消耗服务器资源

但是缺点也有:当攻击方没有收到响应时,可能会持续大量发出请求,这种请求虽然不会对服务器响应方面产生压力,但是也会给服务器增加一堆讨厌的日志记录。算是一点缺点吧。

服务器被攻击
服务器被攻击

如果是这种/xmlrpc.php的反复攻击,返回404也可以,这样就直接让攻击方知道这玩意不存在,也不会反复进行讨厌的请求了(眼不见心不烦)。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注