首页 应用实战正文

ModSecurity开启日志审计

王子 应用实战 2019-11-18 2749 0

本文主要介绍如何开启ModSecurity的日志审计功能,将日志保存至本地服务器中。

本文中涉及的规则均已在景安网络(http://www.zzidc.com)的20万个虚拟主机业务中正常运行(或测试通过),可正常使用。


一、为什么要记录日志

通常情况下,我们记录网站的访问日志,原因有二:

1.可以通过分析日志来了解网站的访问情况,比如网站总访问量,蜘蛛访问量等等。

2.当网站访问出现问题时,可以通过查询日志找出问题原因。

而在网站被黑客入侵的情况频繁发生的现在,记录日志的第三个作用产生了:找出黑客是如何利用网站程序漏洞进行入侵的。

一般情况下,黑客入侵网站成功之后的常见操作是上传木马文件、给网站页面添加黒链等等(服务器提权不在此讨论),则一旦黑客上传或更改了网站文件,那么,根据网站文件被创建/修改的时间,然后再根据时间查看对应时间点的网站访问日志,即能查出黑客是如何利用网站程序漏洞进行入侵的。


二、开启ModSecurity日志审计功能

与ModSecurity日志审计功能相关的配置指令如下(以下指令存在于modsecurity.conf文件中):

SecAuditEngine On|Off|RelevantOnly
SecAuditLog /path/to/audit.log
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial|Concurrent 
SecAuditLogStorageDir /path/to/storage/dir 
SecAuditLogRelevantStatus ^(?:5|4(?!04))

SecAuditEngine:是否开启日志审计,On为开启,Off为关闭,RelevantOnly为只记录指定HTTP状态码的访问,与SecAuditLogRelevantStatus搭配使用;

SecAuditLog:设置日志保存的文件路径,注意,请确保文件所在目录存在并赋予777权限,否则将无法记录日志;

SecAuditLogParts:设置日志记录的内容,建议配置为ABIJDEFHZ,每字母代表的内容详见http://www.modsecurity.cn/chm/SecAuditLogParts.html

SecAuditLogType:日志记录方式,Serial代表将日志记录到单个日志文件中,与SecAuditLog搭配使用;Concurrent代表并行记录文件,每一次访问都会生出一个单独文件进行记录,与SecAuditLogStorageDir搭配使用;

SecAuditLogStorageDir:设置日志保存的目录,当SecAuditLogType设置为Concurrent时方可生效,注意,请确保配置的目录存在并赋予777权限,否则将无法记录日志;

SecAuditLogRelevantStatus:根据HTTP状态码来设置是否记录日志,^(?:5|4(?!04))表示除404外,记录其他所有5与4开头的HTTP状态码的访问日志,当SecAuditEngine设置为RelevantOnly时方可生效;


串行方式记录日志的配置如下:

SecAuditEngine On
SecAuditLog /var/log/modsecurity/modsecurity.log
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Serial

并行方式记录日志的配置如下:

SecAuditEngine On
SecAuditLogParts ABIJDEFHZ
SecAuditLogType Concurrent 
SecAuditLogStorageDir /var/log/modsecurity/


三、其他建议

1.建议使用并行方式,即SecAuditLogType Concurrent的方式记录日志,如果使用串行方式,服务器内网站过多或访问量过大时,日志文件会越来越大,不利于内容的检索;

2.不建议使用SecAuditEngine RelevantOnly,即只保存指定HTTP状态码的访问日志,之所以有这个选项的原因之一是可以方便统计攻击及拦截情况,但为了要查出黑客是如何利用网站程序漏洞进行入侵的,还是记录所有的日志吧。

3.实际在生产环境中,我们其实无需利用ModSecurity记录所有的日志,因为WEB服务器中已经记录了HTTP的访问日志,但一般情况下却没有记录POST访问提交过来的数据,因此我们可以编写一条规则,使ModSecurity只记录POST访问的日志,规则如下:

SecRule REQUEST_LINE "@beginsWith POST" "phase:1,pass,ctl:auditEngine=On,auditlog,nolog,id:50"

该规则需保存至REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf文件中,而此时SecAuditEngine应配置为Off,其他配置仍需正常设置,如SecAuditLogParts,SecAuditLogType等。

4.如果要记录请求体,建议使用IJ来替代C,因为使用C,在进行文件上传时,上传文件的所有内容也将会被记录在审计日志中,如果你上传了一个10G的文件,那审计日志也会记录10G的内容。但目前存在一个情况,在ModSecurity v3版本中,使用IJ无效,只能使用C来记录请求体。


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。