zoukankan      html  css  js  c++  java
  • 代理池

    近期由于工作中的遇到的问题,在研究代理池,其实代理池应该说已经是比较成熟的技术,而且在飞速发展,比如现在主流的“秒拨”技术,给企业在风险IP识别和判定上带来极大的难度。代理池技术目前被广泛用于爬虫、灰黑产、SEO、网络攻击、刷单、薅羊毛等等领域。

    0x01 代理服务器原理和类型

    当客户端对服务器端提出请求时,此请求会被送到代理服务器,代理服务器转发用户请求到 实际服务器端。

    代理类型一共分为四种:透明代理、匿名代理、高匿代理、混淆代理
    安全程度:高匿 > 混淆 > 匿名 > 透明
    代理类型主要取决于代理服务器端的配置,不同配置会形成不同的代理类型。在配置中,有三个变量是决定性因素:

    1、REMOTE_ADDR:REMOTE_ADDR 表示客户端的 IP,但是它的值不是由客户端提供的,而是服务器根据客户端的 IP 指定的。如果使用浏览器直接访问某个网站,那么网站的 web 服务器(Nginx、Apache等)就会把 REMOTE_ADDR 设为客户端的 IP 地址。我们给浏览器设置代理,我们访问目标网站的请求会先经过代理服务器,然后由代理服务器将请求转化到目标网站。那么网站的 web 服务器就会把 REMOTE_ADDR 设为代理服务器的 IP。

    2、X-Forwarded-For(XFF):X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP。当客户端使用了代理时,web 服务器就不知道客户端的真实 IP 地址。为了避免这个情况,代理服务器通常会增加一个 X-Forwarded-For 的头信息,把客户端的 IP 添加到头信息里面。如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:

    3、HTTP_VIA: via 是 HTTP 协议里面的一个header,记录了一次 HTTP 请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。

    0x02 代理类型的区别

    1、透明代理(Transparent Proxy):
    代理服务器的配置如下:

    REMOTR_ADDR = Proxy IP
    HTTP_VIA = Proxy IP
    HTTP_X_FORWORDED_FOR = Your IP
    

    透明代理虽然可以直接“隐藏”客户端的 IP 地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到客户端的 IP 地址。

    2、匿名代理(Anonymous Proxy):
    代理服务器的配置如下:

    REMOTR_ADDR = Proxy IP
    HTTP_VIA = Proxy IP
    HTTP_X_FORWORDED_FOR = Proxy IP
    

    匿名代理能提供隐藏客户端 IP 地址的功能。使用匿名代理,服务器能知道客户端使用了代理,但无法知道客户端真实 IP 地址。

    3、混淆代理(Distorting Proxy):
    代理服务器的配置如下:

    REMOTR_ADDR = Proxy IP
    HTTP_VIA = Proxy IP
    HTTP_X_FORWORDED_FOR = Random IP
    

    与匿名代理的原理相似,但是会伪装得更逼真。如果客户端使用了混淆代理,服务器还是能知道客户端在使用代理,但是会得到一个假的客户端 IP 地址。

    4、高匿代理(Elite Proxy):
    代理服务器的配置如下:

    REMOTR_ADDR = Proxy IP
    HTTP_VIA = not determined
    HTTP_X_FORWORDED_FOR = not determined
    

    高匿代理既能让服务器不清楚客户端是否在使用代理,也能保证服务器获取不到客户端的真实 IP 地址。

    0x03 搭建一个代理池

    搭建代理池可以选择免费和付费两种方式,国内一些免费的IP代理资源包括:

    https://ip.ihuan.me/Proxies.7z
    http://www.89ip.cn/
    https://www.xicidaili.com/
    ...
    

    这些免费资源有的已经提供API,我们直接可以提取代理资源。另外一部分需要我们将代理IP爬取下来,比如西刺免费代理:

    目前,在github上有许多搭建代理池的项目,可以进行参考:

    https://github.com/iamhmx/MXProxyPool
    https://github.com/jhao104/proxy_pool
    https://github.com/xiaobeibei26/dynamic_ip_pool
    https://github.com/henson/proxypool
    ...
    

    原理一般是通过爬取各个免费的代理资源中的代理IP信息,存储到本地,进行性验证,维护可用代理IP列表,然后在需要使用的时候取出代理IP。

    免费的资源最大的问题就是代理IP不可用、不稳定,测试下来,虽然能爬取几千个代理IP,但真正用的可能在10个以内,利用率在1%左右。 另外就是付费模式,这里国内也有很多的服务提供商,现在提供的服务模式多种多样,长期的,包月的,甚至可以按次服务。一般来说代理的匿名度越高,时效越长,价格也越贵。

    0x04 代理池攻防

    自从企业开始在IP层面根据一些阻断的规则(如设定单位时间内IP的访问次数阈值、限制触发特定行为的IP等)起,攻防的较量就开始了。为了绕过企业的IP阻断规则,早期黑产获取代理IP的方式主要利用高性能的服务器对全网进行扫描,扫描开放代理服务的服务器,或者是直接爬取其他代理网站的数据,收录有效代理IP和端口。全网的代理IP数量相对有限,稳定性也堪忧,而通过VPN的方式成本又太高。同时,不少甲方也慢慢开始积累代理IP威胁情报信息,进一步打压了黑产使用代理IP的效果。

    攻防升级,黑产迅速研发出“秒拨”技术。通俗的讲,秒拨的底层思路就是利用国内家用宽带拨号上网(PPPoE)的原理,每一次断线重连就会获取一个新的IP。黑产掌握大量宽带线路资源,部署自动断线重连切换IP以及攻击的工具后,便可发起攻击。

    现在很多付费的代理池资源,都是利用的“秒拨”技术,“秒拨”对基于ip的安全防护和风控措施构成了严峻的挑战:一方面秒拨ip数量巨大,因为地区级的宽带ip池往往有十万甚至百万级别的ip数;另一方面,秒拨ip可做到秒级切换,且与正常用户共用ip池,使用者可能在极短时间内从正常用户变为黑灰产,导致识别难度较大,而且一旦大规模封禁,很有可能造成误伤,引起客户投诉。

    最近,一年一度的大型攻防演习即将开始,类似“秒拨”的代理池技术同样会给防守方带来巨大挑战。攻击方如果采用代理池技术,可能会对防守方产生两个极端影响:
    1、如果攻击方将攻击流量分散在大量IP中,极端情况下每一个ip一次攻击,SIEM这类的综合分析系统可能根本不会产生告警,因为攻击没有达到告警阈值,只能人工去分析各类安全告警日志,发现可能异常,类似于威胁狩猎。

    2、攻击者利用海量代理IP产生海量攻击,则防守方也会产生海量告警和海量阻断IP的请求,造成Alert DOS和Block DOS,一方面消耗防守大量的精力进行分析,另一方面甚至造成封禁IP的个数超过防守方设备上限,使其防御体系失效,而此时再进行针对性的攻击,就可以达到声东击西的效果。

    总之,以“秒拨”为代表的代理池技术已然成为当下安全行业的痛点之一,仅仅依靠威胁情报、网络层封IP的方式已经难以应对,需要重点从应用层面去解决。对于这个痛点,行业内也在积极探索解决方案,出现了“动态防御”的理念,通过动态封装、动态混淆,动态令牌和动态验证来有效进行人机识别。

    技术不分好坏,代理池技术在黑产手上会给企业带来极大困扰,但企业也可尝试利用代理池技术提升运营质量,这块下回再说。今天是五一国际劳动节,向所有劳动者致敬!

  • 相关阅读:
    fork安全的gettid高效实现
    TCP_DEFER_ACCEPT的坑
    TCP Linger的坑
    Blade和其他构建工具有什么不同
    在Blade中结合gperftools检查内存泄露
    GraphViz web版
    用户场景分析
    java-二维数组——with 刘童格
    java-四则运算-五-网页版--with刘童格
    java-四则运算-四
  • 原文地址:https://www.cnblogs.com/0daybug/p/12882216.html
Copyright © 2011-2022 走看看