去年秋天,检测击工具我帮一个做独立站的网站朋友看服务器日志。他那段时间总抱怨网站打开慢,被攻偶尔还跳转到博彩页面。检测击工具查了三天,网站发现攻击者根本没碰他的被攻后台,而是检测击工具利用一个过期的插件漏洞,往数据库里塞了恶意脚本。网站这事让我意识到,被攻多数人判断网站是检测击工具否被攻击,还停留在“打不开就是网站被打了”的阶段。实际上,被攻攻击的检测击工具痕迹往往藏在更细碎的地方。
先说一个最容易被忽略的网站信号:流量来源的突变。正常情况下,被攻你的访客地域分布基本稳定。如果某天凌晨突然涌入大量来自越南、巴西的IP,而你的业务根本不覆盖这些地区,那八成是有人在扫端口或者发起CC攻击。我习惯用GoAccess实时看日志,它能按国家、操作系统、请求路径分类。有次我发现某个IP每秒请求同一个URL两百多次,User-Agent字段却是空的——正常浏览器不会这样。
另一个实用工具是Wireshark,不过它更适合有一定网络基础的人。抓包能看到异常TCP连接,比如大量SYN包但没完成三次握手,这是典型的SYN Flood。普通站长没必要天天开着它,但在怀疑被DDoS时,抓几分钟包比看任何监控图表都直接。我见过一个案例,攻击者用慢速POST请求拖垮服务器,每个连接只发几个字节,Wireshark里看得清清楚楚——这种攻击连Nginx的访问日志都记不全。
文件完整性监控是另一条路。AIDE或者Tripwire这类工具会计算网站目录下所有文件的哈希值。如果某个PHP文件在半夜被修改,哈希对不上,你就知道出事了。我自己的博客用了一个简单的shell脚本,每天凌晨跑一次md5sum,结果存到另一个服务器。有次它报警,发现是攻击者往wp-config.php里插了一行代码,用来加载远程恶意脚本。那行代码写得很隐蔽,混在注释里,肉眼根本看不出来。
数据库层面也别放过。SQL注入攻击成功后,攻击者常会在文章表里留后门。你可以定期搜索包含“eval”、“base64_decode”、“