ngx_lua_waf適應多站點情況的研究

wyzsk發表於2020-08-19
作者: zhangsan · 2015/04/30 8:00

0x00 前言


在前一篇文章《基於ngx_lua模組的waf開發實踐》(連結為:/tips/?id=5136)中,提出了後續的三個研究方向,其中一個就是在多站點下waf分離的研究,現在將這方面的研究跟大家分享一下。

0x01 問題分析


最初的思路是直接在nginx中配置多個站點,然後在每個站點中都載入一份waf程式碼。

流程圖如下:

enter image description here

這樣做的情況下,如果站點比較多,就會導致nginx配置比較亂,而且當nginx配置多站點的情況下,會出現一些問題。我這裡就借用安全寶的一份對比表來說明。

enter image description here

當然,在實際應用中,一般並不會應用到這麼多站點,這裡只是做個說明。但是上面說的問題確實是存在的。

0x02 需求分析


需求1:在nginx中能夠只監聽1個站點,能夠實現所有站點轉發

需求2:各個站點可以獨立進行控制,包括waf開發,日誌開關以及使用的規則

0x03 需求實現


針對需求1,流程圖如下:

enter image description here

nginx.conf關鍵程式碼:

enter image description here

waf.lua關鍵程式碼:

enter image description here

訪問過程分析:

當一個使用者訪問到waf伺服器時,首先獲取host引數,根據網址配置裡查詢到對應的upstream,給預先定義的變數$upstream,從而達到正確轉發的目的。

而且後期還可以將網站資訊儲存在資料庫,當第一次訪問的時候再載入到記憶體,達到動態載入的目的。

針對需求2:

網址配置程式碼如下:

enter image description here

規則配置程式碼如下:

enter image description here

這樣可以給每一個網站單獨配置規則集,並在網址配置裡面註明即可。

在網址配置裡面可以註明每個網站的waf開關,是否記錄日誌,以及哪個規則。

在規則配置中可以指定規則的放行或阻攔,日誌的開啟或關閉。

0x04 後續需解決問題


  • 此種方式是一種針對對站點的很好的思路,但此方式還是依賴在nginx中配置各站點的upstream,後續考慮直接在lua程式碼中配置。

  • 針對多站點的情況,最好能夠結合資料庫,將網站資訊都儲存在資料庫中,實現動態載入。

  • 針對nginx每次變更需要reload,後期考慮寫一個控制頁面來動態的進行控制,比如規則的的開啟或者關閉針對waf各種狀態的展示以及日誌的處理與展示

0x05 總結


此文只是提供一種思路,當然也不是我想出來的,也是參考各種資料,最主要的是針對現在各種大流量大併發的網路環境下,很多公司包括我們公司有這樣一種需求,所以分享出來,希望和更多的人交流,學習。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章