Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3046108
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类:

2008-01-04 13:15:36

本文转自:http://www.fwolf.com/blog/post/331
 
原文如下:
 
Apache中的异常访问,通常指的是频繁、大量访问的用户,通过apache的log,结合linux下的几个命令,可以分析这些用户,并通过apache的配置文件来禁止他们访问。
首先,更改apache的log方式,不记录一些图像、css等文件,这样在log中每一行基本上都能对应一次访问,如果不去除图像等文件的记录,正常用户访问一个页面,同时也会下载页面上的图像、css等文件,会产生多条log记录,影响计数的结果。在apache的conf文件中增加如下配置:
SetEnvIfNoCase Request_URI .css$ useless-file
SetEnvIfNoCase Request_URI .gif$ useless-file
SetEnvIfNoCase Request_URI .ico$ useless-file
SetEnvIfNoCase Request_URI .jpg$ useless-file
SetEnvIfNoCase Request_URI .js$ useless-file
CustomLog logs/hebgc.com/access.log combined env=!useless-file
这样就可以了,关于SetEnvIf的其他用法,可以参见Apache文档中SetEnvIf和Environment Variables in Apache部分。
接下来,经过一段时间的运行,我们就可以分析log文件中访问量最大的用户了,只需要一条命令:
cat access.log |awk '{print $1}'| sort | uniq -c |sort -n
一点点的来看:
cat就不用说了;
awk的作用,就是把第一列,也就是客户端ip地址分拣出来;
第一个sort,是把分拣出来的ip地址排序,这样相同的ip地址会排在一起
uniq是一个去除重复值的工具,但是带上-c参数,就可以统计出每个值出现了多少次
最后的sort,把uniq产生的结果进行排序,按照-n这个参数的默认设置,最大的排在最下面。
所以,我们得到的结果应该是这样的:
......
2040 219.148.106.198
2047 218.12.78.14
2149 218.12.26.233
2205 121.28.4.34
第一列就是访问次数,第二列是ip地址,再回去对照log文件中的详细内容,如果发现哪个访问量大户是某某机器人的话,就可以禁止掉了,还是修改apache的conf文件:

    Order Deny,Allow
    Deny from 219.143.69.2
    Deny from 218.12.26.233
    Deny from 61.135.162.51
    Allow from all
如此反复监测、设置,直到没有人捣乱为止。
同理,如果想查看反复刷新查看某一页面的用户,可以用如下命令:
grep "GET /url/to/some/file" access.log |awk '{print $1}' |sort |uniq -c |sort -n
阅读(1690) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~