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