网站间隙性502故障(绿盟waf)Error:no live upstreams while

现象:
11月27日早上8点18分
安全巡检发现部分页面间歇性出现502(页面报错,服务器不响应),
8:30左右陆陆续续恢复

过程:
知道监管会在晚上外网扫描(常规扫描)

  • 02.09分发起扫描
    02.10分接收到邮件和短信告警(量不大)
    02.18分中心电话通知xxx(未接到)
    02.26分中心二次通知,接听并在群回复监管扫描
    07.28分中心在QQ通知一直在告警,处理下
    08.11分到公司在waf下封禁了该Ip
    08.11分间隙性502出现
    08.30左右分间隙性502消失

在安全事件处置上,不存在错误处理,并且告警通知拦截全部到位

从扫描到封禁IP前正常,封禁IP在waf上属于常规操作,并且该功能存在2年之久,外网也时时刻刻发起攻击扫描,也未出现过异常
在8.10分左右开始出现服务器报错502
502
查看nginx错误日志,发现
【98946#0: *70041627 no live upstreams while connecting to upstream, client: 123.xx.xx.5, server: xxx.xxxxxx.com, request: “POST /cb-api/captcha/send/mobile/unblock HTTP/1.1”, upstream: “http://WEB/cb-api/captcha/send/mobile/unblock”, host: “xxxxl.xxxxx.com”】
出现168,341次,和8:10分后,出现的502错误次数相当

根源分析
Nginx被动探测原理

  • *nginx 判断节点失效状态

Nginx默认判断失败节点状态以connect refuse和time out状态为准,不以HTTP错误状态进行判断失败,因为HTTP只要能返回状态说明该节点还可以正常连接,所以nginx判断其还是存活状态;除非添加了proxy_next_upstream指令设置对404、502、503、504、500和time out等错误进行转到备机处理,在next_upstream过程中,会对fails进行累加,如果备用机处理还是错误则直接返回错误信息(但404不进行记录到错误数,如果不配置错误状态也不对其进行错误状态记录),综述,nginx记录错误数量只记录timeout 、connect refuse、502、500、503、504这6种状态,timeout和connect refuse是永远被记录错误状态,而502、500、503、504只有在配置proxy_next_upstream后nginx才会记录这4种HTTP错误到fails中,当fails大于等于max_fails时,则该节点失效;*

  • nginx 处理节点失效和恢复的触发条件

nginx可以通过设置max_fails(最大尝试失败次数)和fail_timeout(失效时间,在到达最大尝试失败次数后,在fail_timeout的时间范围内节点被置为失效,除非所有节点都失效,否则该时间内,节点不进行恢复)对节点失败的尝试次数和失效时间进行设置,当超过最大尝试次数或失效时间未超过配置失效时间,则nginx会对节点状会置为失效状态,nginx不对该后端进行连接,直到超过失效时间或者所有节点都失效后,该节点重新置为有效,重新探测;

  • 所有节点失效后nginx将重新恢复所有节点进行探测

如果探测所有节点均失效,备机也为失效时,那么nginx会对所有节点恢复为有效,重新尝试探测有效节点,如果探测到有效节点则返回正确节点内容,如果还是全部错误,那么继续探测下去,当没有正确信息时,节点失效时默认返回状态为502,但是下次访问节点时会继续探测正确节点,直到找到正确的为止。

  • 通过proxy_next_upstream实现容灾和重复处理问题

ngx_http_proxy_module 模块中包括proxy_next_upstream指令语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 |http_404 | off …;默认值: proxy_next_upstream error timeout; 上下文: http, server, location

原因:
当08.11分在waf封禁IP后,
这个IP扫描探测功能并没有停止,
扫描器发出所有的包在nginx看到后端给的结果都是502,
在大量的访问多个后端连续反馈502,
nginx认为后端没有任何存活的机器。

Error:no live upstreams while…
**
问题
**:
该架构设计问题涉及到nginx到后端串联所有的安全产品问题,属于行业通用问题
waf产品设计不合理,未考虑nginx探测机制问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lefooter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值