吴金堂,耿方方
(河南中医药大学 信息化办公室,郑州 450046)
IPv6作为下一代互联网关键技术,是网络信息技术发展和互联网演化升级的必然趋势。2018年9月教育部发布《推进IPv6规模部署行动计划》,主要目标是要求到2020年底,教育系统的各类网络、门户网站和重要应用系统完成升级改造,支持IPv6访问。为了降低各类网站及业务应用向IPv6升级转换的难度,实现现有Web应用的IPv6访问,本文提出基于Nginx的反向代理实现IPv4网站应用的转换及网站的安全防御。
现阶段由于网站规划、应用开发均基于IPv4网络,将业务直接由IPv4部署到IPv6中,可能会出现网站、应用无法访问或出现错误的情况。IPv4到IPv6环境的转换,需要经历网络改造、软硬件更新以及对业务系统内核的重构、测试及重新编译上线。如果想在短时间内基于IPv6对网站、应用系统进行重新开发部署,对于普通内容类网站较为容易实现,但对于一些业务应用系统,如财务、教务等系统则需要较长的时间。
目前,正处于IPv4向IPv6过渡阶段,网站及业务应用系统需同时满足IPv4/IPv6用户访问IPv4/IPv6网站应用服务的需求,这就需要从应用服务端实现IPv4和IPv6用户的访问。现在已经实现IPv6部署的网站应用,其服务器通常是基于原生IPv4/IPv6双栈提供Web服务,它可避免因转换导致的复杂性。但是,基于IPv6的应用安全防御设备不够成熟,这就增加了IPv6环境下的网站应用服务的安全风险。
反向代理是指某台服务器用来接受网络上用户的连接请求,然后将请求转发给网络上对应的应用服务,并将从应用服务上得到的结果返回给网络上请求的用户客户端,此时这台服务器对外表现即为一个反向代理服务器[1]。用户通过代理服务器访问网站应用时,并不需要更改任何配置,正常访问网站即可。常见的反向代理工具有HAProxy、Fikker、Squid、Nginx等。
本文主要以Nginx为反向代理工具进行研究,实现在不更改原有网站应用系统的前提下,网站应用能够在IPv6下的访问。
反向代理服务器需要支持用户能够同时访问IPv4地址与IPv6地址,因此,在反向代理服务器上需配置IPv4地址与IPv6地址。IPv4地址除了为用户提供IPv4的服务外,主要是让代理服务器将请求的IPv4应用系统转换为IPv6服务。反向代理服务可以同时为多个应用系统提供代理服务,因此,可以在代理服务器上配置多个IPv4或IPv6地址,方便不同业务使用不同的IP地址进行访问。
反向代理服务器只需部署在用户可以访问到的网络下即可,不需要改造网络结构。如果内部网络暂时没有IPv6网络,可以把代理服务器部署在其他支持IPv4与IPv6的网络机房,从而实现IPv4与IPv6的同时访问。
Web应用支持IPv6网络访问时,需要网站具有相对应的DNS解析,即AAAA记录。当网站支持IPv4与IPv6同时访问时,需要有对应的A记录和AAAA记录。域名的解析地址为反向代理服务器上配置的IPv4与IPv6地址。当IPv4用户访问域名时,用户自动解析并访问反向代理服务器的IPv4地址;当IPv6用户访问域名时,用户自动解析并访问反向代理服务器的IPv6地址。
基于Nginx反向代理技术的服务器配置较为简单灵活,可以同时代理多个后端Web应用。例如,反向代理后端IPv4网站应用,在代理服务器中配置对应的IPv4请求源地址,并配置监听对应Web应用的IPv6地址端口即可。
Nginx反向代理配置如下:
以上示例配置中,同时配置了两个反向代理域名,分别对应后端IPv4应用地址,当IPv6用户访问www域名时,通过DNS解析出域名IPv6地址为反向代理服务器地址,用户请求到反向代理服务器,服务器会根据用户请求的域名自动转发请求到其对应的211.66.66.66(www网站)服务器,并将请求结果返回给用户。
针对一些特殊应用,使用非80端口,如8080等,只需要在反向代理服务中配置对应回源端口,并在服务器中监听相应端口即可实现端口转发功能。当某业务需要使用HTTPS安全连接,且源Web应用不支持修改启用HTTPS时,同样可以通过反向代理服务器把对应服务转换为HTTPS安全连接,在反向代理服务器中配置安全证书,并监听443端口,用户可以直接访问HTTPS的安全连接,回源请求还是Web应用80端口,不需要源服务做任何改变。
在使用反向代理服务器转换IPv6时需要注意,代理内容中有跨协议资源时,非对应协议用户会出现无法访问的情况。例如,只有IPv6网络的用户访问转换后的网站时,网站内容包含有链接为IPv4的资源,此时IPv6访问用户就不能加载相应资源,这就需要在做转换时一定要进行严格的访问测试,保证数据调用协议一致性。我们可以利用Nginx中的subs_filter内容过滤模块,把单协议资源转换为双协议资源或替换为本地资源[2]。
当用户访问代理服务时,代理服务器就必须开启两个连接,一个为访问用户的连接,一个为对后端Web应用的连接,因此,对于连接请求数量非常大的时候,代理服务器的负载也就非常高。在实际应用中,如果代理业务过多,可以部署多台反向代理服务器,配合DNS服务,把需要做代理转换的服务域名同时解析到多台代理服务器IP,实现反向代理前端负载均衡,分散多个业务的请求,这个过程其实已经实现了内容分发网络功能(CDN)。我们可以把代理服务器部署在不同运营商的线路中,并结合反向代理的内容缓存功能,配合智能DNS服务,以实现网站业务的IPv6转换、内容分发与快速访问。
现阶段针对IPv6业务应用层的安全设备相对不完善,业务系统接入IPv6后的安全风险增加,而通过反向代理服务后,所有的用户请求都必须通过代理服务器访问后端服务,因此,可在代理服务器上设置相关安全配置,过滤某些不安全信息,拦截恶意请求。
在搭建IPv6反向代理服务器时,可以使用OpenResty做为反向代理服务工具,OpenResty是一个基于Nginx与Lua的高性能Web平台,可以方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。
网站应用层的安全防御主要依靠Web应用防火墙(Web Application Firewall,WAF)来检测拦截,通过开源框架OpenResty和相应Lua程序语言可以轻松构建Web应用防火墙,实现通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击(Cross Site Scripting xss)、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC(挑战黑洞)攻击、恶意爬虫扫描、跨站请求伪造等攻击,保护后端Web应用安全稳定。
相对于在原有IPv4/IPv6网站应用系统中部署应用防御,在中间代理转换层做应用安全防御更简单便捷,不用对原有系统做任何改变,也不会对原有业务系统产生影响。各业务系统的访问日志格式不统一,收集整理分析难度大,但通过中间的反向代理服务后,可以统一规范访问日志格式,做集中式日志管理系统,以便对日志进行分析,例如,结合ELK(Elasticsearch、Logstash、Kibana)日志系统可以对日志统一标准化收集传输、日志查询分析并到最后实现日志的实时可视化。
结合以上的理论知识,在实际环境中构建了一台反向代理服务器,具体配置信息如下。
在VM虚拟化中开设一台服务器,4核,8G内存。安装Centos6操作系统,使用OpenResty作为反向代理服务工具,使用Iptables和Ip6tables防火墙软件。配置千兆网卡,设置IPv4与IPv6双栈网络。
OpenResty服务配置成反向代理模式,在配置中监听指定业务域名并设置对应业务回源请求地址,结合基于Lua语言的开源OpenWAF模块,实现Web应用防火墙功能。
服务器配置syslog-ng日志收集传输工具,Nginx和OpenWAF模块在产生日志的同时对日志进行远程传输。
VM中开设虚拟服务器,配置8核,16G内存。安装Centos6操作系统,配置ELK日志服务,通过收集反向代理服务器传输过来的日志,进行分类整理分析,并最终实现日志实时可视化。
本实例未对原有Web应用做任何改动,实际应用中,可以把后端业务放入内部网络,并设置只允许反向代理服务器的请求通过,以增加原应用服务的安全性。
该系统部署在IPv4/IPv6双栈环境下,反向代理并转换原IPv4网络下的学校门户网站为IPv6服务,已经正常连续运行一个月,通过日志分析系统可以看出IPv6用户已经增长很快,每天有1千余用户通过IPv6网络访问网站,访客来源于全国不同地方,如图1所示。另外,根据Web防火墙日志可以看出,IPv6下的攻击类型多种多样,恶意请求数量也在递增,如图2和图3所示。
图1 访问用户
图2 攻击类型
反向代理技术可以实现IPv4到IPv6的Web应用转换,是IPv6过渡阶段最方便快捷的业务向IPv6转换的方法。同时,通过反向代理服务后,用户与应用系统中间增加了一层防护,提高了内部系统的安全性。该方法的使用为IPv6在业务系统方面的推广提供了解决方案,同时也为业务系统的信息安全提供了保障。
图3 IPv6下的日志分析