<< Back to man.ChinaUnix.net   CU网友原创,转载请注明出自ChinaUnix.net及原作者

自定义日志

1.8开始,可以使用Apache自定义日志专门记录那些和mod_security有关的请求。这是因为ModSecurity现在只要采取了动作,就定义一个环境变量mod_security-relevant。要使用自定义的日志文件,在配置中添加下边的(或相似的)内容:

CustomLog logs/modsec_custom_log \

"%h %l %u %t \"%r\" %>s %b %{mod_security-message}i" \

env=mod_security-relevant

审计日志

如果你希望追溯某个特定的用户或者攻击者的操作步骤的时候,标准的Apache日志用处不大。症结在于只有每个请求的一个很小的子集被记录在日志文件里。这个问题可以用ModSecurity的审计日志功能来补救。这两个指示:

SecAuditEngine On

SecAuditLog logs/audit_log

会通知ModSecurity你想要一个完整的审计日志存放在日志文件audit_log里。下边是一个被记录的请求的例子:

========================================

Request: 192.168.0.2 - - [[18/May/2003:11:20:43 +0100]] "GET /

cgi-bin/printenv?p1=666 HTTP/1.0" 406 822

Handler: cgi-script

----------------------------------------

GET /cgi-bin/printenv?p1=666 HTTP/1.0

Host: wkx.dyndns.org:8080

User-Agent: mod_security regression test utility

Connection: Close

mod_security-message: Access denied with code 406. Pattern

match "666" at ARGS_SELECTIVE.

mod_security-action: 406

HTTP/1.0 406 Not Acceptable

========================================

你可以看到在第一行你可以得到你平常从Apache得到的(记录)。第二行包含假定用来处理请求的处理程序的名字。完整的请求(包括额外的mod_security头信息)出现在分隔符后,响应报头(在这个例子中只有一行)出现在空白行后。当POST过滤打开的时候,POST有效载荷始终会被包含在审计日志里。实际的响应永远不会被包含(至少在这个版本里不会)。

这时,模块的审计日志部分会记录Apache 1.x的错误信息,在Handler:行的下边一行。这行总是以Error:开头。如果可能,这个功能会被添加到这个模块的Apache 2.x版本里。

请求的唯一标识符

如果你在Apache的配置中添加了mod_unique_id,mod_security会监测它并使用它产生的环境变量(UNIQUE_ID)。它的值会被写到审计日志里。你可以把这个唯一标识符写在显示给用户的错误页面上,以后用它来跟踪和修复假阳性(false positive,不知道怎么翻译,感觉是作者笔误)

选择日志内容

参数SecAuditEngine接受下列四个值之一:

l         On —— 记录所有请求

l         Offi —— 完全不记录请求

l         RelevantOnly —— 只记录相关请求,相关请求是那些会能匹配过滤器的请求

l         DynamicOrRelevant —— 记录动态生成的或者相关的请求。如果一个请求的处理机(handler)不是null,那么它是动态的。

ModSecurity记录动态请求有时候需要一些工作,视你的配置而定。在Apache的理论中,对请求的响应是由所谓的处理机(handler)来生成的。如果一个请求附加了处理机,那么它被看作是动态的。当时,实际情况中,Apache可以被配置来提供没有处理机的动态页面(Apache会基于资源的MIME类型来选择模块)。例如,如果你在主分发版内(?)如下介绍的配置PHP,上述情况就会发生:

AddType application/x-httpd-php .php

虽然这样也能工作,它并不是完全正确的。但是如果你用下列内容替换上边的那行:

AddHandler application/x-httpd-php .php

PHP也会工作,Apache将有一个分配给这类请求的处理机,而且审计日志记录器可以能够选择性的记录日志。