基於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) 入門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM