一、发现问题
几天前我访问自己的这个博客,发现这样的报错,刚开始我还以为是偶然问题,今天一看还是这样,就赶紧去查日志。(因为我没时间发博客,也没啥流量,所以不怎么关注)

一看网站日志,好嘛,这ip已经在这打了好几天我的服务器了,一直在疯狂尝试各种敏感路径和漏洞,我还去查了一下访问ip的分布,全是英国和美国的ip,这两个就是攻击者



gemini说这种攻击目的是把我的服务器变成肉鸡,用于僵尸网络,于是我赶紧一个一个地方排查过来,看看怎么解决。

二、解决过程
1. 我打算先把这个ip屏蔽掉,尝试linux自带的iptables屏蔽/edgeone的cdn屏蔽都没用,这个攻击者还是在正常访问,这时gemini找到了关键点,就是我的网站源站ip是可以直接访问的,流量被引到了到这个网站,攻击者直接扫到我源站ip于是打的是源站(因为源站没法走cdn,根本没有ddos等防护,其他站点都有防护,他打不了)。因为源站走不了edgeone,所以根本没法屏蔽。说明一个问题:我的博客成为了我的默认网站,它不仅负责处理blog.rimurucat.top,还会负责其他没有显式规定路由但是防火墙放行的端口,这里我的源站的80/443端口就是这种情况。
解决方案是新建一个静态网站,在“默认站点”里设置它为默认站点,然后这个网站的作用是直接返回444状态码(nginx专用,代表直接断开连接,这样攻击者就会根本收不到response),这样我没有设置路径解析的(包括源站ip等)全都会去默认网站,实际效果就是chrome显示“xx.xxx.xxx.xxx无法处理该请求”。开了之后看日志,攻击者的确被干没了。


2. 但是这样搞完之后网站还是开不起来,怎么回事?去看wordpress日志,发现php一直报一个fatal error,说找不到某个函数。让gemini看,它说这实际上是一个wp插件作者写代码的时候,路径最前面的反斜杠忘记加了,导致路径错误(因为linux中/开头是绝对路径,不加/就是相对路径),攻击者很可能把wordpress漏洞先扫了一遍,然后正好踩到了这个代码的炸弹,导致网站爆炸了。
解决方式很简单,去对应路径把这个文件夹名字后面加上.bak,代表它是个“备份”不是个“插件”,这样的方式就能禁用这个插件了。
3. 然后重启容器,网站一切正常!但是访问的时候还是显示之前我停用网站的错误页面。这个我熟,这种静态页面出问题一般是cdn缓存问题。我用的是edgeone,去清除缓存界面输入对应的网址清除缓存,半分钟内所有边缘节点就都清完了,再访问,一切正常了!
三、总结
这次发现服务器被打真的太巧了,正好有个插件出问题,不然我绝对发现不了这个漏洞,估计他再打个十天半个月肯定能把我的服务器打下来,到时候就完蛋了。现在已经彻底解决了服务器容易被打的问题,接下来的流量要不直接444断掉,要不直接走edgeone接受监测,除了我的1panel面板入口没有防护,不过1panel本身有算法可以屏蔽恶意ip,而且面板入口有双重防护,被发现的概率很小。