备注:在当前事务可以通过ctl操作进行设置或修改
举例:以下例子说明不同的审计指令一起使用
SecAuditEngine RelevantOnly SecAuditLog logs/audit/audit.log SecAuditLogParts ABCFHZ SecAuditLogType concurrent SecAuditLogStorageDir logs/audit
SecAuditLogRelevantStatus ^(?:5|4\\d[^4])
允许值如下:
On - 默认情况下记录所有事务的日志 Off - 默认情况下不记录所有事务的日志
RelevantOnly - 默认只记录事务中由warning或error触发的日志,或者记录一些特意考虑过的状态码
SecAuditLog
描述:定义主审计日志文件路径
语法:SecAuditLog /path/to/auditlog
示例:SecAuditLog /usr/local/apache/logs/audit.log 阶段:N/A 范围:Any 版本:2.0.0
备注:伴随服务器运行开时,这个文件会以root打开,你不能为非root权限的用户对这个文件或存储这个文件的目录有可写权限。
如果串行审计日志格式使用后,这个文件将被用作审计日志条目的存储。如果同时审计日志格式使用这个文件那将被当作索引,并包含所有的审计日志文件创建信息。如果你计划使用同时审计日志并发送审计日志数据到远程主机或商业ModSecurity管理平台,那么你需要配置和使用ModSecurity日志搜集器(mlogc)并使用下述格式去得到审计日志。
SecAuditLog \
五、配置指令(二)
SecAuditLog2
描述:定义同时日志启用下的第二审计日志索引文件路径 语法:SecAuditLog2 /path/to/auditlog2
示例:SecAuditLog2 /usr/local/apache/logs/audit2.log 阶段:N/A 范围:Any 版本:2.1.2
备注:在本指令使用之前必须通过SecAuditLog定义主审计日志,另外这个文件仅用于当同时审计日志使用时复制主审计索引文件,不能用于非同时审计日志的情况。
SecAuditLogParts
描述:定义每个事务中记录到审计日志中的部分。每部分以一个独立的字母表示,当某个字母出现在列表中,也就是指每个事务中的相同部分会被记录,全部列表见下文。 语法:SecAuditLogParts PARTS 示例:SecAuditLogParts ABCFHZ 阶段:N/A 范围:Any 版本:2.0.0
备注:在这个时候ModSecurity不记录apache的见用响应内容(如404),或者服务器和日期的响应头。
默认:ABCFHZ.
可用的审计日志部分:
A - 审计日志标题(强制的) B - 请求标题
C - 请求体(目前仅针对请求体存在,并且ModSecurity已经配置成拦截) D - 为中间人响应头保留,暂未实现
E - 中间人响应体(目前仅对配置了拦截响应体和配置审计日志引擎记录有效)。中间人响应体和实际的响应体相同,除非ModSecurity拦截了中间人响应体,这种情况下,实际响应体会包含出错信息(可能是apache的默认错误信息,也可能是出错文档页面)。
F - 最终响应头(除了日期和服务器标题以外的被apache添加的近期内容传递信息)。 G - 为实际响应体保留,暂未实现。 H - 审计日志索引
I - 这C部分的替换,使用multipart/form-data编码时,在所有的异常情形下会记录与C相同的数据,在这种情况下,会记录假的application/x-www-form-urlencoded内容,这包含参数的相关信息,但不是这个文件的。如果你不想用文件(通常很大)来存储你的审计日志,这是很方便的。 J - 保留。实现后,这部分会包含文件使用multipart/form-data编码上传的信息。
K - 这部分包含一个完整的列表,按顺序匹配(每行一个),这些规则是完全合格的,从而表明继承默认的动作和操作,从2.5.0开始支持。 Z - 最终分界,意味着是条目的最后(强制的)
SecAuditLogRelevantStatus
描述:配置哪些响应状态码与审计日志的目的密切相关 语法:SecAuditLogRelevantStatus REGEX
示例:SecAuditLogRelevantStatus ^(?:5|4\\d[^4]) 阶段:N/A 范围:Any 版本:2.0.0
备注:必须将SecAuditEngine设置为RelevantOnly,其参数是个正则表达式。
这个指令最主要的目的是允许你配置审计产生特殊HTTP响应状态码的唯一事务,这个指令通常用于减少审计日志文件的总体大小。记住一点,如果使用了这个参数,那么返回状态码是200的成功攻击事件不会记录。
SecAuditLogStorageDir
描述:配置同时审计日志条目存储时的路径
语法:SecAuditLogStorageDir /path/to/storage/dir
示例:SecAuditLogStorageDir /usr/local/apache/logs/audit 阶段:N/A 范围:Any 版本:2.0.0
备注:必须同时设置SecAuditLogType,启动apache前,需要先创建目录,而且必须让服务器用户运行时可以新建文件。
尽管有了记录日志的机制,还需要确保指定的本地文件系统上有足够的磁盘究竟,并且不是在根分区上。
SecAuditLogType
描述:配置使用审计日志记录机制的类型 语法:SecAuditLogType Serial|Concurrent 示例:SecAuditLogType Serial 阶段:N/A 范围:Any 版本:2.0.0
备注:如果使用Concurrent类型必须指定SecAuditLogStorageDir
可用的值:
Serial - 所有的审计日志条目都被存储在主审计日志记录文件中,随意使用是很方便,但是它很慢,因为任何时候只有一个文件被打开也只能写入一条审计日志条目。
Concurrent - 审计日志条目被存储于不同的文件中,每个事务一个,如果你要把审计日志数据发送到远程ModSecurity控制主机上就使用Concurrent日志模式。
六、配置指令(三)
SecCacheTransformations
(Deprecated/Experimental)
描述:控制transformations的缓存,2.5.6开始,缓存是默认关闭的,当时都不赞成开启并降低为实验性。
语法:SecCacheTransformations On|Off [options]
示例:SecCacheTransformations On \ 阶段:N/A 范围:Any 版本:2.5.0 备注:N/A
第一个参数:
On - 缓存变化(每阶段,每次变化)允许相同的变化只执行一次(默认的) Off - 不缓存任务变化,强制所有的变化都被每一条规则实行生效
有以下可选项(逗号分隔)
incremental:on|off - 启用这个选项后,缓存每一个变化,而不只是最后一个变化(默认:off)
maxitems:N - 缓存N个以内的变化,超过时不再缓存,为0时表示unlimited,对于限制缓存一个使用大数字的ARGS表单这个选项是有用的。(默认:512) minlen:N - 缓存变化的值的最小长度(默认:32)
maxlen:N - 缓存变化的值的最大长度,为0时表示unlimited (默认:1024)
七、配置指令(四)
SecChrootDir
描述:配置WEB服务器工作的安全目录 语法:SecChrootDir /path/to/chroot/dir 示例:SecChrootDir /chroot 阶段:N/A 范围:Main 版本:2.0.0
备注:这个功能在Windows系统的版本上不可用,ModSecurity提供的内部chroot功能在简单配置上工作的很好,举个最简单的配置例子,apache只提供静态页面服务或使用模块提供脚本运行功能。在一些复杂设置时你会遇到一些问题:
1、DNS查询无法工作(这是因为这一功能在chroot操作后,一经查询就要求加载一个共享库) 2、你不能使用PHP发送邮件,因为PHP使用sendmail但sendmail在安全目录之外 3、某些情况下apache会莫名其妙的不干活了(重载)
你需要小心,这个内部chroot功能可能不是100%可用。由于大量默认的或是第三方为apache web服务器提供的模块,它们不可能去校验在内部chroot下是否可用,在没有被限制在安全目录中时,一个apache的模块,工作的很正常。特别是如果你正使用的模块在模块初始化阶段进行fork的(如
mod_fastcgi,mod_fcgid,mod_cgid),建议你测试每个apache进程和观察其工作目录,进程根目录,以及所打开的文件列表。考虑一下你的选择,并做出自己的决定。
SecComponentSignature
描述:扩展组件签名为ModSecurity签名
语法:SecComponentSignature \示例:SecComponentSignature \阶段:N/A 范围:Main 版本:2.5.0
备注:这个指令可以让ModSecurity增加很多有意义的已知组件,完整的签名被记录在事务审计记录中,应该让ModSecurity模块和规则集作家使用,使调试更加容易。
SecContentInjection
描述:启用内容注入使用行为附加并加在前面 语法:SecContentInjection (On|Off) 示例:SecContentInjection On 阶段:N/A 范围:Any 版本:2.5.0 备注:N/A
SecCookieFormat
描述:选择当前配置文本中使用的cookie格式 语法:SecCookieFormat 0|1 示例:SecCookieFormat 0 阶段:N/A 范围:Any 版本:2.0.0 备注:None