网站如何屏蔽垃圾蜘蛛爬取?

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

网站一般欢迎蜘蛛访问,因为蜘蛛意味着搜索排名和流量,但有时候,大量垃圾蜘蛛甚至爬虫访问很影响性能,特别是服务器配置不高的情况下,那么我们该怎样屏蔽掉垃圾蜘蛛呢?

一般来说,屏蔽蜘蛛的爬取有三种方法:

  • Robots 禁封
  • UA 禁封
  • IP 禁封

一、Robots 禁封

Robots 协议(也称为爬虫协议、机器人协议等)的全称是 “网络爬虫排除标准”(Robots Exclusion Protocol),用来告诉搜索引擎、爬虫哪些页面可以抓取,哪些页面不能抓取。

Robots 协议在网站中体现在根目录下的 robots.txt 文件,一般格式入下:

User-agent: YisouSpider
Disallow: /
User-agent: EasouSpider
Disallow: /
User-agent: *
Disallow: /admin/

正规 Robot 在爬取网站前都会先读取该文件,根据 robots.txt 指示爬取:

ROBOTS.TXT.png

但是由于 Robots 协议并不是一个规范,而是约定俗成的,所以只能引导正规蜘蛛爬取,并不能阻止垃圾蜘蛛,因此要屏蔽流氓垃圾蜘蛛还需要其他更严格的措施来配合。

二、UA 禁封

UA(User Agent)中文名为用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等,大多数蜘蛛都有携带此信息,如谷歌 Chrome 浏览器 Windows 版本 UA 是:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36

针对指定 UA 的访问,返回预先设定好的异常页面(如 403,500)或跳转到其他页面的情况,即为 UA 禁封。

Nginx 下,可以单独创建一个配置文件,如 deny-robots.conf,并将文件添加到 nginx.conf 或网站配置中,然后重新加载 Nginx 即可。

例如 deny-robots.conf 在 /etc/nginx/conf/ 文件夹下,deny-robots.conf 内容:

if ($http_user_agent ~ "InetURL|Pcore-HTTP|PocketParser|Wotbox|SEMrushBot|newspaper|DnyzBot|Mechanize|redback|ips-agent|Sogou Pic Spider|python-requests|PiplBot|SMTBot|WinHTTP|Auto Spider 1.0|GrabNet|TurnitinBot|Go-Ahead-Got-It|Download Demon|Go!Zilla|GetWeb!|GetRight|libwww-perl|Cliqzbot|MailChimp|SMTBot|Dataprovider|XoviBot|linkdexbot|feedreader|SeznamBot|Qwantify|spbot|evc-batch|zgrab|Go-http-client|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$")
  {
  return 444;
  }

则在网站配置中添加:

server {
......
include deny-robots.conf
......
}

然后,service nginx reload 即可生效,Apache 等其他软件操作类似。

解释一下,这个配置的意思是 判断访问者 UA 是否包含引号中的字符串,若为真,则返回错误码 444,其中错误码 444 是 nginx 独有的错误码,表示服务器不返回任何数据,直接丢弃。

RESPONSE.EMPTY.png

根据访问日志,我也整理了一份清单上传到 GitHub,链接:vircloud/bots,可以作为参考。

由于 UA 禁封是由 Nginx 或 Apache 等已经到应用层才处理,因此即使已经禁止爬取访问,蜘蛛仍然会先与服务器创建连接,浪费资源,为此,针对特别流氓的蜘蛛,可以通过防火墙在底层拒绝连接。

三、IP 禁封

IP 禁封是指利用系统自带防火墙,拒绝蜘蛛 IP 连接,此措施最为严格,且针对有特定 IP 蜘蛛,如果 IP 是随机变动的, IP 禁封意义也不大。

举例, 有 UA 为 ”WF search/Nutch-1.12“ 的蜘蛛,通过 IP 183.94.118.76 与服务器产生大量连接访问,影响到正常运行,则通过以下命令禁止连接(CentOS7):

FIREWALLD.DENY.png

生效后此 IP 将无法再与服务器产生连接:

FIREWALLD.DENY.2.png

同样的,我也整理了一份清单上传到 GitHub,链接:vircloud/ips,可以作为参考。

当然了,思想有多远,就有多少方法去屏蔽垃圾蜘蛛爬取,并不局限于上述三个方法,大家都可以去试试。


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 屏蔽网络蜘蛛网站 的文章

 本文最后更新于 2019/05/16 11:43:48,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 运维 > 网站如何屏蔽垃圾蜘蛛爬取?

精选评论

  1. littleplus
    littleplus 回复

    Windows 7Chrome 56.0.2924.87来自 海南 的大神

    真正辣鸡蜘蛛是带普通电脑UA或Google等大佬的UA的,通过UA根本无可奈何2333

    1. VirCloud

      所以需要 IP 封禁 ≖‿≖

  2. Terry
    Terry 回复

    Windows 7Chrome 75.0.3770.142来自 北京 的大神

    vps太弱被垃圾爬虫直接干死了,禁UA后好多了

  3. test
    test 回复

    Windows 10Chrome 69.0.3497.100来自 海南 的大神

    207.46.13.81
    好像是非法IP

    1. 欧文斯

      这个有点像是 MSN 的蜘蛛,可以加上访问日志判断一下,如果是正常的链接,那就没错了,如果访问的都是不存在的链接,那十有八九是垃圾 IP

  4. ip
    ip 回复

    Windows 10Chrome 78.0.3904.108来自 海南 的大神

    日志发现几个伪造搜索引擎的IP
    deny 58.221.47.24;deny 180.97.224.172;deny 58.221.46.89;deny 58.221.71.54;

    1. 欧文斯

      正常,高级一点的爬虫各种伪装,甚至还将 RDNS 设成跟正常搜索引擎一模一样的,难以辨别

      1. test
        test 回复

        Windows 10Chrome 78.0.3904.108来自 海南 的大神

        不是吧,还有差不多一样的rdns ??发个来看看。

        1. 欧文斯

          现在手上没有现成的,改天遇到再给你看看。对于大厂来说 RDNS 是有很严格的管理,至少要通过域名验证,但是像 DigitalOcean、CloudCone 等等 VPS 厂商,对这个根本没有管控,即使域名不是自己的,也是可以设置 RDNS,所以伪装成正常蜘蛛的 IP 大多来自于这些厂商。

          1. test
            test 回复

            Windows 10Chrome 78.0.3904.108来自 海南 的大神

            那就好,我还以为能伪装成百度rdns

          2. 欧文斯

            你以为的没错,可以的。所以光看 RDNS 不够,还要看 IP,刚说的那几家都是可以将 RDNS 设置成类似 baiduspider-123-125-66-120.crawl.baidu.com. 这种的,不过搜索引擎的爬虫 IP 段都比较固定,如果出现 baiduspider-133-125-66-120.crawl.baidu.com. 就显然不是真的蜘蛛。

  5. test
    test 回复

    Windows 10Chrome 78.0.3904.108来自 海南 的大神

    bot.semrush.com.
    SemrushBot
    貌似也是个流氓蜘蛛

    1. 欧文斯

      对的,这个现在我是通过防火墙直接把 IP 阻挡了

  6. test
    test 回复

    Windows 10Chrome 78.0.3904.108来自 海南 的大神

    https://i.loli.net/2020/11/19/FYINHk9X5qsRyCB.jpg
    哎,刚才发现大量不明采集IP,已经封了几十个IP了,截图里面的还在不断冒出来。
    Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 LieBaoFast/4.51.3
    这是UA特征,看着也不像什么搜索引擎啊。。查询IP基本都是江苏的。然后我直接封了关键字【LieBaoFast】才算安静下来。。。

    1. test
      test 回复

      Windows 10Chrome 78.0.3904.108来自 海南 的大神

      oh,no。 icon_sad.gif 。。。if ($http_user_agent ~* "LieBaoFast"){return 444;} 无效??还是不停的采集

      1. test
        test 回复

        Windows 10Chrome 78.0.3904.108来自 海南 的大神

        117.95.111.79 - - [19/Nov/2020:22:33:57 0800] "GET /网址 HTTP/1.1" 200 20149 "-" "Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 LieBaoFast/4.51.3"

        返回200 icon_sad.gif 我哪里设置错了?

        1. 欧文斯

          看配置是没问题的,可能是位置不对

      2. 欧文斯

        可能是放的位置不对

    2. 欧文斯
      1. test
        test 回复

        Windows 10Chrome 78.0.3904.108来自 海南 的大神

        太多了,不仅仅江苏的,还有其他地区的,一个IP还变了至少3个UA特征,像是被CC了,但这么大量IP的CC,我服务器好像没啥感觉。。 icon_eek.gif 我还以为会很卡,如果卡我就警觉了,但不卡。。 icon_eek.gif

        1. 欧文斯

          一个IP还变了至少3个UA特征,明显就是刷流量的了 icon_mrgreen.gif ,静态页面流量不大的话确实没啥感觉

          1. test
            test 回复

            Windows 10Chrome 78.0.3904.108来自 海南 的大神

            动态页面,我看了一下日志,很大一部分是江苏那边的IP,还有少数其他地区的,访问地址基本都是乱访问,还有一些不存在的地址也是频繁访问。

          2. 欧文斯

            看看同一个 IP 频度多大,就一次那就放过,很多次就拉黑名单,我自己整理的:https://github.com/vircloud/ips,可以拿来用用看

          3. test
            test 回复

            Windows 10Chrome 78.0.3904.108来自 海南 的大神

            这个IP列表我看过,不过没有那些IP段,所以我没用,现在突然风平浪静了,不知道是不是攻击累了,还是换了UA,看LOG暂时没有找到那些UA了。应该是CC,如果刷流量的话,51.la没有统计到。。

          4. 欧文斯

            嗯嗯,没影响忽略掉就是 icon_lol.gif

          5. test
            test 回复

            Windows 10Chrome 78.0.3904.108来自 海南 的大神

            icon_arrow.gif 有木有异常日志分析工具之类的,想看看有没有遗漏。。
            deny IP 返回403,如果返回444就好了,不知道nginx怎么没有返回特色444。。。 icon_neutral.gif

          6. 欧文斯

            没有,纯人工判断 ~
            Nginx 支持 map,这个方法可以 444,具体你可以搜一下看看