Блокирование спама и уведомление пользователей (Mikrotik, UTM 4)

Решил немного облегчить себе жизнь. Для определения злоумышленников либо инфицированных хостов используем правила:

/ip firewall filter
add action=add-src-to-address-list address-list=spammer address-list-timeout=4h chain=forward comment=\                                     
"Detect and add-list SMTP virus or spammers" connection-limit=30,32 disabled=no dst-port=25 limit=50,5\
protocol=tcp src-address=!IP-адрес_моего_почтового_сервера 
add action=drop chain=forward comment="BLOCK SPAMMERS OR INFECTED USERS" disabled=no dst-port=25\
protocol=tcp src-address-list=spammer

Правила взяты из http://wiki.mikrotik.com/wiki/How_to_autodetect_infected_or_spammer_users_and_temporary_block_the_SMTP_output Единственное отличие - я исключил из проверки адрес своего почтового сервера и уменьшил время жизни блок-листа. Следующим шагом - на Mikrotik я создал скрипт отправляющий список IP-адресов инфицированных пользователей на почтовый ящик:

/system script
add name=spammer policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=":local text;\r\                           
    \n:local item;\r\                                                                                                                       
    \n:local spam;\r\                                                                                                                       
    \n:foreach i in=[/ip firewall address-list find list=spammer ] do={\r\                                                                  
    \n  :set item ([/ip firewall address-list get \$i address]);\r\                                                                         
    \n  :set text (\$text . \$item);\r\                                                                                                     
    \n  :set text (\$text . \"\\n\");\r\                                                                                                    
    \n  :set spam 1;\r\                                                                                                                     
    \n};\r\                                                                                                                                 
    \n:if (\$spam = 1) do {\r\                                                                                                              
    \n/tool e-mail send body=\"\$text\" to=\"autospamusers@ваш_домен\" subject=\"ALERT Mikrotik spammer or virus list\";\r\           
    \n}"                              

И выполняем его каждые 4-ре часа

/system scheduler
add comment="" disabled=no interval=4h name=spammer on-event=spammer policy=\                                                               
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive start-date=jul/18/2010 start-time=08:00:00

Для того, что-бы Mikrotik отправил почту следует указать Ваш почтовый сервер, в случае необходимости логин и пароль:

/tool e-mail
set from=адрес_отправителя password="" server=IP-адрес_сервера:25 username=""

В файл aliases почтового сервера (postfix) добавил следующую строку: autospamusers: "|/usr/local/scripts/spam/spamusers.pl" после чего:

postalias /etc/postfix/aliases

Сам скрипт:

#!/usr/bin/perl -w
use CGI qw(:all);
use DBI;
use Time::localtime;
require DBD::mysql;
my $mail_data;

sub mail {
 open( MAIL, "|/usr/sbin/sendmail -oi -t" ) or die "can't fork sendmail: $!";
print MAIL <<EOF;
From: support <support\@домен>
To: $mailspammer, support\@домен
Content-type: text/plain; charset=windows-1251
Subject: ВНИМАНИЕ! На Вашем компьютере вирус!
Уважаемый пользователь $fullname ($mailuser) с Вашего компьютера 
(IP-адрес $first) производится массовая рассылка рекламных писем,
что является признаком вирусной активности и мешает нормальной работе 
Вам и сети в целом.
В данный момент отправка писем с Вашего рабочего места автоматически 
заблокирована. Для отправки корреспонденции воспользуйтесь Веб-интерфейсом
почтового ящика.
Настоятельно рекомендуем Вам проверить компьютер на наличие вирусов.
После удаления вредоносных программ, нормальная работа почтовых транспортов
будет автоматически  возобновлена, в течении трех часов.
Надеемся на взаимопонимание.
-- 
С уважением,
служба технической поддержки
EOF
 close MAIL;
}

sub sqlmail {
        $dbh=DBI->connect("DBI:mysql:$database","$dbuser","$dbpass") || die "Error\n";
        $sql2=$dbh->prepare("select email, login, full_name from users where ip like \'%$first %\'");
        $sql2->execute;
        $user=$sql2->fetchall_arrayref;
        $sql2->finish;
        $mailspammer=$user->[0][0];
        $mailuser=$user->[0][1];
        $fullname=$user->[0][2];
#Если у пользователя в биллинге отсутствуют данные о почтовом ящике
#добавляем адрес, например, менеджера по работе с клиентами
        if ($mailspammer eq ''){$mailspammer='manager@(домен)'};
        mail ();
        $dbh->disconnect();
}

 $dbuser="имя пользователя";
 $dbpass="пароль";
 $database="UTM";

while(<STDIN>) {$mail_data.=$_;
#проверяем относятся ли блокированные IP-адреса к нашей сети
#к примеру 10.10.10.0/24, 10.10.15.0/24....
    if ( /10.10.(10|15|25|35|45|55)/ ){
        $first=$_;
        chomp($first);
        sqlmail ();
    };
};

На этом работа закончена. За качество и элегантность скриптов не ручаюсь, если будет справедливая критика, буду только рад.