# 用Nginx分流绕开Github反爬机制

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-03-10T02:30:00Z
Canonical: https://wepostx.com/topics/118

> 乌云历史资料归档
>
> **原始作者：** 携程信息安全部
> **原始编号：** superkieran-wooyundrops:1079
> **原始发布时间：** 2016-03-10 10:30
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

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

# 0x01 意识缺失

先贴张图：

![原文图片](/media/2016/06/9efbdff9e44ce8ee69057d3a74f9599d)

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

同样，互联网企业的员工流动性很强，各自的安全（隐私）意识也参差补齐。庞大的企业难免有些人由于无知或由于偷懒把含有敏感信息（如数据库连接串，邮箱账号，VPN信息）的代码直接丢到github上去。如果这些信息被有心人看到了，那就能让黑客花最小的成本，达到APT的效果了。
另附一篇漏洞盒子关于github泄露企业机密信息的报告：
[https://www.vulbox.com/news/detail-15](https://www.vulbox.com/news/detail-15)

# 0x02 反爬机制

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

![原文图片](/media/2016/06/76493ff6de266f5c7764ae9e381d48d8)

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

# 0x03 绕开

机智的楼主想起之前团队购买了5台阿里云机器，何不用阿里云机器搭建一套代理实现分IP访问绕开反爬机制？
于是就有了下图。

![原文图片](/media/2016/06/7ccaa12b2e9f9bc382db629fb2d811b7)

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

- Github爬虫引擎发起一次爬虫请求

- 请求发送到负载均衡Nginx，Nginx将请求按照同权重的方式转发到流量转发Nginx
注：负载均衡Nginx设置为两台，防止出现单点故障。

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

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

这样，对于github.com而言，他看到的是三台机器在一样频率的交替访问，频率是原先的1/3，巧的是，这个频率就不会触发反爬机制。从而实现了Github爬虫引擎的连续访问，效率大大提升。
同时，这套方案的扩展性还很强，如果再次被github.com反爬机制封锁，可以通过平行加流量转发Nginx机器的方式来实现水平扩展。
附负载均衡Nginx的核心配置：

![原文图片](/media/2016/06/bf41899fb9cd5b9a4c8412b32f6d06f1)

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

![原文图片](/media/2016/06/3c19a67fc594e65c744f6b069114c864)

## Replies
