Решил немного облегчить себе жизнь. Для определения злоумышленников либо инфицированных хостов используем правила:
/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" после чего:
Сам скрипт:
#!/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 (); }; };
На этом работа закончена. За качество и элегантность скриптов не ручаюсь, если будет справедливая критика, буду только рад.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии