Вот дошли руки и до корпоративного сервера - Exim [2]. Посмотрев статистику с помощью встроенного парсера логов(eximstats), решил банить спаммеров по IP без раздумывания.
Напишем скрипт, который будет запускать eximstats с необходимы опциями, парсить html-лог и складывать в файл "/etc/pf-mail-spammers" нежелательные IP, которые в качестве таблицы будут подгружаться в PF:
sleep 5
/usr/local/bin/php /eximstats.php
sleep 5
pfctl -f /etc/pf.sh
Парсер:
$content=file_get_contents [3]('http://<ваш домен>/eximstats/#Rejected');
$pos = strpos [4]($content,'<h2>Top 50 rejected ips by message count</h2>');
$content = substr [5]($content, $pos);
$pos = strpos [4]($content, '<hr>');
$content = substr [5]($content, 0, $pos);
preg_match_all [6]('/\d*\.\d*\.\d*\.\d*/', $content, $output);
foreach($output as $index => $val)
{
foreach($val as $val2)
{
if ((substr [5]($val2, 0, 3)!='127')and(substr [5]($val2, 0, 7)!='192.168'))
{
$mass[]=$val2;
}
}
}
$str = implode [7]("\n", $mass);
$file = fopen [8] ("/etc/pf-mail-spammers","w+");
fputs [9] ( $file, $str);
fclose [10] ($file);
echo ('ok')
?>
Добавим таблицу и блокирующее правило в /etc/pf.conf:
table <mailspam> persist file "/etc/pf-mail-spammers"
Для просмотра лога eximstats, создадим каталог для местонахождения лога и добавим директорию в Apache:
DirectoryIndex eximstats.html
AllowOverride None
Order deny,allow
Allow from <IP>
</Directory>
и вежливо перезапустим его:
/usr/local/sbin/apachectl graceful: httpd gracefully restarted
[root@router /usr/local/etc/rc.d]#
Теперь можно смотреть статистику по Exim в браузере:
Добавим в крон для выполнения по расписанию:
58 23 * * * root /eximstats.sh