Closed conghua1013 closed 1 year ago
那看起来就不是通过这个字段?没懂需要什么样的支持。如果是如何自定义 NGINX conf,可以参考文档 https://waf-ce.chaitin.cn/docs/faq/other#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%AB%99%E7%82%B9-nginx-conf 或者继续在 issue 里面讨论。
如果是「为什么代理站点 HTTP 长链接无法实时访问」,这个暂时没有什么相关建议。只能说师傅先 DIY 改下 NGINX conf,尝试定位和判断下问题在哪,通过手动添加 NGINX conf 来解决。换句话说,我也不知道应该添加什么 conf 来解决师傅问题,需要师傅自行排查。
目前问题是如果是Nginx 通过 proxy_buffering off
关闭缓冲区, 相同的配置在 tengine 中也生效,迁移到waf 配置中后缓冲区关闭失败
waf 中流量是否是经过 tengine 时还经过其他组件,导致缓冲区关闭失败的;
或者请教一下如何配置代理站点才能关闭缓冲区
将safeline_unix.conf 配置文件中流量转发关闭,缓冲区关闭生效,
# 修改配置文件safeline_unix.conf 关闭流量拦截缓冲区关闭生效
upstream detector_server {
keepalive 256;
server unix:/resources/detector/snserver.sock;
}
# 此处关闭转发后,缓冲区配置生效
t1k_intercept off; # enable request detection
t1k_body_size 1m; # max forward size of request body
# 此处关闭转发后,缓冲区配置生效
tx_intercept off; # enable response detection
tx_body_size 1m; # max forward size of response body
tx_ignore_types # ignore certain types of response body
image/gif
image/png
image/jpeg
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
audio/webm
audio/ogg
video/webm
video/ogg
application/ogg
application/octet-stream
video/x-flv;
t1k_ulog 10000;
t1k_stat 10000; # enable nginx stat info
t1k_extra_header on;
t1k_extra_body on;
foreach_server {
location @safeline {
internal;
t1k_pass detector_server;
t1k_connect_timeout 1s;
t1k_read_timeout 1s;
t1k_send_timeout 1s;
proxy_buffering off;
}
location @safelinex {
internal;
tx_pass detector_server;
tx_connect_timeout 1s;
tx_read_timeout 1s;
tx_send_timeout 1s;
proxy_buffering off;
}
}
将safeline_unix.conf 配置文件中流量转发关闭,缓冲区关闭生效,
# 修改配置文件safeline_unix.conf 关闭流量拦截缓冲区关闭生效 upstream detector_server { keepalive 256; server unix:/resources/detector/snserver.sock; } # 此处关闭转发后,缓冲区配置生效 t1k_intercept off; # enable request detection t1k_body_size 1m; # max forward size of request body # 此处关闭转发后,缓冲区配置生效 tx_intercept off; # enable response detection tx_body_size 1m; # max forward size of response body tx_ignore_types # ignore certain types of response body image/gif image/png image/jpeg audio/wave audio/wav audio/x-wav audio/x-pn-wav audio/webm audio/ogg video/webm video/ogg application/ogg application/octet-stream video/x-flv; t1k_ulog 10000; t1k_stat 10000; # enable nginx stat info t1k_extra_header on; t1k_extra_body on; foreach_server { location @safeline { internal; t1k_pass detector_server; t1k_connect_timeout 1s; t1k_read_timeout 1s; t1k_send_timeout 1s; proxy_buffering off; } location @safelinex { internal; tx_pass detector_server; tx_connect_timeout 1s; tx_read_timeout 1s; tx_send_timeout 1s; proxy_buffering off; } }
了解,我们内部确认一下这个问题,也看下有没有比较好的解决方案。
@conghua1013 师傅可以试一下:保留请求检测 t1k_intercept @safeline;
,只关闭响应检测 tx_intercept off;
师傅可以试一下:保留请求检测 t1k_intercept @safeline;,只关闭响应检测 tx_intercept off;
该配置亲测有效
保留请求检测 t1k_intercept @safeline;,只关闭响应检测 tx_intercept off; 该配置对系统略有影响,
- 攻击日志中无法查看响应报文
- 无法通过结束时间进行搜索
- 攻击日志在事件列表中日志数量统计错误
- 无法通过点击事件列表中日志数量跳转查看攻击日志 (疑似与2有关)
保留请求检测 t1k_intercept @safeline;,只关闭响应检测 tx_intercept off; 该配置对系统略有影响,
- 攻击日志中无法查看响应报文
- 无法通过结束时间进行搜索
- 攻击日志在事件列表中日志数量统计错误
- 无法通过点击事件列表中日志数量跳转查看攻击日志 (疑似与2有关)
1 是预期的,因为是关闭了响应检测部分。2-4 我理解是预期是有 1 分钟的延迟。因为原本的逻辑是请求和响应拼装之后入库,现在没有响应部分了,请求这边会等待 1 分钟,然后等不到响应,就自己入库了
issue 先关闭了,短期没有太好的解法。WAF 需要拿到完整信息之后才能进行检测。后面推出流式检测能力有可能可以优雅地解决这类场景。
发现按照这个修改,顺带解决了反代群晖7.2.1时,/webapi/entry.cgi 持续链接的错误。
是否还修改了别的内容,按照建议tx_intercept off; 关闭这个没有生效
issue 先关闭了,短期没有太好的解法。WAF 需要拿到完整信息之后才能进行检测。后面推出流式检测能力有可能可以优雅地解决这类场景。
能否考虑添加一个单独修改某个站点或者某个路径tx_intercept off;,以及官方文档中如何自定义 NGINX conf的文档好像不见了
反馈内容
通过waf代理站点后http长链接无法通过配置proxy_buffering off; 关闭缓冲区
站点通过http 长链接实时推送消息,通过waf 代理并在配置文件
proxy_params
中添加如下配置项重启容器后,长链接无法实时输出打印内容 直接访问业务接口可以正确实时输出打印内容