社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

如何做 Nginx 安全日志分析可视化,看完这一篇,秒懂!

高效运维 • 1 年前 • 297 次点击  

之前介绍过 ModSecurity 这款优秀的开源 WAF,它是一个入侵检测与阻止的引擎,原本是Apache的一个模块,现在可作为单独模块编译添加到 Nginx 服务中

虽然这款 WAF 很优秀,但是使用起来并没有那么容易,之前也整理了文章介绍它的原理和规则,然而还有一个问题,就是它的日志分析,之前介绍原理规则的时候,也介绍了它的日志规则,但是在使用过程中,纯文本的记录方式,对于入侵分析太不友好了

所以今天介绍一款管理 ModSecurity 日志的开源项目 WAF-FLE

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下载

下载后解压出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的日志分析完全够用

来源:本文转自公众号运维研习社,点击查看原文

近期好文:

重磅!招商证券通过信通院 DevOps 持续交付和敏捷开发管理标准评估,相关项目能力达到国内领先水平

“高效运维”公众号诚邀广大技术人员投稿

投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。

点个“在看”,一年不宕机

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/163871
 
297 次点击