Apache httpd 服务器“可能吗”:在访问/错误日志中针对特定情况发出警报

Apache httpd 服务器“可能吗”:在访问/错误日志中针对特定情况发出警报

我只是想知道是否存在某个模块可以检测访问/错误日志中的某些事件,如果匹配则发送包含信息的电子邮件。

例如:当有人发出类似这样的请求时,我想检测:www.mysite.com/../../../etc/passwd 或类似请求。当发生这种情况时,我希望通过电子邮件收到通知。

提前致谢。

答案1

这并非不可能,但我不建议使用模块来实现。

相反,使用类似Apache 头皮持续解析日志文件并生成报警邮件。

(如果您确实想使用 apache 模块来执行此操作,则需要将这些请求重定向到由发送邮件的脚本组成的错误页面。查找重定向和位置指令。但保持最新状态会很麻烦。)

答案2

通常不需要这些。在我的一个 LAMP 上,我配置了fail2ban检测大量 404\503\etc 并禁止用户 ip 访问 httpd 10 分钟。我这样做是因为旧硬件防止服务器因大量同时请求而过载。

下一个想法是,你可以编写一个日志解析器:)

答案3

创建一个名为的脚本log_monitor.sh

#!/usr/bin/perl -w

use strict;

my $cachefile="/var/cache/lastpos-apache2-scan4maxclntOrSigKill";
my $logfile="/var/log/httpd/error_log";
my $searchstr="sigkill|reached maxclients|apply process slot|read data timeout|Premature end of script headers";

my $lastpos=0;
if (-f $cachefile) {
    open FH,"<".$cachefile;
    $lastpos=<FH>;
    close FH;
};

my $newpos=(stat $logfile)[7];

open FH,"<".$logfile;
seek FH,$lastpos,0;
while (<FH>) {
    print if m/$searchstr/i;
};
close FH;

open FH,">".$cachefile;
print FH $newpos;
close FH;

$searchstr根据需要进行修改。

通过 cron 配置脚本每 X 分钟运行一次。X 的值越大,您收到的电子邮件越少(对于与您提供的字符串匹配的所有错误,每 X 分钟仅发送 1 封电子邮件)。cron 作业的结果将自动通过电子邮件发送给您(如果 cron 设置正确)

相关内容