前言
自己的博客突然就无法访问了,Cloudflare 提示 504 错误 。于是自己尝试查找了一下原因,发现应该是上面部署的 WordPress 容器受到了目录扫描攻击导致资源被请求殆尽。
检查流程
最开始以为是最近更新了某个Docker的容器导致的,使用sar命令来查看具体CPU峰值的时间
sar -u -f /var/log/sysstat/sa11
其中-u表示指定需要报告的类型是CPU使用率,-f表示从一个指定的文件中读取历史数据,/var/log/sysstat/是sysstat工具包默认存放历史数据文件的目录,sa11是文件名,sa是 System Activity(系统活动)的缩写,11代表月份中的某一天这里是11日。

我们可以看到07:10开始CPU飙升,代表这段时间出现了问题。因为主机里面的服务基本上都是使用Docker部署的,所以去看这段时间的Docker日志。
journalctl -u docker.service --since "2025-10-11 07:10:00" --until "2025-10-11 07:20:00"

可以看到Docker守护进程无法连接到DNS服务器,这是Linode的DNS服务器。随后Docker的DNS解析器同时处理超过了1024个并发查询导致系统资源耗尽。
现在这个问题有两种可能,一个是某个容器突然发起了大量的DNS查询请求,这最终导致了崩溃。另外一种可能是Linode的DNS服务出现了问题,这导致Docker在不断地重试而最终消耗掉了所有资源。第二种的概率比较低,毕竟Linode两个DNS服务都炸了的概率不高。所以先去各个容器去检查日志。
进一步查找:
在检查WordPress的日志的时候发现了针对WordPress的扫描攻击,攻击是从07:02开始的,扫描了敏感路径和管理页面。可能因为是低速的扫描所以Cloudflare并没有完全拦截到,但……主机配置太低了,然后崩了。
解决流程
并没有想到太好的解决方法,我已经使用了一些Cloudflare的防护,但奈何主机配置太低,又不想加钱。目前主要修改是将后台管理页面的地址换掉了,这样的话扫描到会返回404,机器人(bot)不会连接数据库查询,从而降低性能消耗。同时在 WordPress 容器的YAML文件里面额外做了CPU和内存的限制,防止被攻击后整个主机都崩溃,最大使用80%CPU和768M的内存。
deploy:
resources:
limits:
cpus: '0.8'
memory: 768M