中国科学技术大学Nginx 在校园网站集中服务的应用

2019-04-18 09:34张焕杰陈蕾夏玉良
中国教育网络 2019年3期
关键词:代理服务器IP地址日志

文/张焕杰 陈蕾 夏玉良

无论是单纯发布信息的网页或是WWW页面访问的应用,呈现给最终用户的形式都是Web网站。用户通过校园网或Internet网络访问这些网站时,希望能提供IPv6/IPv4多协议支持,提供多家运营商线路入口的就近访问,提供HTTPS安全传输支持。网站运维方为了安全的考虑,希望将访问流量引导经过Web应用防火墙(WAF)设备过滤处理,提供对网站灵活可控的边界防护手段,具备日志记录功能以满足法规要求。

Nginx是一个异步框架的Web服务器,也可用作反向代理、负载均衡和HTTP缓存服务器。中国人章亦春把LuaJIT VM(Lua语言是巴西教授发明的简单脚本语言)嵌入 Nginx中,实现高性能服务端解决方案OpenResty。

Nginx使用高效率的操作系统内核epoll接口处理TCP并发连接,因此可以轻松支持几十万甚至更多并发连接。

Nginx运行在Unix类操作系统或Windows操作系统,本文以最常见的Linux操作系统为运行环境。

Nginx反向代理服务器

如图1所示,设立一台Nginx服务器,将网站的域名解析到该Nginx服务器。用户访问网站时,Nginx服务器首先接收来自用户的访问请求,并将请求转发到源网站,获取到应答后再转发给用户。这样工作的Nginx服务器被称为反向代理服务器。设立Nginx反向代理服务器,集中处理用户对网站访问服务,在不修改源服务器的情况下,以几乎零成本满足引言中描述的最终用户和网站运维方的多种需求。

图1 Nginx反向代理工作示意

多入口与IPv6/IPv4协议支持

Nginx反向代理服务器上设置多个运营商网络IP地址,并使用DNS的视图功能,将不同运营商的用户对域名的查询请求解析到恰当的IP,这样用户的访问就可以就近进行。Nginx服务器要把从某个运营商入口进来的请求对应的应答数据包,还要从该出口返回,确保用户访问服务器的任何IP都能正常进行。

Linux操作系统支持策略路由的设置。管理员使用ip rule命令让不同IP发出的数据包查找不同的路由表,从而实现源地址策略路由。Nginx反向代理服务器中给出了设置策略路由的配置命令。设置完成后,使用https://www.17ce.com/可从国内外若干网络对网站的访问可达性、传输延迟和速度进行测试。

Linux操作系统与Nginx软件提供完整的IPv6协议功能,简单设置,不需要修改源站的设置,即可对外提供IPv6/IPv4协议服务,是将现有网站升级支持IPv6协议最简单和便捷的方式。

HTTPS协议支持

超文本传输安全协议HTTPS提供对网站服务器的身份认证,保护交换数据的隐私与完整性。为了避免中间人的流量嗅探或流量劫持,越来越多的Web站点开始使用HTTPS协议。HTTP/2是一种二进制协议,带来推送、数据流复用和帧控制等功能,目前主要用于减少HTTPS协议握手时延迟对访问体验的负面影响,已经被主流的浏览器支持。

只要具有公认的CA机构发出的服务器证书,Nginx就可以方便地对外提供HTTPS协议访问。为了简化管理,我们仅仅在用户和Nginx反向代理服务器间启用HTTPS协议,在Nginx反向代理服务器与源服务器间仍使用HTTP协议。

Nginx反向代理服务器转发请求时,向源服务器发送Host、X-REAL-IP和X-Forwarded-Proto三个HTTP头,内容分别是请求的主机名、客户端IP地址、客户访问时的协议(HTTP/HTTPS),以方便源服务器使用。

启用HTTPS协议后,建议使用https://www.ssllabs.com评估HTTPS协议的安全性,必要时调整部分参数,禁用不安全的加密算法,以达到更高的安全性。

提供HTTPS服务后,可以将用户的HTTP访问重定向到HTTPS访问,并设置HSTS头,强制将来一直使用HTTPS访问,彻底杜绝中间人的流量嗅探或流量劫持。

WAF设备引流

只要让Nginx反向代理服务器访问源服务器的HTTP流量经过Web应用防火墙(WAF)设备,就完成了引流工作。WAF设备上看到请求均是由Nginx服务器发起,因此需要调整WAF设置,让WAF设备从HTTP请求的X-REAL-IP头获取客户端IP信息。

为减少攻击者对Nginx的影响,可以收集并分析WAF日志,获取到攻击者的IP地址,直接使用Nginx服务器上的包过滤防火墙将这些IP地址封禁,彻底切断攻击者的通信。

边界防护

校园内网站数量庞大,不同的网站在不同的时期有不同的边界防护需求。如在重要时期网络保障阶段,需要将可能存在潜在漏洞的信息化应用网站限制在校内,并将部分必须校外访问的网站增加一个认证阶段,避免这些网站直接暴露到校外的潜在安全风险。

使用反向代理对外服务的网站,源服务器不需要对外暴露,能让反向代理服务器访问即可,源服务器更加安全。

设置Nginx中的Acl访问控制策略,仅允许自己校内的IPv4/IPv6地址访问,即可将网站限制在校内访问。

使用lua对反向代理做权限控制给出的方案,在Nginx反向代理服务器上运行一段lua脚本程序,不需对源网站做任何修改,能对校外访问网站增加一次认证阶段,实现灵活的边界防护策略,并可随时在Nginx代理服务器上切换。权限控制部分是运行在Nginx内的lua程序,开发简单、执行效率高、对性能影响小。权限控制部分通过检查校外用户请求中的nginx_auth_uid、nginx_auth_expire和nginx_auth_hash三个参数,结合与认证部分共享的密钥,判断访问者是否已通过认证,允许通过认证的用户访问。如果是未通过认证的用户,重定向到独立的认证部分。认证部分对接学校的统一身份认证系统,平时使用简单的用户名和密码认证,在重要时期网络保障阶段,可增加更加安全的双因子认证。通过认证后会设置对应的nginx_auth_uid、nginx_auth_expire和nginx_auth_hash三个cookie,后续的访问会被权限控制部分允许。

日志记录

Nginx反向代理可以集中记录Web网站的访问日志,不依赖源站点即可满足法规对日志的记录要求。

依据这些集中记录的日志,可以统计网站的IPv4/IPv6/HTTPS/HTTP/2访问情况,还可以分析异常扫描和攻击,找出潜在的威胁。

性能优化

默认安装的操作系统不能充分发挥Nginx的性能。step-by-step install Nginx反向代理服务器给出对操作系统的优化建议。

conntrack优化:对于Nginx服务器,因为有大量的短连接,最好不启用conntrack连接跟踪功能。如果因设置需要启用连接跟踪功能,需要在加载nf_conntrack内核模块时增加一个较大的hashsize参数,该参数*8即是内核可以记录的最多连接数,建议hashsize设置为50000。启用连接跟踪功能时,还应调整连接跟踪的超时时间,让异常状态的连接及早超时删除,减少需要跟踪的连接数量。

单进程和系统打开的最多文件数,建议增加到655360。

应用案例

中国科学技术大学从2011年开始使用Nginx反向代理服务器。目前Nginx反向代理服务运行在一个2G内存/4个CPU的虚拟机中,集中对650个网站提供IPv4/IPv6、HTTPS服务。该虚拟机有中国教育和科研计算机网、中国科技网、中国电信、中国联通和中国移动五个IPv4入口,并有CNGI-CERNET2 IPv6入口。DNS服务器上设置若干DNS view,将用户的解析分配到对应的IP地址,引导用户的就近访问。

中国科学技术大学使用Let’s Encrypt免费提供的自动签发服务器证书。由于Let’s Encrypt有每7天50个证书签发速率限制,对于其中563个形如*.ustc.edu.cn域名,在DNS服务器上使用DNS验证方式申请*.ustc.edu.cn证书,利用git传递到Nginx反向代理服务器上;而其他87个独立域名,则在Nginx反向代理服务器上使用HTTP验证方式分批申请证书。有了这些证书,Nginx中增加https配置,即可对外提供HTTPS及HTTP/2服务。Let’s Encrypt签发的证书有效期为90天,服务器上每天凌晨运行一个脚本,申请更新60天前签发的证书,更新成功后重启Nginx进程以使用新证书,实现证书的自动更新。

对Nginx反向代理服务器上的日志文件统计可以掌握用户的访问情况。

图2 学校主页访问统计

图2是学校主页http://www.ustc.edu.cn的访问统计,约80%使用HTTPS方式,约60%使用HTTP/2协议,约10%使用IPv6协议。网站的访问统计对比可以说明高校用户在IPv6协议使用率和新版本浏览器(更好支持HTTPS及HTTP/2)普及率方面比普通网民要高。

猜你喜欢
代理服务器IP地址日志
一名老党员的工作日志
扶贫日志
铁路远动系统几种组网方式IP地址的申请和设置
地铁信号系统中代理服务器的设计与实现
雅皮的心情日志
雅皮的心情日志
公安网络中IP地址智能管理的研究与思考
防火墙技术与校园网络安全的研究
《IP地址及其管理》教学设计
一种容侵系统的设计