以前介紹過ModSecurity這款優秀的開源WAF,它是一個入侵檢測與阻止的引擎,本來是Apache的一個模塊,如今可做爲單獨模塊編譯添加到Nginx服務中php
雖然這款WAF很優秀,可是使用起來並無那麼容易,以前也整理了文章介紹它的原理和規則,然而還有一個問題,就是它的日誌分析,以前介紹原理規則的時候,也介紹了它的日誌規則,可是在使用過程當中,純文本的記錄方式,對於入侵分析太不友好了mysql
因此今天介紹一款管理ModSecurity日誌的開源項目WAF-FLEnginx
WAF-FLE是專門用來處理ModSecurity日誌和事件的控制檯,管理員能夠經過WAF-FLE查看和搜索ModSecurity記錄的日誌git
WAF-FLE是PHP寫的開源項目,搭建須要LNMP/LAMP環境github
環境需求:web
Apache/Nginxsql
PHP5.3+數據庫
php-pdoapache
php-mysql緩存
php-apc
php-geoip
MySQL5.1+
安裝環境不贅述,只說一個GeoIP庫的安裝,這裏要經過GeoIP庫去展現入侵IP信息,因此須要用到這個庫,安裝很簡單,其實就是下載一個dat數據庫,從https://www.maxmind.com/en/geoip-demo下載
下載後解壓出dat文件便可
環境準備好以後,從github下載WAF-FLE:https://github.com/klaubert/waf-fle
在waf-fle的extra目錄下,存放了數據庫sql文件,以及Apache的配置文件,若是是用的Apache,直接將這個配置複製到apache配置目錄下便可,若是用Nginx,參考下面的配置
修改config.php的時候,由於我沒有安裝apc的緩存擴展,這擴展很老了,因此直接設置APC_ON=false,關閉這個緩存
完成上面以後,經過域名訪問,便可訪問到安裝界面
這裏檢查php擴展的時候,若是你不是Apache的話,會有個問題,就是在setup.php的499行,它用apache_getenv檢測是否用Apache運行的,若是沒運行Apache,這裏過不去,我這裏是Nginx運行的,因此打開setup.php文件499行,把這部分代碼註釋掉便可
接着點擊運行建立數據庫
這裏建立數據庫的時候又有個問題,在setup.php代碼28行的地方,執行建立函數的時候,引用一個$databaseSchema,這裏修改定義了一個位置,可是我放置的是個人位置,因此這裏須要根據本身狀況進行修改
修改完成後,繼續經過頁面執行建立數據庫操做,建立完成以下:
安裝完成,默認用戶名密碼是admin/admin,以後,在config.php中配置$SETUP=false,關閉安裝以後,從新訪問
默認用戶密碼登陸以後,就須要修改用戶名密碼
設置完新密碼以後,就會跳轉到主界面了
目前沒有數據,如今開始接入日誌數據,點擊菜單欄的management,添加sensor
保存後,即建立好一個sensor,用來接收日誌
建立好以後,在這個sensor上面,開始配置事件接收器
這裏選着用mlog2waffle的方式接收日誌,而後選着service deamon的方式查詢日誌,這種是實時查詢,WAF-FLE controller URL是配置waf-fle的控制器地址,mlog2waffle是經過put請求發送數據到這個接口地址,下面就是配置ModSecurity日誌的配置路徑,配置完成後,點擊Next
系統會給出提示配置,須要按照給出的配置,配置這幾個配置文件,這裏按照提示的配置操做便可,須要的mlog2waffle配置文件及啓動腳本都在extra目錄下
配置完成後,啓動mlog2waffle
mlog2waffle,是經過put方法發送日誌到waf-fle的,可是默認Nginx是不容許put請求的,因此啓動會報錯,須要在nginx中,經過dav方法,容許put請求
啓動mlog2waffle過程當中,遇到很多問題,記錄以下:
mlog2waffle中配置了$CHECK_CERT = "TRUE",用來檢測SSL的,當用http的時候,這裏要改爲False,不然會握手失敗
mlog2waffle中配置了$CHECK_CONNECTIVITY = "TRUE",這裏是啓動,檢測mlog2waffle和waffle的連通訊的,經過check_conn方法
這裏經過PUT方法,發送了一個檢測請求,這裏比較坑的是,發送PUT請求,沒有URI,可是Nginx在檢測到PUT請求沒有URI的時候,會報409,認爲資源有衝突
因此,無論怎麼作,這裏檢測就不會經過,兩種方法處理,一種是直接關閉這個檢測,mlog2waffle就能夠正常啓動,另一種方法就是修改這個檢測的方法,將uri帶上,mlog2waffle是perl腳本,很簡單
waf-fle中使用了很多Apache專用內置函數,好比apache_getenv()、getallheaders()、apache_setenv(),由於這裏用的Nginx,因此這幾個函數都沒有,
這裏須要手動替換下,經過$_SERVER去獲取客戶端IP,而getallheaders()方法,須要手動寫一個,以下:
另外在index.php中,65行的位置,本來是經過apache_setenv()將獲取到的sensor的名稱,複製給Apache的"REMOTE_USER",這裏不用Apache,因此直接註釋掉便可
修改完這些,就能夠經過腳本啓動mlog2waffle了
啓動後,經過waf的access日誌就能夠看到mlog2waffle已經開始經過put方法將日誌解析成event,傳輸到waf-fle
在mlog2waffle的readIndex方法中,由於要讀取並解析日誌索引文件,因此有一個正則匹配如圖:
這裏須要你更具本身記錄的日誌格式進行修改匹配,徹底匹配後,才能正確讀取到日誌,並解析後經過send_event方法將解析後的內容經過PUT方法傳輸到waf-fle進行展現
waf-fle的接收文件就一個index.php,它將全部步驟經過正則解析,有興趣的能夠看下源碼,到此waf-fle就部署完成了,看下效果
雖然waf-fle是比較老的開源項目,可是對於modsecurity的日誌分析徹底夠用
運維技術交流羣
「運維研習社」創建了運維技術交流羣,你們能夠添加小編微信進行加羣。歡迎有想法、樂於分享的朋友們一塊兒進羣交流學習。
掃描添加好友邀您進運維交流羣
本文分享自微信公衆號 - 運維研習社(gh_4135e2716ad3)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。