天天看點

如何做 Nginx 安全日志分析可視化?

ModSecurity 這款優秀的開源 WAF,它是一個入侵檢測與阻止的引擎,原本是Apache的一個子產品,現在可作為單獨子產品編譯添加到 Nginx 服務中

雖然這款 WAF 很優秀,但是使用起來并沒有那麼容易,之前也整理了文章介紹它的原理和規則,然而還有一個問題,就是它的日志分析,之前介紹原理規則的時候,也介紹了它的日志規則,但是在使用過程中,純文字的記錄方式,對于入侵分析太不友好了

如何做 Nginx 安全日志分析可視化?

是以今天介紹一款管理 ModSecurity 日志的開源項目 WAF-FLE

如何做 Nginx 安全日志分析可視化?

WAF-FLE是專門用來處理ModSecurity日志和事件的控制台,管理者可以通過WAF-FLE檢視和搜尋ModSecurity記錄的日志

WAF-FLE是PHP寫的開源項目,搭建需要LNMP/LAMP環境

環境需求:

  • Apache/Nginx
  • PHP5.3+
    • php-pdo
    • php-mysql
    • php-apc
  • php-geoip
  • MySQL5.1+

安裝環境不贅述,隻說一個GeoIP庫的安裝,這裡要通過GeoIP庫去展示入侵IP資訊,是以需要用到這個庫,安裝很簡單,其實就是下載下傳一個dat資料庫,從https://www.maxmind.com/en/geoip-demo下載下傳

如何做 Nginx 安全日志分析可視化?

下載下傳後解壓出dat檔案即可

環境準備好之後,從github下載下傳WAF-FLE:https://github.com/klaubert/waf-fle

如何做 Nginx 安全日志分析可視化?

在waf-fle的extra目錄下,存放了資料庫sql檔案,以及Apache的配置檔案,如果是用的Apache,直接将這個配置複制到apache配置目錄下即可,如果用Nginx,參考下面的配置

如何做 Nginx 安全日志分析可視化?

修改config.php的時候,因為我沒有安裝apc的緩存擴充,這擴充很老了,是以直接設定APC_ON=false,關閉這個緩存

完成上面之後,通過域名通路,即可通路到安裝界面

如何做 Nginx 安全日志分析可視化?

這裡檢查php擴充的時候,如果你不是Apache的話,會有個問題,就是在setup.php的499行,它用apache_getenv檢測是否用Apache運作的,如果沒運作Apache,這裡過不去,我這裡是Nginx運作的,是以打開setup.php檔案499行,把這部分代碼注釋掉即可

如何做 Nginx 安全日志分析可視化?

接着點選運作建立資料庫

如何做 Nginx 安全日志分析可視化?

這裡建立資料庫的時候又有個問題,在setup.php代碼28行的地方,執行建立函數的時候,引用一個$databaseSchema,這裡修改定義了一個位置,但是我放置的是我的位置,是以這裡需要根據自己情況進行修改

如何做 Nginx 安全日志分析可視化?

修改完成後,繼續通過頁面執行建立資料庫操作,建立完成如下:

如何做 Nginx 安全日志分析可視化?

安裝完成,預設使用者名密碼是admin/admin,之後,在config.php中配置$SETUP=false,關閉安裝之後,重新通路

如何做 Nginx 安全日志分析可視化?

預設使用者密碼登入之後,就需要修改使用者名密碼

如何做 Nginx 安全日志分析可視化?

設定完新密碼之後,就會跳轉到主界面了

如何做 Nginx 安全日志分析可視化?

目前沒有資料,現在開始接入日志資料,點選菜單欄的management,添加sensor

如何做 Nginx 安全日志分析可視化?

儲存後,即建立好一個sensor,用來接收日志

如何做 Nginx 安全日志分析可視化?

建立好之後,在這個sensor上面,開始配置事件接收器

如何做 Nginx 安全日志分析可視化?

這裡選着用mlog2waffle的方式接收日志,然後選着service deamon的方式查詢日志,這種是實時查詢,WAF-FLE controller URL是配置waf-fle的控制器位址,mlog2waffle是通過put請求發送資料到這個接口位址,下面就是配置ModSecurity日志的配置路徑,配置完成後,點選Next

如何做 Nginx 安全日志分析可視化?

系統會給出提示配置,需要按照給出的配置,配置這幾個配置檔案,這裡按照提示的配置操作即可,需要的mlog2waffle配置檔案及啟動腳本都在extra目錄下

如何做 Nginx 安全日志分析可視化?

配置完成後,啟動mlog2waffle

mlog2waffle,是通過put方法發送日志到waf-fle的,但是預設Nginx是不允許put請求的,是以啟動會報錯,需要在nginx中,通過dav方法,允許put請求

如何做 Nginx 安全日志分析可視化?

啟動mlog2waffle過程中,遇到不少問題,記錄如下:

  • mlog2waffle中配置了$CHECK_CERT = “TRUE”,用來檢測SSL的,當用http的時候,這裡要改成False,否則會握手失敗
  • mlog2waffle中配置了$CHECK_CONNECTIVITY = “TRUE”,這裡是啟動,檢測mlog2waffle和waffle的連通信的,通過check_conn方法
如何做 Nginx 安全日志分析可視化?

這裡通過PUT方法,發送了一個檢測請求,這裡比較坑的是,發送PUT請求,沒有URI,但是Nginx在檢測到PUT請求沒有URI的時候,會報409,認為資源有沖突

如何做 Nginx 安全日志分析可視化?

是以,不管怎麼做,這裡檢測就不會通過,兩種方法處理,一種是直接關閉這個檢測,mlog2waffle就可以正常啟動,另外一種方法就是修改這個檢測的方法,将uri帶上,mlog2waffle是perl腳本,很簡單

  • waf-fle中使用了不少Apache專用内置函數,比如apache_getenv()、getallheaders()、apache_setenv(),因為這裡用的Nginx,是以這幾個函數都沒有,
如何做 Nginx 安全日志分析可視化?

這裡需要手動替換下,通過$_SERVER去擷取用戶端IP,而getallheaders()方法,需要手動寫一個,如下:

如何做 Nginx 安全日志分析可視化?

另外在index.php中,65行的位置,原本是通過apache_setenv()将擷取到的sensor的名稱,複制給Apache的”REMOTE_USER”,這裡不用Apache,是以直接注釋掉即可

如何做 Nginx 安全日志分析可視化?

修改完這些,就可以通過腳本啟動mlog2waffle了

如何做 Nginx 安全日志分析可視化?

啟動後,通過waf的access日志就可以看到mlog2waffle已經開始通過put方法将日志解析成event,傳輸到waf-fle

如何做 Nginx 安全日志分析可視化?

在mlog2waffle的readIndex方法中,因為要讀取并解析日志索引檔案,是以有一個正則比對如圖:

如何做 Nginx 安全日志分析可視化?

這裡需要你更具自己記錄的日志格式進行修改比對,完全比對後,才能正确讀取到日志,并解析後通過send_event方法将解析後的内容通過PUT方法傳輸到waf-fle進行展示

waf-fle的接收檔案就一個index.php,它将所有步驟通過正則解析,有興趣的可以看下源碼,到此waf-fle就部署完成了,看下效果

如何做 Nginx 安全日志分析可視化?

雖然waf-fle是比較老的開源項目,但是對于modsecurity的日志分析完全夠用