十分钟解决爬虫问题!超轻量级反爬虫方案(2)

本段将介绍基于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

这里为了尽可能的提升效率,作了以下事情:

建立临时ipset,方便做操作

将当前封禁黑名单中的ip提取出来,加入到此ipset(示例中用了最简单的echo来展示,实际可相应调整)

将ipset通过原子操作与iptables正在使用的ipset作交换,以最小的代价将最新的黑名单生效

  简单的爬虫策略

要能精确的分析爬虫,需要强大的数据分析平台和规则引擎,来分析这个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}'

这里面:

1、udp服务监听nginx发过来的syslog消息,并取10000条,找到其中每条访问记录的ip

2、通过sort 和uniq来获取每个ip出现的次数,并进行降序排列

3、再通过awk找到其中超过阈值的ip,这就得到了我们所需要的结果。

例子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

这里面:

1、通过awk的正则来过滤出问题agent,并将相应ip输出

2、关于agent的正则表达式列出了部分,可以根据实际情况去调整和积累

当然,这里只是列举了简单的例子,有很多的不足之处

1、由于只采用了shell,规则比较简单,可以通过扩展awk或者其他语言的方式来实现更复杂的规则

2、统计的窗口是每100000条,这种统计窗口比较粗糙,好的统计方式需要在每条实时数据收到是对过去的一小段时间(例如5分钟)重新做统计计算

3、不够实时,无法实时的应对攻击行为;生产环境中,需要毫秒级的响应来应对高级爬虫

4、.......

  拼起来

所有模块组合起来,做一个完整的例子。假设:

1、负载均衡192.168.1.1,使用了官方nginx,并配置了syslog发往192.168.1.2

2、192.168.1.2启动nc server,每隔一段时间进行分析,找出问题ip,并吐给192.168.1.1

3、192.168.1.1通过iptables进行阻拦,数据来源于192.168.1.2的分析机器

除了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脚本

  总结

本文列出一种简单的反爬虫方案,由于过于简单,可以当做概念示例或者是救急方案,如果需要进一步深化,需要在以下方面去加强:

1、强化数据源,可以通过流量获得全量数据。目前爬虫等网络攻击逐渐转向业务密切相关的部分,往钱的方向靠近,所以需要更多的业务数据去支撑,而不仅仅是访问日志

2、更灵活的阻断,需要有多种阻断手段和略复杂的阻断逻辑

3、除却ip,还需要考察用户、设备指纹等多种追踪方式,应对移动环境和ipv6环境下,“IP”这一信息的力不从心

4、强化规则引擎和模型,需要考察更多用户行为的特征,仅仅从频率等手段只等应对傻爬虫,同时会造成误杀率更高

5、建立数据存储、溯源、统计体系,方便分析人员去分析数据并建立新的模型和规则。反爬虫是一件持续性行为,需要良好的平台来支撑。

6、可以根据实际需要去做好反爬虫系统的集成。比如nginx数据-->反爬系统-->nginx阻断;F5数据-->反爬系统-->F5阻断

  作者介绍

岂安科技联合创始人,首席产品技术官

曾担任PayPal资深高级工程师,在可信计算,计算机风控等领域有深入的理论研究和成果;并在防欺诈和风险监控行业有多年且深厚的工作经历,擅长分布式系统和实时大数据计算。他参与岂安科技所有产品线的架构和设计,带领团队在数据挖掘、多媒体分析、跨数据中心分布式系统、高性能实时大数据计算、海量数据采集等领域进行前沿研究和产品化,帮助客户更好的解决内部的安全和风控问题。

(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

未来改变企业安全体系形态的几种安全产品

未来改变企业安全体系形态的几种安全产品

众所周知,云计算、SaaS等在很大程度上的改变现在企业的IT架构。新型的安全问题层出不...[详细]

十分钟解决爬虫问题!超轻量级反爬虫方案

十分钟解决爬虫问题!超轻量级反爬虫方案

爬虫和反爬虫日益成为每家公司的标配系统。爬虫在情报获...[详细]

小心网络布线中易犯十类错误

小心网络布线中易犯十类错误

网络布线是一项十分繁琐和复杂的工作,但目前看来从事这项工作的人员中还普遍存在着相...[详细]

怎样为企业挑选正确的EDR解决方案

怎样为企业挑选正确的EDR解决方案

尽管黑客的动机一如既往钱、信息、更多的钱,他们的攻击方法却变得愈加复杂、具侵略性...[详细]

研究人员开发了一款无法被检测到的工控系统

研究人员开发了一款无法被检测到的工控系统PLC Rootkit

两名安全研究人员开发出了一款无法被检测到的PLC Rootkit,并计划在即将到来的2016欧...[详细]

返回首页 返回顶部