![Apache httpd 服务器“可能吗”:在访问/错误日志中针对特定情况发出警报](https://linux22.com/image/798288/Apache%20httpd%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E2%80%9C%E5%8F%AF%E8%83%BD%E5%90%97%E2%80%9D%EF%BC%9A%E5%9C%A8%E8%AE%BF%E9%97%AE%2F%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%E4%B8%AD%E9%92%88%E5%AF%B9%E7%89%B9%E5%AE%9A%E6%83%85%E5%86%B5%E5%8F%91%E5%87%BA%E8%AD%A6%E6%8A%A5.png)
我只是想知道是否存在某个模块可以检测访问/错误日志中的某些事件,如果匹配则发送包含信息的电子邮件。
例如:当有人发出类似这样的请求时,我想检测: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 设置正确)