翻防爆破那段统计逻辑的时候,我盯着那行计数器看了半天。

Agent(BandwidthAgent)跑在受控端,管这台机器有没有被人扫端口、有没有人连着暴力试。原来的逻辑是:单位时间里同一个来源 IP 的连接次数超过阈值,就自动封一段时间。听着挺合理。

问题出在「连接次数」这四个字上。代码里那行是每来一条连接就加一,不管这条最后是被放行了、还是被拦了。也就是说,自家人天天连的、正常的、一次也没被拦的连接,也在往上加。频率攒够了,「自动封」就动手——封下去的往往是自己人。

给七亿批量远程管理工具做 Agent 这块的时候,我一开始真没往这想,总以为「连接次数」就是字面意思,谁成想连放行通过的那些都算在里面。

防火墙.jpg

改法就一句话:只统计「被拦下」的连接。放行通过的别算,被规则拒掉、丢掉的才计数。这样一来,一个 IP 死磕同一个端口、每次都吃闭门羹,才叫攻击;正常连业务端口、一路畅通的,不该被记这份账。

顺带把另一半也补了:攻击来源里要排除白名单里的 IP。以前白名单只管「允许访问」,可它拦不拦是一回事,算不算攻击是另一回事——一个 IP 明明在我们自己白名单里,还把它列进攻击来源,这本身就说不过去。

还有个小坑,是限 IP 访问那边留下来的。给 3389 设了「限 IP 访问」之后,「允许所有人」那条放行规则没被一起停掉——两条规则同时挂着,一条说只让这几个人连,一条说所有人都能连,到底哪个算数谁也说不清。修成设限的时候把这条放行一并停用,解除限 IP 再把停掉的规则恢复回来,逐条回读,哪条没恢复出来会报出来。
白名单.jpg
写防爆破这东西最别扭的地方就在这:你是拿它去封别人的,但稍不留神,第一个被封的就是自家人。而「封错自己人」这件事,解释起来比封外人还费劲。

这块在 七亿批量远程管理工具 里不是单独一个功能页,是跟防火墙一起做的,规则之间会互相踩,只能一条条对着捋。上回写 2.0 计划时提过要把防火墙和防爆破做进去(那篇在这里),当时没往细处想,真动手才发现这些边角最容易出事。

改完跑了一轮,正常连接不再进攻击来源,被拦的那些照旧计数。收工。

顺带一提,这工具是免费的,Windows 端就能把 RDP 九宫格、SSH 终端、SFTP、FTP 全管起来,介绍在 七亿批量远程管理工具 这一篇;主站 七亿网络 做云主机和服务器,主推韩国、香港节点。