chaihongjun.me

屏蔽疯狂抓取数据的meta(facebook)爬虫meta-externalagent

最近开发网站考虑到做GEO优化的需要,所以在编写robots.txt还特意做了细致区分。结果发现网站后台的redis疯狂的几乎是无限制的产生规则诡异的缓存键,寻求AI之后得知可能是爬虫或者扫描器之类的行为。

于是我远程SSH登录服务器,使用tail动态查询网站日志情况,结果日志是疯狂的增加内容。罪魁祸首就是它:

meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)

想到服务器有安装fail2ban,于是再次询问怎么匹配UA进行i屏蔽,于是有了如下操作:

1.首先是编辑一个新的过滤器配置文件:

 vi /etc/fail2ban/filter.d/block-meta-crawler.conf

填写如下内容:

[Definition]
failregex = ^ -.*"(GET|POST|HEAD).*meta-externalagent.*"
ignoreregex =

2. 再配置jail启用这个规则

vi  /etc/fail2ban/jail.local

填写如下内容:

[block-meta-crawler]
enabled = true
port = http,https
filter = block-meta-crawler
logpath = /path/to/your/website
maxretry = 1
findtime = 300
action = iptables-multiport[name=block-meta-crawler, port="http,https", protocol=tcp]

注意,logpath换成你的日志绝对路径,然后再

systemctl restart fail2ban

让新的规则就生效了。

这样就让meta(facebook)爬虫meta-externalagent无法爬取了,终于消停了,当然,在nginx配置里也可以怎加一个配置:

  # 匹配包含 meta-externalagent 的 User-Agent
    if ($http_user_agent ~* "meta-externalagent") {
        return 444;
    }

最后,需要说明的是,如果只是配置nginx,那么日志文件依然膨胀,而使用fail2ban之后,日志清净多了,再次去网站后台检查redis缓存键,发现终于恢复正常了。

截止发完博客,fail2ban 依然在努力的工作:

屏蔽疯狂抓取数据的meta(facebook)爬虫meta-externalagent

知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»屏蔽疯狂抓取数据的meta(facebook)爬虫meta-externalagent