用Nginx分流绕开Github反爬机制

携程信息安全部 2016-03-10 10:30:00

0x00 前言


如果哪天有hacker进入到了公司内网为所欲为,你一定激动地以为这是一次蓄谋已久的APT,事实上,还有可能只是某位粗线条的员工把VPN信息泄露在了Github上恰巧被一个好奇的计算机junior发现了而已。

0x01 意识缺失


先贴张图:

有记者给溧阳卫生局局长拨通电话,该局长面对记者的采访慌张答道:
“你看到我们发微博的啊?呵呵,你怎么看到的啊?这个都能看得到啊?!这不可能吧?我们两个发微博你都能看得到啊?不可能吧?”……

同样,互联网企业的员工流动性很强,各自的安全(隐私)意识也参差补齐。庞大的企业难免有些人由于无知或由于偷懒把含有敏感信息(如数据库连接串,邮箱账号,VPN信息)的代码直接丢到github上去。如果这些信息被有心人看到了,那就能让黑客花最小的成本,达到APT的效果了。

另附一篇漏洞盒子关于github泄露企业机密信息的报告:
https://www.vulbox.com/news/detail-15

0x02 反爬机制


于是,我们想实现github代码的监控,定制诸多关键词如password,mysql,account,email,希望通过爬虫程序来实现对github上敏感代码的监控,如果有可疑信息泄露,程序通过邮件通知负责人,负责人去进行二次人工审核。这样,能在第一时间发现敏感代码的泄露,并及时联系提交者进行处理。

期望是美好的,但是在连续高频访问若干次github.com之后:

触发了github的反爬机制,难道项目要流产?

0x03 绕开


机智的楼主想起之前团队购买了5台阿里云机器,何不用阿里云机器搭建一套代理实现分IP访问绕开反爬机制?

于是就有了下图。

一次敏感代码爬取的流程:

  1. Github爬虫引擎发起一次爬虫请求
  2. 请求发送到负载均衡Nginx,Nginx将请求按照同权重的方式转发到流量转发Nginx

    注:负载均衡Nginx设置为两台,防止出现单点故障。

  3. 收到负载均衡Nginx发过来的流量,流量转发Nginx将请求转想github.com

  4. github.com返回的内容通过Nginx原路返回给Github爬虫引擎

这样,对于github.com而言,他看到的是三台机器在一样频率的交替访问,频率是原先的1/3,巧的是,这个频率就不会触发反爬机制。从而实现了Github爬虫引擎的连续访问,效率大大提升。

同时,这套方案的扩展性还很强,如果再次被github.com反爬机制封锁,可以通过平行加流量转发Nginx机器的方式来实现水平扩展。

附负载均衡Nginx的核心配置:

附流量转发Nginx的核心配置:

评论

路人甲 2016-03-10 11:18:30

不就是个Nginx的负载均衡么?

路人甲 2016-03-10 11:18:36

这种行为算什么呢呢?、
又没技术含量有没公德
太low了

路人甲 2016-03-10 12:19:36

我说访问github咋这么慢,原来是你们这群人不停的在用爬虫爬。。。

路人甲 2016-03-10 12:47:13

这广告打的,我给1分~

路人甲 2016-03-10 14:56:34

真好(xxx)文章

爱捣蛋的鬼 2016-03-10 15:18:37

你就找你们公司自己的关键词就行了啊,做爬虫,居心何在~~

路人甲 2016-03-11 15:10:48

github有api

路人甲 2016-03-25 17:12:56

这个防爬策略也是蛋疼

路人甲 2016-03-25 17:13:46

去爬点免费代理完全可以绕过这种反爬机制

携程信息安全部

携程信息安全部

twitter weibo github wechat

随机分类

Java安全 文章:34 篇
MongoDB安全 文章:3 篇
运维安全 文章:62 篇
IoT安全 文章:29 篇
memcache安全 文章:1 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Yukong

🐮皮

H

HHHeey

好的,谢谢师傅的解答

Article_kelp

a类中的变量secret_class_var = "secret"是在merge

H

HHHeey

secret_var = 1 def test(): pass

H

hgsmonkey

tql!!!

目录