爬虫和反爬虫日益成为每家公司的标配系统。爬虫在情报获取、虚假流量、动态定价、恶意攻击、薅羊毛等方面都能起到很关键的作用,所以每家公司都或多或少的需要开发一些爬虫程序,业界在这方面的成熟的方案也非常多;有矛就有盾,每家公司也相应的需要反爬虫系统来达到数据保护、系统稳定性保障、竞争优势保持的目的。
怒江州网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。成都创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
然而,一方面防守这事ROI不好体现,另一方面反爬虫这种系统,相对简单的爬虫来说难度和复杂度都要高很多,往往需要一整套大数据解决方案才能把事情做好,因此只有少量的公司可以玩转起来。当出现问题的时候,很多公司往往束手无策。
本文将描述一种尽量简单的反爬虫方案,可以在十几分钟内解决部分简单的爬虫问题,缓解恶意攻击或者是系统超负荷运行的状况;至于复杂的爬虫以及更精准的防御,需要另外讨论。
整套方案会尽量简单易懂,不会涉及到专门的程序开发,同时尽量利用现有的组件,避免额外组件的引入。内容上主要分为三大部分:
简单的数据获取
数据获取是做好反爬虫系统的关键,常见的几种模式
本篇,采用nginx的日志方式,这种只需要通过对常见的nginx最简单的配置就能从远程获取相应的访问日志
官方nginx配置:
- log_format warden '" "$remote_addr" "$remote_port" "$server_addr" "$server_port" "$request_length" "$content_length" "$body_bytes_sent" "$request_uri" "$host" "$http_user_agent" "$status" "$http_cookie" "$request_method" "$http_referer" "$http_x_forwarded_for" "$request_time" "$sent_http_set_cookie" "$content_type" "$upstream_http_content_type" "$request_body"\n';
- access_log syslog:server=127.0.0.1:9514 warden ;
tengine配置(编译时带上--with-syslog)
- log_format warden '" "$remote_addr" "$remote_port" "$server_addr" "$server_port" "$request_length" "$content_length" "$body_bytes_sent" "$request_uri" "$host" "$http_user_agent" "$status" "$http_cookie" "$request_method" "$http_referer" "$http_x_forwarded_for" "$request_time" "$sent_http_set_cookie" "$content_type" "$upstream_http_content_type" "$request_body"\n';
- access_log syslog:user::127.0.0.1:9514 warden ;
这里面需要注意的是:
简单的爬虫封禁
反爬虫最后的生效,需要靠合理的封禁模式,这里比较几种模式:
本段将介绍基于iptables的方案,虽然适用范围较小;但是依赖少,可以通过简单配置linux就能达到效果。
第一步
- 安装ipset。ipset扩充了iptables的基本功能,可以提供更加高效的访问控制
- # centos 6.5上面安装非常简单
- sudo yum install -y ipset
第二步
在iptables中建立相应的ipset,来进行访问权限的封禁
- # 新增用于封禁的ipset
- sudo ipset -N --exist warden_blacklist iphash
- # 增加相应的iptables规则
- sudo iptables -A INPUT -m set --set warden_blacklist src -j DROP
- # 保存iptables
- sudo service iptables save
第三步
获取当前封禁的ip黑名单,并导入到iptables里面去
- sudo ipset --exist destroy warden_blacklist_tmp; sudo ipset -N warden_blacklist_tmp iphash; echo "1.1.1.1,2.2.2.2" | tr , "\n" | xargs -n 1 -I {} sudo ipset -A warden_blacklist_tmp {} ; sudo ipset swap warden_blacklist_tmp warden_blacklist
这里为了尽可能的提升效率,作了以下事情:
简单的爬虫策略
要能精确的分析爬虫,需要强大的数据分析平台和规则引擎,来分析这个IP/设备/用户分别在短时间区间/长时间范围里的行为特征和轨迹,这里涉及到了非常复杂的数据系统开发,本文将通过简单的shell脚本描述比较简单的规则
例子1,封禁最近100000条中访问量超过5000的ip
- nc -ul 9514 | head -100000 | awk -F '" "' '{print $2}' | sort | uniq -c | sort -nr | awk '$1>=5000 {print $2}'
这里面:
例子2,封禁最近100000条中user agent明显是程序的ip
nc -ul 9514 | head -100000 | awk -F '" "' '$10 ~ /java|feedly|universalfeedparser|apachebench|microsoft url control|python-urllib|httpclient/ {print $2}' | uniq
这里面:
当然,这里只是列举了简单的例子,有很多的不足之处
拼起来
所有模块组合起来,做一个完整的例子。假设:
除了nginx配置和iptables基本配置,前几段的配置略作改动:
- ### nginx conf@192.168.1.1
- log_format warden '" "$remote_addr" "$remote_port" "$server_addr" "$server_port" "$request_length" "$content_length" "$body_bytes_sent" "$request_uri" "$host" "$http_user_agent" "$status" "$http_cookie" "$request_method" "$http_referer" "$http_x_forwarded_for" "$request_time" "$sent_http_set_cookie" "$content_type" "$upstream_http_content_type" "$request_body"\n';
- access_log syslog:server=192.168.1.2:9514 warden ;
- ### 分析@192.168.1.2, 增加了结果会吐,同时每隔60分钟跑一次,把数据返回给192.168.1.1
- while true ; do nc -ul 9514 | head -100000 | awk -F '" "' '{print $2}' | sort | uniq -c | sort -nr | awk '$1>=5000 {print $2}' | tr '\n' ',' | awk '{print $0}' | socat - UDP:192.168.1.1:9515 ; sleep 3600 ; done
- ### 阻断@192.168.1.1
- #基础配置
- sudo ipset -N --exist warden_blacklist iphash
- sudo iptables -A INPUT -m set --set warden_blacklist src -j DROP
- sudo service iptables save
- #动态接收并更新iptables
- while true ; do sudo ipset --exist destroy warden_blacklist_tmp; sudo ipset -N warden_blacklist_tmp iphash; socat UDP-LISTEN:9515 - | tr , "\n" | xargs -n 1 -I {} sudo ipset -A warden_blacklist_tmp {} ;sudo ipset swap warden_blacklist_tmp warden_blacklist ; sudo ipset list ; done
以上只是简单示例,实际中还是建议换成shell脚本
总结
本文列出一种简单的反爬虫方案,由于过于简单,可以当做概念示例或者是救急方案,如果需要进一步深化,需要在以下方面去加强:
作者介绍
岂安科技联合创始人,首席产品技术官
曾担任PayPal资深高级工程师,在可信计算,计算机风控等领域有深入的理论研究和成果;并在防欺诈和风险监控行业有多年且深厚的工作经历,擅长分布式系统和实时大数据计算。他参与岂安科技所有产品线的架构和设计,带领团队在数据挖掘、多媒体分析、跨数据中心分布式系统、高性能实时大数据计算、海量数据采集等领域进行前沿研究和产品化,帮助客户更好的解决内部的安全和风控问题。
当前标题:十分钟解决爬虫问题!超轻量级反爬虫方案
链接URL:http://www.mswzjz.cn/qtweb/news46/232946.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能