在合肥飘雪前结束的院校网路信息安全从业人员网友见面会上,中国科学技术大学张焕杰介绍了《校园网站安全防护之Nginx》,张高手活脱脱把Nginx从一个高性能的Web容器玩成了一个安全设备。因为我近来也在学张高手玩Nginx,所以沿着张前辈的PPT说开来。在阅读之前,最好你可以先阅读完张前辈的PPT和视频资料,里面对Nginx怎样在中国科学技术大学的应用已然说得十分清楚了。
下面我会直接把Nginx的使用说成应用交付,虽然应用交付的概念比Nginx广更多。
为什么必须有应用交付
首先说为何每位中学都应该有一个Nginx或则商业的应用交付设备。
在好多中学的信息与网路中心内,网络管理员追求的是稳定,负责Web安全的人为了剖析等用途想要在主干串入一个设备是有一定难度的。Web流量和其他TCP流量混在一起,虽然Web流量是无状态的,割接的时侯丢几个包说实话也不会有太大的问题,然而TCP有些数据库联接、备份应用联接、心跳联接是常年的,丢几个包会导致哪些后果由于不懂也没人敢打包票。而且在所有包里串入一个只为Web使用的设备,对这台设备的性能要求提升了几个数量级,也会导致每次任何故障排查都要考虑到这台设备,无法做到挺好的隔离。所以分离Web流量是必须的。当然你可以用类似哪些SDN、策略路由、服务链(网络这儿我不懂)等等技术将Web流量引流到个别地方,这些要看你目前网路的构架。
就算你可以做好Web流量分离,然而接下来就会碰到HTTPS问题。如果你不考虑全校HTTPS那可以忽视。HTTPS证书一个一年439-2191.3元不等,如果是一千个站点,一年成本在44万左右。一个键值域名1999-5673.3元不等,HTTPS证书公钥的泄漏会导致中间人攻击,所以也是不能申请一个发给所有子网站来使用的。
当然也有免费的方案,Let’s Encrypt,3个月更新一次,可以完全自动化,对每位网站管理员的技术水平有一定要求。而且假如你要监管,你必须要求那些管理员申请到证书后递交给你能够对其进行WAF防护。如果要动到DNS Challenge Validation的话,网站管理员又没有DNS的控制权,DNS服务器也不会开放API给管理员来调用。所以怎样看都必须由校方统一申请了。然而Let’s Encrypt申请有限制,一个注册域名下的子域名一个星期只能50个,每个证书可以折叠100个域名,也就是张前辈的做法,通过很精致的控制,在3个月周期内每晚轮流renew不同的证书,如果能用满配额,实际上可以申请到6万个免费的网站HTTPS证书,然而证书的折叠须要证书拥有者主体最好是同一个人。我以前也考虑过这个问题,我在备案系统内使用DNS Challenge为每位域名申请免费的Let’s Encrypt证书,因为备案系统有管理员的信息,所以可以以每位管理员负责的域名或则同一个服务器IP来做折叠,然后让管理员可以自动或则手动wget下载,让WAF定期更新对应域名的SSL证书,这样子申请的免费域名在rate limits内,我又有所有的公钥,管理员使用成本也很低。
然而折叠的证书也会泄漏域名信息。泄露域名虽然也不是很大的事情,DNS爆破的工具多了。这么折腾,不如直接在后端拦截一个Nginx或应用交付来解决。
而且应用交付有个最大的安全用处就是他可以对外隐藏你的服务器,任凭你内部怎么波涛汹涌,最终可以交付出一个清晰的网站地图。
Nginx能带来的益处
Nginx带来的问题
应用交付是一定要上的,但是上的过程因为前端应用须要一些小调整,所以须要拉长施行的时间,成熟一个上一个。而且你可能须要多个应用交付隔离,有些应用未能上应用交付或则建议不上。
我准备如何做
我如今还没怎样做,这里涉及到选择开源软件和商业软件的问题,有机会之后说。
我喜欢自动化布署和雕凿开源软件,所以自己做的话,我会2台Nginx,使用一个虚IP,使用KeepAlived做高可用。CPU、内存、网络、stub_status等日志使用collectd搜集,写到Prometheus,使用Grafana展示大屏。
accesslog和errorlog一份扔到远程syslogd,在Elasticsearch+Kibana或则Splunk展示大屏,一份扔给Hadoop类的以日期为文件名的文本文件内保存以备未来剖析。中间可以再加入基于Docker、Flask、LDAP认证和OTP双因素认证。有机会的话开源自动化布署代码。
参考文档