查询并禁止apache中异常访问量的用户
来源:互联网 发布:腾讯云mysql 外网连接 编辑:程序博客网 时间:2024/05/16 09:43
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-fileSetEnvIfNoCase Request_URI \.gif$ useless-fileSetEnvIfNoCase Request_URI \.ico$ useless-fileSetEnvIfNoCase Request_URI \.jpg$ useless-fileSetEnvIfNoCase Request_URI \.js$ useless-fileCustomLog logs/fwolf.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.1982047 218.12.78.142149 218.12.26.2332205 121.28.4.34
第一列就是访问次数,第二列是ip地址,再回去对照log文件中的详细内容,如果发现哪个访问量大户是某某机器人的话,就可以禁止掉了,还是修改apache的conf文件:
<Directory /> Order Deny,Allow Deny from 219.143.69.2 Deny from 218.12.26.233 Deny from 61.135.162.51 Allow from all</Directory>
如此反复监测、设置,直到没有人捣乱为止。
同理,如果想查看反复刷新查看某一页面的用户,可以用如下命令:
grep "GET /url/to/some/file" access.log |awk '{print $1}' |sort |uniq -c |sort -n
8 thoughts on “查询并禁止apache中异常访问量的用户”
0 0
- 查询并禁止apache中异常访问量的用户
- 查询并禁止apache中异常访问量的用户
- 查询并禁止apache中异常访问量的用户
- 查询并禁止apache中异常访问量的用户
- 找出apache日志中访问量最大的IP
- sql中如何查询出访问量最多的月份
- 禁止外部用户访问apache上的phpMyAdmin
- 统计apache日志文件里访问量前十的ip并按从多到少排列
- 统计apache日志文件里访问量前十的ip并按从多到少排列
- 统计apache日志文件里访问量前十的ip并按从多到少排列
- 禁止用户查询某个列
- Java Web实现统计网站用户访问量并持久化的问题
- subversion+apache配置中禁止访问权限的问题
- linux中禁止root用户ssh远程登录并修改ssh远程登录端口
- jeecms用户绑定查询异常
- CentOS 6.3允许FTP用户登录并禁止Shell登录的方法
- 查看apache IP访问量
- 查看apache IP访问量
- VeiwPager、Gallery、ViewFlipper区别
- 今天看到别人关于bundle pmvs的信息就转载一下
- PHP中token验证
- Bootstrap-sass<1>安装与基本结构
- Java学习提要——overloading与override,this.与super()
- 查询并禁止apache中异常访问量的用户
- 傻子也能看懂的迪杰斯特拉算法(转)
- 关于android studio 安装Genymotion插件遇到的问题
- CentOS7安装配置RabbitMQ
- Jump Game leetcode
- 数组(Array) 与 智能指针
- Dividing(多重和问题)
- NBUT OJ 1641 错误的算法 暴力题
- Android自定义二级联动菜单
没又是一篇让我受益而且尝试之后确实有用的文章。谢谢
我建议最后的 sort用 sort -nr 这样访问最大的网站排在前面。配合 |less ,使用起来更方便。
在man sort中说了 -n 是以数字顺序排列,-r是反向排列(reverse)
特别喜欢你对awk的解释。一直没明白
推荐你看看 howtoforge.com 有些对你会有帮助。
希望你坚持。将来也有个中文的howtoforge。hehe
Reply
谢谢补充,howtoforge我也看过,里面的文章还是非常浅显的,不错的网站。
Reply
很好的方法,转了,非常感谢
Reply
小站的话我就直接用限制并发和带宽的模块和Apache一起工作,如果是扫描等大流量的话 可以用Portsentry等方式而大网站的话 程序解决,而awstats等来做数据分析再解决也简单.如果在apache上做Deny的话,效率很大折扣
Reply
SetEnvIfNoCase Request_URI “.(gif)|(jpg)|(png)|(css)|(js)|(ico)$” uselessfile
Reply
那个,应该把Allow from all去掉?
Reply
Fwolfreply on October 27th, 2009 11:30:34:
去不去掉效果应该是一样的。
Reply
hi there最后的conf文件好像写错了吧,Order Deny,Allow应该是Order Allow,Denyorder是指定deny和order的顺序,如果按照你的写法,先deny指定的ip,然后又allow from all,最后的结果应该是allow from all。你指定的ip没有被屏蔽。是我记错了还是你写错了,请问你经过测试了吗?