作为一个像样的住宅代理的树莓派

2020-06-09 08:22:29

我们的一个项目(cazadescuentos.net)使用网络报废技术扫描几家在线商店来寻找折扣。最近,我们开始支持一些商店,这些商店似乎屏蔽了来自公共云产品(如AWS、DigitalOcean等)的请求,如果你好奇的话,这些网站是BestBuy和Costco墨西哥。

缓解这个问题的一个流行的解决办法是支付代理服务来清理这些网站,遗憾的是,我们找不到一个在我们有限预算内的可靠的提供商。

因此,我们最终构建了我们自己的住宅代理,现在由旧的Raspberry PI型号B供电,值得补充的是,它并不像我们预期的那么简单,特别是保持SSH隧道可用(下面将详细介绍这一点)。

如果您喜欢直接跳到代码或尝试使用它,我们已经开放了Simple-http-proxy的源代码。

就目前而言,我觉得自己足够勇敢,甚至让你在不运行代理的情况下尝试它,希望我不会被拒绝,一旦有人滥用我的旧PI,我很可能会取消访问。

此命令告诉我的PI通过发送自定义dnt:1报头来查询https://wiringbits.net:

Curl-X POST\-H";内容类型:应用程序/json";\-d';{";url";:";https://wiringbits.net";,";标题";:{";dnt";:";1";}}';\";https://cazadescuentos.net/proxy";

由于PI不容易从互联网访问,因此它会打开一条SSH隧道到服务器,该服务器将连接到由PI服务的代理。

不要将代理暴露给世界,否则攻击者将能够与您的家庭设备交互。

理想情况下,将代理暴露在隔离网络上,与连接家庭设备的网络不同。

我最终投入了比预期更多的时间来调整必要的东西来保持代理的可靠工作,最大的问题是与SSH隧道相关的问题。

如果您看到实际的项目,就会发现它包含了一个systemd服务,用于通过必要的调整来保持隧道打开。

ExitOnForwardFailure=yes强制ssh在连接出现故障时退出,而不是在隧道不工作时保持静默运行。

ServerAliveInterval=180不断向服务器发送ping,以避免服务器因不活动而关闭连接。

如果代理流量大幅增加,很可能会被一些网站封杀。

一种更具可扩展性的方法可能是将这些代理设备分布到不同的位置,这会阻止SSH隧道技巧变得合理。

一种可能的方法是使用AWS SQS/Kafka/etc之类的队列服务来推送网站报废请求,而代理设备可能会争先恐后地消费下一个请求,如果一个没有完成工作,另一个可以尝试。

如果你想一想,你不需要树莓PI,你甚至可以构建一个非常简单的Android应用程序来实现同样的目的。

无论如何,这就是代理已经运行了几个月,我希望它能保持一段时间。