通过User Agent,可以禁止一些我们想禁止掉的访问,下午,大叔发生nginx日志中好多奇怪的访问抓取记录,特别是利用ApacheBench进行的恶意检测,于是立刻跟6P协会一起讨论起来,根据碗叔和维维的经验,整理了以下教程,方便自己和其他站长学习吧!
一、Apache
①、通过修改 .htaccess文件
修改网站目录下的.htaccess,添加如下代码即可(2种代码任选):
可用代码 (1):
- RewriteEngine On
- RewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) [NC]
- RewriteRule ^(.*)$ - [F]
可用代码 (2):
- SetEnvIfNoCase ^User-Agent$ .*(FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) BADBOT
- Order Allow,Deny
- Allow from all
- Deny from env=BADBOT
②、通过修改httpd.conf配置文件
找到如下类似位置,根据以下代码 新增 / 修改,然后重启Apache即可:
- DocumentRoot /home/wwwroot/xxx
- <Directory "/home/wwwroot/xxx">
- SetEnvIfNoCase User-Agent ".*(FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms)" BADBOT
- Order allow,deny
- Allow from all
- deny from env=BADBOT
- </Directory>
二、Nginx代码
进入到nginx安装目录下的conf目录,将如下代码保存为 agent_deny.conf
cd /usr/local/nginx/conf
vim agent_deny.conf
- #禁止Scrapy等工具的抓取
- if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
- return 403;
- }
- #禁止指定UA及UA为空的访问
- if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
- return 403;
- }
- #禁止非GET|HEAD|POST方式的抓取
- if ($request_method !~ ^(GET|HEAD|POST)$) {
- return 403;
- }
然后,在网站相关配置中的 location / { 之后插入如下代码:
保存后,执行如下命令,平滑重启nginx即可:
- /usr/local/nginx/sbin/nginx -s reload
三、PHP代码
将如下方法放到贴到网站入口文件index.php中的第一个 <?php 之后即可:
- $ua = $_SERVER['HTTP_USER_AGENT'];
- $now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','YisouSpider','jikeSpider','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot');
- if(!$ua) {
- header("Content-type: text/html; charset=utf-8");
- wp_die('请勿采集本站,因为采集的站长木有小JJ!');
- }else{
- foreach($now_ua as $value )
- if(eregi($value,$ua)) {
- header("Content-type: text/html; charset=utf-8");
- wp_die('请勿采集本站,因为采集的站长木有小JJ!');
- }
- }
四、测试效果
如果是vps,那非常简单,使用curl -A 模拟抓取即可,比如:
模拟宜搜蜘蛛抓取:
- curl -I -A 'YisouSpider' 2zzt.com
模拟UA为空的抓取:
模拟百度蜘蛛的抓取:
- curl -I -A 'Baiduspider' 2zzt.com
根据结果,可以看出,宜搜蜘蛛和UA为空的返回是403禁止访问标识,而百度蜘蛛则成功返回200,说明生效!
了解到这步,在根据自己访问日志里奇怪的spider名称,进行实际的可需的禁止吧!
五、附录:UA收集
下面是网络上常见的垃圾UA列表,仅供参考,同时也欢迎你来补充。
- FeedDemon 内容采集
- BOT/0.1 (BOT for JCE) sql注入
- CrawlDaddy sql注入
- Java 内容采集
- Jullo 内容采集
- Feedly 内容采集
- UniversalFeedParser 内容采集
- ApacheBench cc攻击器
- Swiftbot 无用爬虫
- YandexBot 无用爬虫
- AhrefsBot 无用爬虫
- YisouSpider 无用爬虫
- jikeSpider 无用爬虫
- MJ12bot 无用爬虫
- ZmEu phpmyadmin 漏洞扫描
- WinHttp 采集cc攻击
- EasouSpider 无用爬虫
- HttpClient tcp攻击
- Microsoft URL Control 扫描
- YYSpider 无用爬虫
- jaunty wordpress爆破扫描器
- oBot 无用爬虫
- Python-urllib 内容采集
- Indy Library 扫描
- FlightDeckReports Bot 无用爬虫
- Linguee Bot 无用爬虫
最后,作为一名wordpress博客主又肩负着自己维护服务器的朋友们,创作吧,骚年!