本章目录
[TOC]
0x00 Nginx 封禁 DataForSeoBot、SemrushBot、AhrefsBot、MJ12bot 等恶意爬虫方法 前面简述: 今天早上发现博客网站流量出现异常,登录到服务器后查看nginx日志发现,被 DataForSeoBot 爬虫恶意拉取了博客中的文章,遂出现本文。
weiyigeek.top-恶意爬虫图
DataForSeoBot、SemrushBot、AhrefsBot、MJ12bot 在 Google 后发现是国外的 SEO 爬虫,这些恶性爬虫不会带来流量,还因为大量的抓取请求,造成主机的CPU和带宽资源浪费,所以需要对其屏蔽。
如何屏蔽无用的垃圾蜘蛛爬虫?
本章目录
[TOC]
0x00 Nginx 封禁 DataForSeoBot、SemrushBot、AhrefsBot、MJ12bot 等恶意爬虫方法 前面简述: 今天早上发现博客网站流量出现异常,登录到服务器后查看nginx日志发现,被 DataForSeoBot 爬虫恶意拉取了博客中的文章,遂出现本文。
weiyigeek.top-恶意爬虫图
DataForSeoBot、SemrushBot、AhrefsBot、MJ12bot 在 Google 后发现是国外的 SEO 爬虫,这些恶性爬虫不会带来流量,还因为大量的抓取请求,造成主机的CPU和带宽资源浪费,所以需要对其屏蔽。
如何屏蔽无用的垃圾蜘蛛爬虫?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 User-agent: AhrefsBot Disallow: / User-agent: DotBot Disallow: / User-agent: SemrushBot Disallow: / User-agent: Uptimebot Disallow: / User-agent: MJ12bot Disallow: / User-agent: MegaIndex.ru Disallow: / User-agent: ZoominfoBot Disallow: / User-agent: Mail.Ru Disallow: / User-agent: SeznamBot Disallow: / User-agent: BLEXBot Disallow: / User-agent: ExtLinksBot Disallow: / User-agent: aiHitBot Disallow: / User-agent: Researchscan Disallow: / User-agent: DnyzBot Disallow: / User-agent: spbot Disallow: / User-agent: YandexBot Disallow: / User-agent:* Allow: / Allow: /archives/ Allow: /tag/ Allow: /about/ Allow: /links/ Allow: /page/ Allow: /tools/ Disallow: /images/ Disallow: /fonts/ Disallow: /*.js Disallow: /*.css Sitemap: https://blog.weiyigeek.top/sitemap.xml Sitemap: https://blog.weiyigeek.top/baidusitemap.xml
2.在 Nginx 站点子配置文件中判断头返回指定响应码
1 2 3 4 5 6 if ( $http_user_agent ~* "DataForSeoBot|SemrushBot|python|MJ12bot|AhrefsBot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup" ){ return 403; }
0x01 Nginx 封禁恶意访问(DDOS)的方法 前言简述: Nginx 封禁恶意IP地址的访问,通常有如下三种方式
1.使用 limit_req_zone、limit_conn_zone 模块
方式有可能会误伤友军。
2.使用 shell 脚本定时检测 access.log 统计一段时间IP访问是否到达阈值。
3.使用 nginx + Lua + redis 实现动态封禁IP。
方式1.使用 limit_req_zone、limit_conn_zone 模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #nginx.conf http{ ... # 表示允许相同标识的客户端的访问频次,此处每分钟不能超过30请求 limit_req_zone $binary_remote_addr zone=limits:10m rate=30r/m; limit_conn_zone $binary_remote_addr zone=conn_zone:10m; server { # 设置一个大小为50的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。 limit_req zone=limits burst=50; limit_conn conn_zone 1; limit_rate 50k; } ... }
方式2.使用shell脚本定时统计 access.log 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #!/bin/bash if [ "$# " -eq 0 ];then echo "usage: ${0} blog" exit -1 fi flag=0 app_name=${1} log_path=/var/log /nginx current_day=$(date "+%Y-%m-%d" ) current_hour="2023:$(date '+%H') " log_file="${log_path} /${app_name} /${app_name} -${current_day} .log" blackip_file="/usr/local/nginx/conf.d/blackip.conf" grep "${current_hour} " ${log_file} | awk '{print $1}' | sort | uniq -c | sort -r | awk '{if($1>30){print $2}}' > /tmp/deny.ip for ip in $(cat /tmp/deny.ip);do grep -q "${ip} " ${blackip_file} if [ $? -ne 0 ];then echo "deny ${ip} ;" >> ${blackip_file} flag=1 fi done if [ $flag -eq 1 ];then echo -n "nginx reload" date -R >> /tmp/${current_day} .deny cat /tmp/deny.ip >> /tmp/${current_day} .deny /usr/sbin/nginx -s reload fi
crontab 定时执行: */5 * * * * /usr/local/bin/checkblackip.sh blog