Apache 模块 mod_log_forensic

Description:取证记录到服务器的请求
Status:Extension
Module Identifier:log_forensic_module
Source File:mod_log_forensic.c
Compatibility:从 2.1 版开始,不再需要mod_unique_id

Summary

该模块提供 Client 请求的取证日志。记录是在处理请求之前和之后完成的,因此取证日志包含每个请求的两条日志行。法证 Logger 非常严格,这意味着:

  • 格式是固定的。您无法在运行时修改日志记录格式。

  • 如果无法写入数据,则子进程会立即退出并可能转储内核(取决于您的CoreDumpDirectory配置)。

可以在发行版的支持目录中找到check_forensic脚本,该脚本可能有助于评估取证日志的输出。

法证日志格式

每个请求记录两次。第一次是在“之前”,它会被进一步处理(也就是说,在收到 Headers 之后)。在发生正常日志记录的同时,在请求处理之后*之后,写入第二个日志条目。

为了识别每个请求,分配了唯一的请求 ID。可以使用%{forensic-id}n格式字符串在正常传输日志中交叉记录该法证 ID。如果您使用的是mod_unique_id,则将使用其生成的 ID。

第一行记录取证 ID,请求行和所有接收到的 Headers,以竖线字符(|)分隔。样例行如下所示(全部一行):

+yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US; rv%3a1.6) Gecko/20040216 Firefox/0.8|Accept:image/png, etc...

开头的加号表示这是此请求的第一条日志行。第二行只包含一个减号和 ID:

-yQtJf8CoAB4AAFNXBIEAAAAA

check_forensic脚本将日志文件的名称作为其参数。它寻找+/- ID 对,并抱怨请求是否完成。

Security Considerations

请参阅security tips文档,以详细了解如果启动日志的用户以外的任何人都可写日志文件存储目录的原因,那么为什么安全性会受到损害。

日志文件可能包含敏感数据,例如Authorization:Headers 的内容(可以包含密码),因此除启动服务器的用户以外,任何人都不应读取它们。

ForensicLog Directive

Description:设置取证日志的文件名
Syntax:ForensicLog filename|pipe
Context:服务器配置,虚拟主机
Status:Extension
Module:mod_log_forensic

ForensicLog指令用于将请求记录到服务器以进行取证分析。每个日志条目都分配有一个唯一的 ID,可以使用常规的CustomLog指令将其与请求关联。 mod_log_forensic创建一个名为forensic-id的令牌,可以使用%{forensic-id}n格式字符串将其添加到传输日志中。

该参数指定将日志写入的位置,该参数可以采用以下两种类型的值之一:

  • filename

  • pipe

    • 管道字符“ |”,后跟程序的路径,以在其标准 Importing 上接收日志信息。可以相对于ServerRoot指令指定程序名称。

Security:

如果使用了程序,则它将以启动httpd的用户身份运行。如果服务器是由 root 启动的,那么它将是 root;否则,它将是 root。确保该程序是安全的,或切换到特权较低的用户。

Note

在非 Unix 平台上 Importing 文件路径时,即使平台可能允许使用反斜杠,也应注意确保仅使用正斜杠。通常,在整个配置文件中始终使用正斜杠是一个好主意。