使用 .htaccess文件屏蔽恶意IP和爬虫

不知为何,自从换了域名以后,每天博客里的真实访客没几个,反而一些恶意 IP 和爬虫却越来越多,远比换域名前来的规模要大,加上用的是便宜共享虚拟主机,博客很容易被爬出 500 错误,所以来试试用 .htaccess 文件屏蔽之。

User-Agent 屏蔽爬虫

用判断 User-Agent 的方法来屏蔽很多不遵守 robots 协议的爬虫:将如下代码添加到博客根目录的 .htaccess 文件中,如果已有其他重写规则,直接把 RewriteCond 和 RewriteRule 行插入到紧挨着 RewriteEngine On 行下方。

1<IfModule mod_rewrite.c>
2RewriteEngine On
3RewriteCond %{HTTP_USER_AGENT} (^$|FRD-AL00|HttpClient|Mb2345Browser|LieBaoFast|OPPO\sA33|AspiegelBot|python|scrapy|Crawl|Go-http-client|package|AhrefsBot|Re-re|domainsproject|serpstatbot|Nimbostratus-Bot|coccocbot-web|SMTBot|panscient) [NC]
4RewriteRule ^.*$ - [F,L]
5</IfModule>

规则解释

RewriteCond %{HTTP_USER_AGENT} 后的括号中放置各种 User-Agent 关键词,用 “|” 间隔;结尾处的 [NC] 是忽略大小写;RewriteRule ^.*$ - [F,L] 是成功匹配上述条件的访问,任意路径都会返回 403 Forbidden 且不再执行下面的其他规则。

建议添加的几种 User-Agent

^$:匹配 User-Agent 为空的访问者,很少有正常访问者不带着 UA。

Python|scrapy|Crawl|Go-http-client|HttpClient|curl:一些不严谨的开发者会用爬虫工具默认的 User-Agent 来爬数据,这些工具通常会带这些标识。

AspiegelBot|AhrefsBot|Re-re|domainsproject|serpstatbot|Nimbostratus-Bot|coccocbot-web|SMTBot|panscient 等:完全不遵循 robots 协议的商业爬虫,通常第一次访问就直接爬取你的全站数据,而且丧心病狂的是不设置访问间隔,很多博主反馈被坑过。

Mb2345Browser|LieBaoFast|FRD-AL00|OPPO\sA33:针对一些特定的设备或浏览器屏蔽。Mb2345Browser 是 2345 浏览器、LieBaoFast 是猎豹极速浏览器;FRD-AL00 和 OPPO\sA33 分别对应一款华为手机和一款 OPPO 手机型号,早些时候有个爬虫伪造这些 User-Agent 来采集。

注意不要直接使用 bot、spider 等关键词,以免屏蔽谷歌百度等正常搜索引擎蜘蛛。

屏蔽指定 IP

上述方法只适用于在 User-Agent 中有特定签名的爬虫,有更多的恶意请求会伪装成普通浏览器访问,使用 IP 封禁的方法会更有效。在.htaccess 文件中添加配置:

Apache 2.3 以下版本,Deny from 每行放一个被禁止的 IP:

1Order Allow,Deny
2Allow from all
3Deny from 111.111.111.111
4Deny from 222.222.222.222

Apache 2.3 及以上版本,同样每行一个 IP:

1<RequireAll>
2Require all granted
3Require not ip 111.111.111.111
4Require not ip 222.222.222.222
5</RequireAll>

同样方法也可用来屏蔽整个 IP 段。

其他方法

上面两种方法是博主目前在用的,也只是为图方便。.htaccess 文件实现同样功能的写法有很多种,具体可参看其他教程。

以前也曾用过几个设置.htaccess 黑名单的工具:

1、已更新到 6G Firewall 2020 的系列防火墙,专为 WordPress 定制。

2、MYIP.MS 提供的黑名单 IP 数据库,有写好的 PHP 代码,可放到博客里自动定时更新.htaccess 文件。

3、AbuseIPDB 的恶意 IP 数据库,官方有各种 API 可供使用。

其实屏蔽 IP、禁止访问的方法有很多种。如果是云服务器,直接用服务商如阿里云提供的云盾,可以拦截很多恶意请求;或者 Linux 设置 iptables 等防火墙;如果对 Apache 或 Nginx 有控制权,可添加配置文件;再有一些 CDN 也有类似功能的防火墙。但博主用的虚拟主机,只能退而求其次,用.htaccess 文件来屏蔽恶意 IP 和爬虫。当然也能在前后端代码层面设置,比如 WordPress 博客有很多插件可用。

话说回来,Apache 官方不是很推荐用 .htaccess 文件:

You should avoid using .htaccess files completely if you have access to httpd main server config file. Using .htaccess files slows down your Apache http server. Any directive that you can include in a .htaccess file is better set in a Directory block, as it will have the same effect with better performance.

如果您可以访问服务器 httpd 配置文件,则应该避免使用.htaccess 文件。使用.htaccess 文件会降低 Apache http 服务器的速度。任何可以包含在.htaccess 文件中的指令最好设置在一个目录块中,因为它在相同的效果下有更好的性能。



标签: 爬虫, htaccess

添加新评论 »