网站访问日志分析:发现并阻断异常请求与扫描行为
摘要:# 网站访问日志,你的第一道“暗哨” 我前两天帮一个朋友看他的小电商站,流量不大,但服务器CPU时不时就飙到100%。他第一反应是“是不是被打了?”,然后琢磨着要不要上个高防。我让他先把最近一周的访问日志拉下来,用记事本打开都行,先看看。 结果不看不知…
网站访问日志,你的第一道“暗哨”
我前两天帮一个朋友看他的小电商站,流量不大,但服务器CPU时不时就飙到100%。他第一反应是“是不是被打了?”,然后琢磨着要不要上个高防。我让他先把最近一周的访问日志拉下来,用记事本打开都行,先看看。
结果不看不知道,一看吓一跳。哪是什么大规模DDoS啊,满屏都是同一个IP,用不同的User-Agent,以每秒几十次的频率,在疯狂试探 /wp-admin、/phpmyadmin、/admin/login.php 这些路径。说白了,这就是个自动化扫描工具在“踩点”,看看你后台管理入口在哪,用的什么系统,有没有已知漏洞。
很多站长一感觉网站“卡了”、“慢了”,第一反应就是上“硬防”,买高防IP。这就像家里门锁老响,你还没看清是小孩玩闹还是小偷撬锁,就先想着要筑一道城墙。钱花了,问题可能还在那儿,甚至更隐蔽了。
网站访问日志,就是你服务器上那个24小时不眠不休的“暗哨”。它默默记录着每一个来访者的行踪:谁(IP)、什么时候(时间)、想干什么(请求路径)、用什么身份来的(User-Agent)、成功了吗(状态码)。很多安全问题,甚至业务异常,在它面前都像裸奔。
日志里藏着哪些“妖魔鬼怪”?
别被“分析”俩字吓到,咱们不是要搞大数据。你就带着几个最朴素的问题去看,立马就能发现端倪。
第一类:扫地的“保洁阿姨”(但没安好心) 这就是开头我朋友遇到的情况。特征极其明显:
- 请求路径:大量请求针对的是管理后台、数据库管理页面、安装脚本、备份文件等敏感路径。比如
/admin/、/wp-login.php、/data/backup.sql。 - 频率:来自单个或少数几个IP的请求频率极高,但访问的页面毫无规律(对人类用户而言),就像在挨个试门把手。
- 状态码:返回大量 404(未找到) 或 403(禁止访问)。这说明对方在“盲扫”,碰运气。
(我见过最离谱的,一个IP在5分钟内对我的一个测试站发出了8000多次请求,全是扫各种框架和CMS的漏洞路径,简直是把互联网当自家后花园在翻。)
第二类:薅羊毛的“专业团队” 这比扫描更隐蔽,目标是你的业务逻辑。比如:
- 秒杀/抢券活动:同一个用户(或同一批IP)在毫秒级时间内重复提交订单。日志里你会看到同一个API接口被疯狂调用。
- 内容爬虫:短时间内爬取大量内容页,User-Agent可能伪装成普通浏览器,但请求节奏极其规律(比如每秒固定2次),并且只爬取列表页和详情页,不加载任何静态资源(JS/CSS/图片),因为那样慢。
- 撞库攻击:在登录接口,用大量不同的账号密码组合尝试登录。日志里会看到
/login接口收到海量POST请求,并且伴随着大量的 401或200但登录失败 的状态码。
第三类:“自己人”的误操作 有时候问题出在内部。比如:
- 某张页面上的一个错误链接,导致用户(或搜索引擎蜘蛛)不断请求一个不存在的URL,产生海量404。
- 某个新上线的功能,前端代码写岔了,在循环里疯狂调用某个API,把自己服务器打挂了。
- 某位心急的运营同事,不停手动刷新后台数据报表页面,也可能带来不必要的负载。
别光看着,怎么动手“抓”?
知道了有啥用,关键是怎么把它揪出来并拦住。这事儿可以分三步走,从“手工作坊”到“自动化工厂”。
第一步:人肉盯梢(适合所有站点,立刻就能做) 对于小站、低频问题,最直接有效。把日志文件下载到本地,用一些简单的文本工具就能分析。
- 在Linux服务器上:
grep、awk、sort、uniq这几个命令是你的瑞士军刀。比如,找出返回404最多的10个请求:awk '{print $7, $9}' access.log | grep ' 404' | sort | uniq -c | sort -rn | head -10 - 在Windows上或想更直观:把日志文件扔到 Notepad++ 里,用它的搜索功能。或者,用 Excel 或 WPS表格 打开(需要先处理一下格式),用数据透视表。你可以轻松按IP、按状态码、按URL路径进行排序和计数。
(我自己刚入行那会儿,就靠着一手Excel透视表分析日志,挖出了第一个恶意爬虫,成就感爆棚。工具土,但有效。)
第二步:用现成的轻量级工具 如果你觉得命令行太geek,可以试试一些免费、开源的可视化日志分析工具。
- GoAccess:一个在终端里运行的实时日志分析工具,能生成非常漂亮的交互式报告,直接告诉你哪些IP访问最多、哪些页面最热门、哪些状态码异常。部署简单,速度快。
- AWStats / Webalizer:更传统一些,但分析维度很全,能生成静态的HTML报告,可以定期跑。
这类工具能帮你把零散的日志数据,快速聚合成可读的报表,让你一眼看出“谁在搞事情”。
第三步:上“全家桶”,自动化防御 当你发现手动处理不过来了,或者需要7x24小时实时防护时,就该考虑把日志分析和防护动作联动起来。
- WAF(Web应用防火墙)的日志分析模块:现在稍微好点的云WAF或硬件WAF,都自带日志分析和威胁情报功能。它能自动识别扫描、SQL注入、XSS等常见攻击模式,并自动拦截。你只需要在控制台看报警就行了。
- SIEM(安全信息和事件管理)系统:这是企业级方案。它能收集你服务器、防火墙、WAF等所有设备的日志,进行关联分析。比如,它发现同一个IP先在日志里扫后台,几分钟后又在防火墙日志里尝试暴力破解SSH,就会立刻判定为高危攻击,并通知你。
- 自定义脚本+防火墙联动:这是高阶玩法。写一个脚本(Python/Shell都行),定时分析最新日志,一旦发现某个IP在短时间内触发大量404或403,就自动调用云服务商API或iptables命令,把这个IP给临时封禁一段时间。说白了,就是给自己造一个智能的“暗哨”。
几个容易被忽略的“实用偏方”
- 别只盯着“访问日志”(access.log)。错误日志(error.log) 才是宝藏。里面记录了服务器处理请求时真正的“内心戏”:哪个文件找不到、哪个PHP函数出错了、数据库连接失败……很多攻击尝试(比如路径遍历、代码注入)会在访问日志里留下正常请求,却在错误日志里暴露马脚。
- 给正常用户“画像”。先搞清楚你网站正常用户的访问模式:他们主要来自哪些地区(IP段)?用什么浏览器和设备?访问哪几个主要页面?摸清了这个“基线”,任何偏离这个基线的行为(比如来自陌生国家IP的、用着奇怪旧版本浏览器的、疯狂爬取非热门页面的),都值得你多看一眼。
- 状态码“404”不是敌人,是朋友。一个健康的、面向公众的网站,有一定比例的404非常正常。但如果你发现某个特定路径的404请求暴增,或者某个特定IP制造了大量随机路径的404,那警报就该响了。前者可能是你的链接坏了,后者基本可以断定是扫描。
最后说点大实话
很多公司,尤其是创业团队,安全预算有限。一提到安全,就想着买最贵的WAF、上最高配的高防。不是说这不对,但访问日志分析,是性价比最高的安全投入,没有之一。它几乎零成本(日志本来就在产生),却能让你从被动挨打,变成主动发现。
防护方案再牛,也是基于已知的规则和模式。而日志里记录的,是正在发生的、最真实的一手攻击数据。你通过分析日志发现的某种新型扫描特征,可能比安全厂商的威胁情报库更新得更快。
所以,别让你服务器上的那些日志文件躺在硬盘里“吃灰”了。定期翻一翻,哪怕就像看监控录像一样随便瞅瞅。你可能就会发现,那个让你网站变慢的“元凶”,根本不是想象中的洪水猛兽,而只是一只不断在挠你家门锁的“小耗子”。
找到它,然后,轻轻地把门锁好,或者放个捕鼠夹。
行了,不废话了,看日志去吧。

