ELK分析ngx_lua_waf軟件防火墻日志
創(chuàng)新互聯(lián)公司2013年成立,先為龍華等服務(wù)建站,龍華等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為龍華企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
ngx_lua_waf介紹及部署可以參考
https://github.com/loveshell/ngx_lua_waf
這個(gè)一個(gè)基于lua-nginx-module的web應(yīng)用防火墻,作者是張會(huì)源(ID : kindle),微博:@神奇的魔法師。
用途:
防止sql注入,本地包含,部分溢出,fuzzing測(cè)試,xss,×××F等web***
防止svn/備份之類(lèi)文件泄漏
防止ApacheBench之類(lèi)壓力測(cè)試工具的***
屏蔽常見(jiàn)的掃描***工具,掃描器
屏蔽異常的網(wǎng)絡(luò)請(qǐng)求
屏蔽圖片附件類(lèi)目錄php執(zhí)行權(quán)限
防止webshell上傳
總結(jié):
1,Nginx_lua_waf總體來(lái)說(shuō)功能強(qiáng)大,相比其他軟件防火墻Modsecurity還稍微簡(jiǎn)單點(diǎn)。
2,Ngx_lua_waf的bug主要就是防火墻策略寫(xiě)的不嚴(yán)謹(jǐn)導(dǎo)致的,會(huì)造成兩種結(jié)果:一是部分***通過(guò)偽裝繞過(guò)防火墻;二是防火墻策略配置不當(dāng)會(huì)造成誤殺。
3,另外根據(jù)站點(diǎn)的類(lèi)型需要配置不同的策略,默認(rèn)配置后全局生效。比如論壇等比較特殊允許很多html插入,這樣的策略需要更寬松。
4,最后生成的hack記錄日志可以通過(guò)ELK分析,ELK這邊需要根據(jù)日志格式制作特殊模版,此模版能兼容大部分日志類(lèi)型,還有少部分完全沒(méi)有規(guī)律的日志分析不了。
5,最后ELK能展示日志分析結(jié)果分類(lèi),但是還不能區(qū)分各種ruletag類(lèi)型***屬于哪一種直白的表示出來(lái)。
6,最后建議ngx_lua_waf如果真的要用可以考慮在部分源站站點(diǎn)少量試用,前端站點(diǎn)不建議使用,等對(duì)該軟件理解深入后才可線(xiàn)上使用。
7,補(bǔ)充:目前對(duì)ngx_lua_waf拒絕特定的user agent、拒絕特定后綴文件訪(fǎng)問(wèn)、防止sql注入三大類(lèi)比較熟悉。
后續(xù)計(jì)劃:
有人(此人人稱(chēng)趙班長(zhǎng)項(xiàng)目地址 https://github.com/unixhot/waf) 對(duì)ngx_lua_waf進(jìn)行了二次重構(gòu),主要功能有:黑白名單、只記錄***日志不限制訪(fǎng)問(wèn)(日志格式可能更友好點(diǎn)待觀察)、另外使用openresty部署的,后期計(jì)劃使用二次重構(gòu)的waf再次測(cè)試下。
計(jì)劃大概實(shí)施步驟:
1,不要一次性部署上線(xiàn),先部署后,只記錄日志,然后觀察和調(diào)整規(guī)則,保證正常的請(qǐng)求不會(huì)被誤防。
2,使用SaltStack管理規(guī)則庫(kù)的更新。
3,使用ELKStack進(jìn)行日志收集和分析,非常方便的可以在Kibana上做出一個(gè)漂亮的***統(tǒng)計(jì)的餅圖。(目前也能實(shí)現(xiàn))
以下是具體操作過(guò)程中需要注意的問(wèn)題點(diǎn)
一,ELK新增針對(duì)nginx_lua_waf日志切分策略
1,日志格式
line = realIp.." ["..time.."] \""..method.." "..servername..url.."\" \""..data.."\" \""..ua.."\" \""..ruletag.."\"\n"
2,日志內(nèi)容
192.168.200.106 [2016-07-26 16:56:17] "UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355" "-" "Baidu-YunGuanCe-ScanBot(ce.baidu.com)" "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)"
3,logstash 切分策略
最關(guān)鍵的還是grok正則表達(dá)式的書(shū)寫(xiě),這里給兩個(gè)建議:
1)一是參考系統(tǒng)自帶的 /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/
該目錄下有系統(tǒng)自帶的很多日志格式的grok正則切分語(yǔ)法,如:
aws bro firewalls haproxy junos mcollective MongoDB postgresql redis bacula exim grok-patterns java linux-syslog mcollective-patterns nagios rails ruby
默認(rèn)沒(méi)有規(guī)律的參考grok-patterns
2)二是網(wǎng)上有兩個(gè)grok語(yǔ)法驗(yàn)證網(wǎng)站(都得×××)
http://grokdebug.herokuapp.com/
http://grokconstructor.appspot.com/do/match#result
也可以手動(dòng)驗(yàn)證,舉例如下
[root@elk logstash]# /opt/logstash/bin/logstash -f /etc/logstash/test1.conf Settings: Default pipeline workers: 4 Pipeline main started 192.168.200.106 [2016-07-26 16:56:17] "UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355" "-" "Baidu-YunGuanCe-ScanBot(ce.baidu.com)" "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)" { "message" => "192.168.200.106 [2016-07-26 16:56:17] \"UA i.maicar.com/AuthenService/Frame/login.aspx?ra=0.5440098259132355\" \"-\" \"Baidu-YunGuanCe-ScanBot(ce.baidu.com)\" \"(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)\"", "@version" => "1", "@timestamp" => "2016-07-28T10:05:43.763Z", "host" => "0.0.0.0", "realip" => "192.168.200.106", "time" => "2016-07-26 16:56:17", "method" => "UA", "servername" => "i.maicar.com", "url" => "/AuthenService/Frame/login.aspx?ra=0.5440098259132355", "data" => "-", "useragent" => "Baidu-YunGuanCe-ScanBot(ce.baidu.com)", "ruletag" => "(HTTrack|harvest|audit|dirbuster|pangolin|nmap|sqln|-scan|hydra|Parser|libwww|BBBike|sqlmap|w3af|owasp|Nikto|fimap|havij|PycURL|zmeu|BabyKrokodil|netsparker|httperf|bench| SF/)" }
其中test1.conf內(nèi)容如下:
input{stdin{}} filter { grok { match => { "message" =>"%{IPV4:realip}\s+\[%{TIMESTAMP_ISO8601:time}\]\s+\"%{WORD:method}\s+%{HOSTNAME:servername}(?<url>[^\"]+)\"\s+\"(?<data>[^\"]+)\"\s+\"(?<useragent>[^\"]+)\"\s+\"(?<ruletag>[^\"]+)\"" } } } output{stdout{codec=>rubydebug}}
最后線(xiàn)上切分策略如下:
filter { if [type] == "waf194" { grok { match => [ "message" , "%{IPV4:realip}\s+\[%{TIMESTAMP_ISO8601:time}\]\s+\"%{WORD:method}\s+%{HOSTNAME:servername}(?<url>[^\"]+)\"\s+\"(?<data>[^\"]+)\"\s+\"(?<useragent>[^\"]+)\"\s+\"(?<ruletag>[^\"]+)\"" ] remove_field => [ "message" ] } } }
二,ELK新增針對(duì)nginx_lua_waf日志的索引模版
其中最關(guān)鍵問(wèn)題是多個(gè)索引模版共存的問(wèn)題,以前總是后加索引模版會(huì)覆蓋原來(lái)的,參考http://mojijs.com/2015/08/204352/index.html 設(shè)置tempalte_name來(lái)區(qū)分不同的索引模版。
輸出模版配置如下:
output { elasticsearch { hosts => ["192.168.88.187:9200","192.168.88.188:9200","192.168.88.189:9200"] sniffing => false manage_template => true template => "/opt/logstash/templates/logstashwaf.json" template_overwrite => true template_name => "logstashwaf.json" index => "logstash-%{type}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" flush_size => 10000 } }
具體logstashwaf.json配置如下,這個(gè)是直接參考官方的elasticsearch-logstash.json,就修改了template名字,配置里面只要是string類(lèi)型的都做了不分詞,因?yàn)樽鲆晥D時(shí)不分詞一來(lái)可以節(jié)省內(nèi)存,二來(lái)向url,agent,ruletag等等長(zhǎng)stings只有不分詞才能精確匹配,那種分詞的模糊匹配用不上。另外如果只要某些string字段添加不分詞,也可以修改"match" : "*",為具體的字段,如:
"match_pattern": "regex", #此行為新增加 "match" : "(realip)|(mothod)(servername)|(url)|(data)|(useragent)|(ruletag)",
線(xiàn)上總體配置如下:
{ "template" : "logstash-waf194*", "settings" : { "index.refresh_interval" : "5s" }, "mappings" : { "_default_" : { "_all" : {"enabled" : true, "omit_norms" : true}, "dynamic_templates" : [ { "message_field" : { "match" : "message", "match_mapping_type" : "string", "mapping" : { "type" : "string", "index" : "analyzed", "omit_norms" : true } } }, { "string_fields" : { "match" : "*", "match_mapping_type" : "string", "mapping" : { "type" : "string", "index" : "analyzed", "omit_norms" : true, "fields" : { "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256} } } } } ], "properties" : { "@version": { "type": "string", "index": "not_analyzed" }, "geoip" : { "type" : "object", "dynamic": true, "properties" : { "location" : { "type" : "geo_point" } } } } } } }
三,Ngx_lua_waf生成的hack日志ELK上展示如下
其中制作視圖制作模版等都省略
分析小部分日志結(jié)果如下:
分享文章:ELK分析ngx_lua_waf軟件防火墻日志
URL鏈接:http://aaarwkj.com/article34/igdese.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、搜索引擎優(yōu)化、微信小程序、商城網(wǎng)站、網(wǎng)站收錄、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)