基于Openresty+Naxsi的WAF:从小白到实践

2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty、Lua、Naxsi、ELK、Redis、php、Nginx、MySQL、consul、etcd,解决方案类似软WAF的另一种思路:基于Openresty+Naxsi的WAF实现
openResty、Lua、Naxsi、ELK、consul、etcd,这些技术对项目组的成员来说,基本上都是比较陌生的,对我本人来说更是完全没接触过的,下面将会记录我是如何对这些技术进行快速入门的,网关项目是如何一步一步搭建起来的。

阶段一

  • 了解openResty、Lua、Naxsi、ELK、consul、etcd是啥玩意?

    • OpenResty一般称为ngx_openresty, 目前有两大应用目标:
      • 通用目的的 web 应用服务器。ngx_openresty 的性能(包括内存使用和 CPU 效率)算是最大的卖点之一。
      • Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。其优势在于 Lua 编程带来的巨大灵活性。
    • Lua是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程编程、面向对象编程、函数编程、数据驱动编程和数据描述。
    • Naxsi是一个开放源码、高效、低维护规则的Nginx Web应用防火墙模块。Naxsi的主要目标是帮助人们加固他们的web应用程序,以抵御SQL注入、跨站脚本、跨域伪造请求、本地和远程文件包含漏洞。
    • ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana
      • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
      • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
      • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
    • etcd是一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现
    • Consul是一个提供服务发现、健康检查、K/V存储和多个数据中心的开源服务发现工具
  • 这些技术之间是如何进行协同工作的?

    • 看懂软WAF的思路:软WAF的另一种思路:基于Openresty+Naxsi的WAF实现
    • Naxsi在本WAF中主要实现基于http请求内容的防护策略规则,用于防护一些常见的漏洞,如:SQL注入攻击 XSS攻击 目录遍历漏洞 命令注入攻击 虚拟补丁 扫描器攻击等
    • Lua在本waf中主要负责实现相对复杂的安全防护策略,如cc攻击防护、全局IP访问频率限制、特定url访问频率限制、ip黑白名单防护、url白名单防护、http请求转发等功能。
    • ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。ELK原理与介绍
    • consul、etcd是配置管理工具,二选一,用于waf防护策略分发,做到了配置文件有更新才push配置文件到nginx,并且reload nginx,避免了频繁的reload nginx节点
  • 使用docker搭建OpenResty开发环境

阶段二

  • 阅读技术文档,入门Lua
  • 阅读技术文档,入门OpenResty
  • 阅读技术文档,入门Naxsi
  • 阅读技术文档,入门ELK
  • 阅读技术文档,入门Consul、etcd
  • 寻找适合的Lua框架
  • 寻找适合的Lua包管理器

资料

Nginx与Lua编写脚本的基本构建块是指令
OpenResty(nginx+lua) 入门

原文地址:https://www.cnblogs.com/phonecom/p/10995608.html