真没见过这种问题,求帮助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dust0522
1.76D
V2EX    程序员

真没见过这种问题,求帮助

  •  
  •   dust0522 2023-07-17 08:29:19 +08:00 4602 次点击
    这是一个创建于 818 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前提:公司有两台转发服务器,一台 nginx ,一个 IIS 服务,有一个用户信息图片上传接口,已经稳定运行 2 年。
    现在有一个用户上传的报文,发到哪个服务器上,哪个服务器就会断连大概 3-5 分钟左右。
    报文格式就是 JSON 加 base64 ,因为图片涉及用户身份证信息没法发。
    服务器端没有错误日志。
    抓包的看了下,上面是正常 tcp 分片的报文,下面突然是客户端突然没应答了?但是服务端已经收不了请求了。
    请求第一次响应 read ECONNRESET 然后再请求响应啥都是 connect ECONNREFUSED
    整崩溃了。
    [Imgur]( )
    29 条回复    2023-07-18 08:39:06 +08:00
    dust0522
        1
    dust0522  
    OP
       2023-07-17 08:35:41 +08:00
    报文也不大就 214KB
    leaves615
        2
    leaves615  
       2023-07-17 08:36:51 +08:00   1
    模拟测试下的 json 不同包大小,找临界点。有可能是网络 cache 或者什么参数超出。导致无法处理请求。
    dust0522
        3
    dust0522  
    OP
       2023-07-17 08:44:33 +08:00
    对了,nginx 会报这个,[info] 407539#0: *6273 recv() failed (104: Connection reset by peer), client: 客户端地址, server: localhost, request: "POST /hk/bms-front/agentMerchantUploadImage HTTP/1.1", host: "服务端地址"
    dust0522
        4
    dust0522  
    OP
       2023-07-17 08:46:38 +08:00
    @leaves615 我试试,找不到有用的日志,很头疼
    wuruorocks
        5
    wuruorocks  
       2023-07-17 08:50:04 +08:00
    也许服务程序有 bug ,处理这种请求时挂掉了? 能复现就还好办
    dust0522
        6
    dust0522  
    OP
       2023-07-17 08:52:43 +08:00
    跳过转发服务器,直接请求程序是没问题的,现在在测试上还复现不了,还在搭环境
    leaves615
        7
    leaves615  
       2023-07-17 08:55:17 +08:00
    @dust0522 #3
    上游服务器/应用的问题。 一般有以下情况问题:
    应用 tcp 队列满了,未及时释放。
    应用 tcp 缓冲区满了,未及时释放。
    系统 tcp 队列满了,未及时释放。
    系统 tcp 缓冲区满了,未及时释放。

    调优相关参数。 一个一个测试。 这种问题,除非把网络 debug 日志开启来查询,在应用层是看不出具体问题。


    -------
    前段时间处理过 服务器间歇性无法连接( rst )。 最终定位就是 linux tcp 队列满了未及时释放导致的。
    liuidetmks
        8
    liuidetmks  
       2023-07-17 09:11:21 +08:00
    有没可能那个用户在攻击?屏蔽即可,别费脑子了
    vainl1
        9
    vainl1  
       2023-07-17 09:18:44 +08:00   1
    换另外一个用户上传该报文,是否复现?
    该用户上传其他报文,是否复现?
    如果第一个答案为是,第二个为否,可能为触发了某防火墙规则,链接被重置了。
    之前在某 cms 后台上传模板文件,网站模板中包含边境区域地名,出现类似情况,删除模板中该地区后模板即可正常上传。其中服务器位于北京,网站域名也已经备案过。
    dust0522
        10
    dust0522  
    OP
       2023-07-17 09:22:36 +08:00
    是,否。报文都是 base64 的图片数据 @vainl1
    dust0522
        11
    dust0522  
    OP
       2023-07-17 09:23:19 +08:00
    @liuidetmks 我也想给他 ban 了,但是在领导那说不过去啊,base 的图片也能植入攻击吗
    nenseso
        12
    nenseso  
       2023-07-17 09:37:07 +08:00
    mark 一下,如果测试环境不能复现,会不会是那个客户的网络问题,上传图片过程中自己掐断的呢?
    yulgang
        13
    yulgang  
       2023-07-17 09:37:44 +08:00
    Nginx 是不是设置了 proxy_buffering ,把内存耗光了。
    vainl1
        14
    vainl1  
       2023-07-17 09:40:34 +08:00
    @dust0522 那基本可以确定为触发了某防火墙规则,可能的话在上传之前对数据再做其他形式的编码或加密,接收后再解码或解密。
    另外顺带一提,利用此规则直接发送此类的数据包,可以很容易制造 DOS 攻击,而且直接单个发包即可达成攻击。
    littlefishcc
        15
    littlefishcc  
       2023-07-17 09:42:16 +08:00
    能复现的问题都不是问题。
    构建一模一样的数据包发给服务器看是否能复现,如果能复现,那么不断屏蔽业务功能,不断缩小范围,总能找到问题。

    如果不能复现,那就只能要用户帮忙测试了,先确定大的方向,再不断排查。
    sadfQED2
        16
    sadfQED2  
       2023-07-17 10:06:02 +08:00 via Android
    把请求录制下来?只要能够稳定复现,那就很好调试了
    dust0522
        17
    dust0522  
    OP
       2023-07-17 10:11:13 +08:00
    @vainl1 感谢,中间防火墙给拒绝了
    dust0522
        18
    dust0522  
    OP
       2023-07-17 10:11:27 +08:00
    @nenseso 防火墙干的
    dust0522
        19
    dust0522  
    OP
       2023-07-17 10:16:54 +08:00
    @vainl1 防火墙这个规则咋触发的,真离谱啊。。。
    Pythoner666666
        20
    Pythoner666666  
       2023-07-17 13:00:43 +08:00
    有点意思啊,base64 之后 怎么能够处罚防火墙的的规则
    hopingtop
        21
    hopingtop  
       2023-07-17 13:56:06 +08:00
    有没有大佬,继续讨论一下 触发防火墙的规则的问题?

    是因为 base64 中的某段数据假设 '3122ABC' = '我是恶意的'
    防火墙规则 base64('我是恶意的') ,然后 base64(image).Match(base64(Rule)) ?
    防火墙发现是 base64 的编码,就用规则 base64 之后再去匹配?
    tool2d
        22
    tool2d  
       2023-07-17 14:13:07 +08:00
    你包都抓下来了,回测一下就可以了。

    你这防火墙估计有点水。
    kkkbbb
        23
    kkkbbb  
       2023-07-17 15:18:37 +08:00
    怎么能看下是防火墙的什么规则导致触发这种情况,还有它的处理行为具体是什么怎么查看呢,我也挺好奇的
    kkkbbb
        24
    kkkbbb  
       2023-07-17 16:43:15 +08:00
    @hopingtop 我比较好奇的是触发防火墙规则导致当前客户端无法访问能理解,但还能导致服务器断连?把其他所有正常的请求也给拒绝了?
    Pythoner666666
        25
    Pythoner666666  
       2023-07-17 18:30:36 +08:00
    有没有大佬出来解释下 这个很费解啊
    documentzhangx66
        26
    documentzhangx66  
       2023-07-17 18:50:23 +08:00   1
    1.楼主基础不牢。这种提问,至少需要提供网络拓扑图与系统架构图。

    排查过程也很简单,先抓用户报文。nginx 报错抓不到,把 ningx 停了,改用 Client 跑 postman + Server 用 socat 监听,如果有其他用户请求干扰调试,用 iptables 筛选用户 IP 。通过这方式,试图把流量导入到 socat ,会发现 socat 也抓不到,继续考虑系统被破坏,或者用户到 Server 的链路有问题。拿一个干净系统过来 socat ,也会报错,那肯定是链路有问题。然后整个链路一环一环旁通,最后很容易定位到防火墙。

    2.建议楼主认真补习一下计算机专业本科的网络原理与设计一课。 如果不喜欢学院派风格的课程方式,推荐 B 站视频教程:
    https://www.bilibili.com/video/BV1th4y1d7kR
    dust0522
        27
    dust0522  
    OP
       2023-07-18 08:35:17 +08:00
    @documentzhangx66 感谢,确实网络基础很差
    dust0522
        28
    dust0522  
    OP
       2023-07-18 08:37:52 +08:00
    @kkkbbb 这个跟公司网络架构有关
    dust0522
        29
    dust0522  
    OP
       2023-07-18 08:39:06 +08:00
    防火墙规则确实看不了,我们没权限,但确定是防火墙的问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2787 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 13:18 PVG 21:18 LAX 06:18 JFK 09:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86