序
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存儲和多個數據中心的開源服務發現工具
- OpenResty一般稱為ngx_openresty, 目前有兩大應用目標:
-
這些技術之間是如何進行協同工作的?
- 看懂軟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包管理器
