您的位置:首页 >资讯列表 > 正文
发布时间:2020-04-23 17:11
HTTP代理服务器原理研究

  HTTP代理服务器是介于浏览器和Web服务器之间的网络节点,用于接收或解释客户端请求,并发起到目的服务器连接,然后将服务器响应回传客户端。在使用HTTP代理的情况下,HTTP客户端如Web浏览器不直接连接HTTP服务器,而是首先向代理服务器发出请求,将Request信号送到HTTP代理服务器,之后再从HTTP代理服务器中取回所需的信息。现今大部分HTTP代理服务器都具有缓冲的功能,如果浏览器所请求的数据在HTTP代理中已经存在并没有过时,此时HTTP代理直接将缓存中的数据发送给用户的浏览器,而无需再向HTTP服务器请求内容,以此提高浏览速度和效率,但速度方面会因HTTP代理服务器地理位置的不同以及网络传输情况而异。


u=2051248868,1265610089&fm=26&gp=0.jpg


  具体来说网络代理服务器主要有以下特点:


  (1)利用一个或多个公用IP地址为所有的内部用户提供有效外部访问连接;(2)在内部网络和外部网络之间构筑一道简易防火墙,保障内部网络的安全;


  (3)通过网络代理缓存区的使用提高网络浏览速度降低网络通信费用;


  (4)对局域网用户进行基本的访问权限和信息流量计费管理以及网络信息的简单访问控制。


  使用HTTP代理服务器的优势:


  (1)可以访问平时不能访问的网站;


  (2)可以加快浏览某些网站的速度;


  (3)可以充当内部网和外部网之间的防火墙;


  (4)减少IP的开销,缓解网络地址紧张的问题;


  (5)进行信息管理与处理,如用户验证、网络管理和用户计费等。


  而网络穿透技术就是使用代理来访问一些特定的网站。本文研究穿透技术的目的主要是为了更好的保证代理环境下软件的正常通信,但相关研究对防御非法网络穿透也有一定的借鉴意义。


  2.1.2 HTTP代理主要功能


  HTTP代理服务器是TCP/IP协议应用层上的服务,典型的HTTP代理主要功能如下:


  (1)使多台主机可通过共享上网。网络内的多台主机如果采用共享方式访问网络,可大大降低上网成本,并且可以缓解现有地址不足的问题。


  (2)缓存之前访问过的网络资源,提高访问速度。通过向客户端发送未过期的缓存内容提高访问网络的速度,减少负载和流量。


  (3)防火墙功能。通过在网关上部署代理服务器,实现网络地址转换(NAT);通过访问控制规则,实现数据过滤和内网细节屏蔽。


  (4)用户管理功能。管理访问网络用户的权限,提高安全性。


  (5)突破IP访问限制,隐藏真实IP,访问被限制访问的资源。


  2.1.3 HTTP代理主要工作模式


  本文在对常见代理软件(如ISA、Squid等)特性研究的基础上,详细分析了代理服务器的几种基本工作模型(如图2-1代理服务器工作模型所示)。根据代理对用户通信影响的不同层次,我们可以将其分为通信数据转发、性能控制、访问控制和日志4个主要模块。其中通信数据转发模块主要用于实现共享上网和防火墙的功能,它决定了代理服务器转发数据的模式(Route、NAT或反向代理)。


  图2-1代理服务器工作模型


  性能控制模块主要实现缓存和部分用户管理功能,该模块可划分为数据缓存和控制数据处理两个部分。缓存部分主要用于提高对网络资源访问的效率,它可以将部分网络资源存储在代理服务器上,当用户访问相同的资源时不用再次从目标服务器上获取,而是直接将自己保存的资源发送给用户,它对正常通信没有影响。控制数据处理部分主要包括数据类型、大并发连接数、是否支持持续连接、超时控制、支持的大数据包长度等。这些都决定了代理服务器的整体性能。


  访问控制模块主要用于实现用户管理和防火墙功能,该模块可分为控制用户访问和识别用户两部分。控制用户访问部分在用户访问过程中,可以对包括协议类型、数据内容过滤、访问时间等进行控制,控制的内容主要和用户分配的访问权限有关。


  日志模块主要是对整个处理和控制过程进行记录,该模块对网络通信并没有直接影响。


  2.1.4 HTTP代理的分类


  对于不同的代理服务器,其工作模式也会有差别,为了明确本文的主要研究范围,下面我们根据几种不同的标准分别对其进行分类。


  代理的分类按照侧重点有多种划分方法,以下将按照协议、功能、请求信息安全性以及认证类型来说明常见的几种分类方法。


  2.1.4.1按照协议分类


  按照协议分类的代理类型包括:


  Socks代理,全能代理,简单的系统连接,支持多种协议(FTP、HTTP),分为Socks4和Socks5两种(Socks5支持TCP和UDP,而Socks4只支持


  UDP),支持各种身份验证机制。


  HTTP代理,常见端口80、8080、3180


  HTTP Connect代理,允许用户建立TCP连接到任何端口,可用于HTTP、


  FTP、IRC等。


  SSL代理,一般是用来访问加密网站(以https访问的网站,其标准服务端口是443端口,高支持128位加密强度)。


  TUNNEL代理,HTTP隧道;


  其它应用协议代理,如:FTP(21、2121)、Telnet(23)、POP3(110)。


  2.1.4.2按照功能分类


  根据是否具有隐藏IP的功能,代理类型可以分为:


  (1)非匿名代理,不具备匿名功能。


  (2)匿名代理,被访网站不知道访问者的地址,只知道在使用代理,并且某些侦测IP的网页可以查询到你的IP。


  (3)高度匿名代理,被访网站不知道访问者的IP,也不知道访问者在使用代理,其隐藏功能强。


  2.1.4.3按照请求信息安全性分类


  按照请求信息安全性分类的代理类型:


  普通匿名代理,会改变请求字段,并且隐藏客户端的真实IP。有的代理会会将藏客户端的部分信息进行处理,使服务器端无法获取客户端的操作系统版本等主机信息。


  全匿名代理,不改变报文的请求字段,服务器认为是真正的客户浏览器在访问,真实IP会被隐藏。


  Elite代理,可隐藏系统及浏览器信息,匿名隐藏性更高,安全性很强。


  透明代理,是指客户端根本不需要知道代理服务器的存在,但是代理会传送客户端的真实IP。


  2.1.4.4按照代理认证类型分类


  按照代理认证类型分类的代理类型常见的有:


  Anonymous——匿名代理;


  Basic——基本认证代理;


  NTLM认证代理;


  Kerberos认证代理。


  RADIUS认证代理。


  其中课题所研究的主要是从认证的角度出发,研究代理穿透的问题。按照目标对象需求,及常用的认证代理,本课题主要涉及研究的代理类型有匿名代理、基本认证代理、NTLM认证代理和Kerberos认证代理,RADIUS认证代理在实际网络中部署较少,因此不作为此次的主要研究对象。


  2.1.5 HTTP代理常见软件实现和配置


  ISA全名Microsoft Internet Security and Acceleration Server,是可以建立在


  Windows操作系统上的一种可扩展的企业防火墙和Web缓存服务器,防火墙规则里可以配置用户认证,相当于代理[11]。ISA在充当代理防火墙的时候,可以配置成多种网络构造,具体如图2-2 ISA边缘防火墙配置、图2-3 ISA三向外围网络配置、图2-4 ISA前端防火墙配置、图2-5 ISA后端防火墙配置、图2-6 ISA单一网络适配器配置所示。具体着眼于内部向外连接的认证代理穿透问题,本课题选择边缘防火墙的架构并以此来构架课题所需的代理网络实验环境。


  图2-2 ISA边缘防火墙配置


  图2-3 ISA三向外围网络配置


  图2-4 ISA前端防火墙配置


  图2-5 ISA后端防火墙配置


  图2-6 ISA单一网络适配器配置


  具体认证配置可以按照下列步骤来实现,首先选择"阵列"->"配置"->"网络"->"内部"->"属性"->"web代理"->"身份验证",然后可以按需求配置不同的认证方式,默认为"集成",如图2-7认证配置界面所示。说明:


  (1)集成身份认证包括NTLM和Kerberos。


  (2)当基本和集成同时选择,优先进行集成认证。


  (3)摘要认证需要域环境的支持。从图2-7认证配置界面可以看出在ISA还可以实现其它方式的认证如SSL证


  书方式和RADIUS。这些认证方式比较繁琐,在已知目标对象中暂无使用,因此不再本次课题的研究范围。


  图2-7认证配置界面


  以上是Windows平台下通过使用ISA来实现认证代理,当然还有其它一些软


  件也能够实现相同的一些功能如开源跨平台代理软件Squid[12],其配置简单灵活,支持缓存和多种协议,对于认证的支持配置举例如下:


  #auth_param basic children 5


  #auth_param basic realm Squid proxy-caching web server


  #auth_param basic credentialsttl 2 hours


  #auth_param basic casesensitive off


  #auth_param digest program<uncomment and complete this line>


  #auth_param digest children 5


  #auth_param digest realm Squid proxy-caching web server


  #auth_param digest nonce_garbage_interval 5 minutes


  #auth_param digest nonce_max_duration 30 minutes


  #auth_param digest nonce_max_count 50


  #auth_param ntlm program<uncomment and complete this line to activate>


  #auth_param ntlm children 5


  #auth_param ntlm max_challenge_reuses 0


  #auth_param ntlm max_challenge_lifetime 2 minutes


  #auth_param ntlm use_ntlm_negotiate off


  #auth_param basic program<uncomment and complete this line>


  但Squid实现的认证代理类型上没有ISA全面,且NTLM认证的实现需要


  Samba的额外支持,虽然本课题选取了ISA作为代理的实现和研究对象,但由于通信认证协议相同,因此本课题中代理穿透的实现在Squid代理环境中也适用。


  2.2代理类型探测方法研究


  通常,代理服务器对用户正常通信的影响主要集中体现在对用户身份的判别和对用户行为的约束两个方面。对用户身份的判别,具体表现为访问控制模块对用户的识别部分;对用户行为的约束,具体又可以分为两个方面:首先是从对通信行为进行控制方面,具体表现在对用户请求数据的处理方面;其次是从用户的角度对通信行为进行控制方面,对不同的用户或者用户组的通信行为会有不同的规则来区别处理,具体表现在控制用户访问方面。而这两部分只是针对的对象不同,并没有严格区分。其中,用户识别直接关系到用户能否进行正常通信,所以必须优先处理,其相关的属性也比较多,但是可以通过直接访问代理服务器的方式,判定当前用户是否为合法用户。如果需要用户进行身份认证,则需要先通过代理的认证,之后才能进行后续的探测。数据控制针对代理服务器整体性能,如无限制,可能影响代理的正常运行。这一部分涉及的属性不多。目前,大多数代理实现软硬件提供的设置基本相似,但默认配置均对这些属性进行了限制,而这些属性反映了当前代理服务器在通信方面的一些基本的特性。用户控制访问部分是在整体的性能控制基础上,对每个用户进行具体的、有针对性的限制。其包含的属性更多而且更复杂,代理软件在具体实现上也存在着许多差异。这些属性反映的是代理服务器对通信的深层次的影响。此外,在获取代理特性的基础上,还应该通过获取应用程序的通信模式来选择恰当的网络通信模式,从而大限度的提高通信效率。


  具体HTTP代理探测可通过向代理服务器发送不同的HTTP数据包并判断返回的标志来进行判断,探测的目的主要是为了明确以下几点:


  (1)当前主机是否通过代理上网;


  (2)代理是否需要认证;


  (3)代理的认证方式;


  (4)代理支持的HTTP方法。


  首先,可以通过在操作系统注册表中的


  [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet


  Settings]键中查询ProxyEnable和ProxyServer键值来判断当前主机是否设置代理访问网络。具体探测时,一般是通过与代理建立连接并发送若干特定的HTTP请求,并根据代理返回的应答来进行判断。


  如果代理服务器要求进行身份认证,会返回HTTP状态码407。对于HTTP认证,其主要认证方式包括基本认证、集成式认证、摘要式认证、SSL证书认证以


  及RADIUS认证等,其中较为常见的集成式认证方式又涉及NTLM认证、Kerberos


  V5认证等认证协议[13][14]。


  为了保证安全,限制用户访问行为等需要,代理通常不会支持所有的HTTP方法。所以在探测控制数据处理部分之前,我们需要先探测出代理支持的HTTP方法有哪些,这将直接影响到后续探测过程中数据包的构造方法。在探测代理的连接性时,还要注意代理对HTTP协议的版本的支持,因为只有HTTP 1.1及以后的版本才能支持我们进行相关的探测。


  为了判断有效数据在HTTP隧道中的合适存放位置和合适的数据大小,我们还需要对应用程序的通信模式进行探测。为常见的方式是将用户数据作为HTTP请求载荷,而我们在探测过程中是将数据存放于HTTP请求的消息头等处,实际上就是利用HTTP隧道进行通信。而在合法的HTTP请求数据包格式中,能够携带数据的位置主要包括URL、Cookie以及Accept等头域,由于URL和Cookie中数据的随机性较大,而且不易被检测,所以更适合承载数据,但使用时需要对其可用性、大长度等先进行探测。


上一篇 HTTP代理网络穿透技术研究发展现状 下一篇 HTTP代理认证协议的研究