Блокировка спамеров с помощью Eximstats+PF

Опубликовано:

Вот дошли руки и до корпоративного сервера — Exim. Посмотрев статистику с помощью встроенного парсера логов(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')
?>

Добавим таблицу и блокирующее правило в /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

Понравилась статья, расскажи о ней друзьям, нажми кнопку!