标点符(钱魏 Way)

SEnginx:基于Nginx的安全增强衍生版

前面的博客中介绍了阿里基于Nginx进行二次开发的Tenginx,今天要介绍的是Nginx的另外一个衍生版SEnginx。

SEnginx(Security Enhanced NGINX)是著名的 HTTP 和 反向代理 服务器nginx的一个变种版本,主要是在原版nginx的基础上增加了多种Web安全功能,并增强了应用交付等方面的原有功能。SEnginx继承了nginx的全部原始特性,全面兼容标准nginx的配置,此外也吸收了一些源自tengine等优秀nginx变种的高级特性以及一些常用的第三方nginx模块。

SEnginx目前只维护一个主线分支,文档与主线版本同步。

SEnginx开源项目由东软集团网络安全事业部(http://security.neusoft.com)发起。

SEnginx除了继承了原版nginx的全部特性(http://nginx.org/en/docs/)外,还在以下方面增加了新的特性:

一、应用交付

1、TCP负载均衡

SEnginx中集成了nginx_tcp_proxy_module,为用户提供tcp的反向代理和负载均衡功能,完全兼容原有配置,具体配置方法请参考:https://github.com/yaoweibin/nginx_tcp_proxy_module

2、rewrite模块的if命令扩展

If Extend模块是对原始的nginx的rewirte模块中的if指令进行扩展,具体如下:

  • 支持多条件匹配,多个条件之间的关系可以是and或者or
  • 匹配的方法除了原版的if条件操作符外,还支持比较运算符

3、动态upstream域名解析

此功能对原始nginx的upstream域名处理环节进行了增强,原始nginx只有在解析配置文件阶段会对proxy_pass后的域名或者upstream中server的域名进行一次DNS查询,如果域名对应的IP地址发生变化之后,则需要reload或者重新启动nginx。SEnginx可以支持在运行阶段动态查询域名所对应的IP地址,目前此功能只支持查询到的IP地址列表中的第一个地址,并使用此地址连接后端的服务器。

4、支持要求客户端验证的后端HTTPS服务器和双向HTTPS后端验证

本功能在nginx原有的proxy模块上增加了设置证书的功能,在连接后端的https服务器时,可以使用设置的证书进行ssl握手,此项功能主要用于在后端的https服务器开启了“客户端证书验证”的情况下,可以握手成功。此外,还增加了对服务器证书验证的功能,即:可以在SEnginx上设置给服务器证书签名的CA证书,用于对服务器进行验证。

5、负载均衡算法

  • Fastest负载均衡算法:通常来说,响应速度快的服务器应该获得更多的请求,因为响应快意味着服务器还有能力处理更多的请求。fastest负载均衡算法就可以将请求转发给响应最快的服务器。
  • Fair负载均衡算法:集成了Fair负载均衡算法,该算法支持以全部的work进程为基础进行后端服务器选择,这样对后端服务器的负载判断的更加准确。SEnginx集成的fair模块完全和原有配置兼容,fair模块的配置方法详见:https://github.com/gnosek/nginx-upstream-fair

6、会话保持机制

一些使用负载均衡功能的网站会要求属于同一会话的请求必须交付给相同的服务器,使用persistence模块就可以实现这一功能。persistence模块必须与负载均衡模块配合使用,一个新的请求到来时,负载均衡算法将其交付给服务器A,这样就建立了一个会话;当这个会话的下一个请求到来时,由persistence模块仍然将请求交付给A,这样就保证了同一会话的请求不会交付给不同的服务器。persistence有三种标识会话的方式供用户选择:

  • 插入HTTP cookie来标识会话
  • 监听现有会话的cookie来标识会话
  • 基于session功能来标识会话

7、缓存类型设置

Cache Extend模块是对原始的nginx的proxy等模块中的cache功能进行扩展,支持了针对应答类型进行缓存的功能。如果没有设置cache types相关的命令,则缓存行为和标准nginx的一致。

8、服务器健康检查

集成了tengine的upstream check模块,该模块支持多种健康检查的手段
SEnginx集成健康检查模块完全和原有配置兼容,配置方法详见:http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

二、WEB安全

1、访问行为识别模块

访问行为识别模块的作用是对用户访问网站的行为进行监控,在和其他功能模块(例如基于条件的限速功能和机器人缓解功能)配合使用的情况下,可以使得一些动作的执行更加准确,例如对CC攻击和页面扫描的判断等场景。目前此模块只支持敏感URL访问识别一种模式,其他行为模式的支持会逐渐添加。

2、基于条件的限速功能

本功能基于tengine的limit_req模块,该模块针对原始nginx的limit_req功能在IP白名单、多条件限速以及forbid_action等方面进行了增强,SEnginx在此基础上增加了condition参数,只有条件为真时才执行限速动作,这样limit_req模块和机器人缓解模块以及访问行为识别模块配合使用,可以实现更加严格且多样化的限速策略。

3、HTTP机器人缓解功能

  • HTTP DDoS缓解 (Low Orbit Ion Cannon …)
  • 漏洞扫描防御(AppScan, Acunetix Web Vulnerability Scanner, Metasploit Pro, Nessus …)
  • 网络爬虫阻挡

Robot Mitigation模块是基于Roboo(https://github.com/yuri-gushin/Roboo) 模块的理念,使用C语言进行了重写。
Robot Mitigation模块提供了一种防御HTTP机器人的功能,主要的目的在于防止恶意扫描和DDoS等网络威胁。Robot Mitigation模块采用了一种基于“挑战”的验证方法,即向客户端发送特定的、浏览器能解析的应答,如果客户端是真实的浏览器,则会重新触发请求,并带有一个特定的Cookie值,Robot Mitigation模块会依据此Cookie的信息来决定是否放行此请求。

Robot Mitigation模块相对于原始的Roboo主要在以下方面进行了增强:

  • C语言的效率更高,并且对机器人判断的位置提到了content handler之前
  • 简化了原始Roboo的配置,更方便使用
  • 基于NetEye安全层统一进行调用顺序和动作的处理。
  • 对于javascript挑战类型,根据用户事先定义的javascript代码集合,随机返回javascript代码,而不使用单一的javascript代码
  • 实现了和动态黑名单模块的联动,可以将恶意IP地址进行长时间阻断而不额外耗费系统资源
  • 增强了白名单的功能,实现了基于DNS反查的User-Agent白名单功能

4、动态IP黑名单

IP黑名单模块提供了动态IP黑名单的功能,此模块和其他的安全功能模块配合使用,可以实现当某个源IP地址在1秒内发生指定的攻击次数时,将此IP地址加入到IP黑名单中,并阻断此IP一段时间。

5、带DNS反查的User-Agent白名单

白名单模块提供了基于User-Agent并带有DNS反查功能的匹配机制,可以在SEnginx中定义白名单,并将白名单应用到不同的安全功能中。命中白名单的请求将会跳过相关安全模块的检查,目前支持白名单的安全模块有:

DNS反查,是根据请求的源IP地址,查询DNS服务器获取域名,如果域名和用户定义的正则pattern匹配,则此白名单才命中。此机制是为了防止User-Agent伪造为知名机器人。可以定义多个白名单并在不用功能上使用。

6、Cookie防篡改

Cookie Poisoning模块能监控服务器发出的Set-Cookie头以及设置的cookie值,如果cookie的值在客户端被修改,则此模块会检测出修改,并执行动作。此模块依赖于session模块,因此需要开启session支持。

7、网页防篡改

网页防篡改模块监控服务器磁盘上的文件,并在请求到达SEnginx的时候核查文件水印是否有变化,从而达到防篡改的目的。防篡改模块可以和nginx配合以达到在篡改发生时,恢复网页内容的功能。此模块默认随SEnginx一起发布,也可以单独使用在标准的nginx版本上。注:此模块只是防止网页篡改的补救措施,网站管理员必须使用如SElinux之类的工具加强网站服务器自身的安全,这样才能从根本上解决网页篡改问题。

8、多种Web威胁防御(集成NaxsiModSecurity):

  • SQL注入攻击
  • 跨站脚本攻击
  • 目录遍历
  • 远程文件包含
  • 入侵检测逃避

9、安全会话机制

Session模块提供了对HTTP请求的跟踪功能,其他的一些安全模块会依赖于此模块进行一些处理。 Session会在客户端的浏览器设置一个Cookie用于记录会话信息。目前依赖于session功能的模块有:Cookie防篡改

10、NetEye安全层

NetEye Security Layer,简称NS Layer,是nginx中新增加的一个框架,用于组织和安排模块。NS Layer在nginx中增加了一个phase用于处理request包,一个header filter和一个body filter用于处理response包。各个模块可以根据需要在NS Layer上注册自己的回调函数。NS Layer提供了一种控制模块建流程的机制,可以实现在不同的模块之间任意跳转。NS Layer提供了统一处理动作的方法,即基于NS Layer的安全模块,在检测出攻击需要执行动作时,由NS Layer统一处理。

三、管理

1、syslog支持

SEnginx中集成了nginx_syslog_patch,为用户提供将nginx的日志导出到syslog的功能,此功能完全兼容原有配置,具体配置方法请参考:https://github.com/yaoweibin/nginx_syslog_patch

2、统计

统计信息模块是用于记录SEnginx中的多种流量数据和攻击数据的模块,目前提供的统计项目有:

流量统计

  • 当前请求数,指的是当前server中有多少个request在处理中
  • 总请求数,指从SEnginx启动运行开始,当前server一共共处理的请求数
  • 应答数,指从SEnginx启动运行开始,当前server一共处理的应答数,是按状态码进行统计的
  • 发送的字节数,指当前server一共发送的字节数
  • 接收的字节数,指当前server一共接收的字节数

流量统计目前只支持server端,不支持upstream端

攻击统计

  • SQL注入
  • 跨站脚本攻击
  • 远程文件包含
  • 目录遍历
  • 攻击逃避
  • 文件上传漏洞
  • cookie篡改
  • 网页篡改
  • 机器人缓解挑战次数

以上攻击类型是否有进行需要根据配置文件中是否开启了对应的防御功能决定。目前不支持ModSecurity的攻击统计。
演示地址:http://demo.senginx.org
此模块在SEnginx 1.5.14以及以后的版本中提供。

SEngix官方网址:http://www.senginx.org/

码字很辛苦,转载请注明来自标点符《SEnginx:基于Nginx的安全增强衍生版》

评论