本文共 1693 字,大约阅读时间需要 5 分钟。
在生产环境中,日志中出现了大量的404请求写入,这对系统稳定性和安全性构成了潜在威胁。我们需要分析原因并采取有效措施解决问题。
通过对日志进行分析,发现日志中的 "agent": "SLBHealthCheck" 值,表明此类404请求很可能是由阿里云的SLB(服务器负载均衡)健康检查功能触发的。具体来看,日志中的信息显示:
"timestamp":"2024-08-09T07:05:39.136+00:00","path":"/","status":404,"error":"Not Found","message":null,"requestId":"bdfxxxxxxxxxx942"
此外,日志中还包含来自远程客户端的详细信息,例如 remote_addr 和 referer。进一步确认阿里云控制台,发现确实存在一个持续进行的健康检查请求,且请求路径为 /。
为解决该问题,我们需要在不丢失有用信息的前提下,屏蔽掉由SLB健康检查触发的404请求。具体来说,考虑到服务是互联网-facing,直接屏蔽所有404请求可能会导致安全隐患(如攻击者利用404路径遍历攻击)。因此,我们采取以下措施:
保留正常404日志:对于非SLB健康检查触发的404请求,仍然需要记录日志,以便于后续分析和监控。
屏蔽SLB健康检查请求:通过Nginx配置,根据请求头中的 User-Agent 值判断是否为SLB健康检查请求,并在这种情况下关闭日志记录和返回404状态码。
以下是具体的Nginx配置示例:
server { listen 80; listen 7309; server_name xxxxxx.cn; charset utf-8; # 日志配置 lua_need_request_body on; set $resp_body ""; body_filter_by_lua 'local resp_body = string.sub(ngx.arg[1], 1, 1000) ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body if ngx.arg[2] then ngx.var.resp_body = ngx.ctx.buffered end'; location / { proxy_pass http://prod; # 屏蔽SLB健康检查和特定监控工具的404日志 if ($http_user_agent ~* "(SLBHealthCheck|Blackbox Exporter/0.21.1)") { access_log off; return 200; } access_log /data/logs/log; error_log /data/logs/log error; }} 通过持续观察日志,可以看到以下结果:
验证命令示例:
[root@iZbp129xxxxxxtfhe3Z logs]# tail -fn 300 logs2024-08-09 | grep 404
日志中仅显示正常用户的404请求,而SLB健康检查相关日志已被成功屏蔽。
通过上述方法,我们既保留了必要的日志信息,又有效屏蔽了潜在的安全风险。这种配置方式灵活且易于维护,同时兼顾了服务的安全性和日志的可用性。如果有其他需求或异常情况,请根据实际情况进行调整。
转载地址:http://xhcfk.baihongyu.com/