Страница 1 из 1

и опят попал в блеклист!

Добавлено: 2007-12-03 12:01:46
torki
Как говорится это уже даже не СМЕШНО!
такое впечатление что кто-то специально заносит наш ИП во вражеские блеклисты.
локальная проверка ничего не дала (tcpdump порт-25 из локалки, все тихо!, релей закрыт, вирусов тоже нет)
У меня такое подазрение что в нашей конторе кто-то очень часто занимается рассылкой, ну и на адресах получателей админам это явно ненравится!
юзеры в системе, без msql. установленно из статьи http://www.lissyara.su/?id=1181 работает как танк-Т34
Вопрос к спецап такой, как и чем можно вести статистику отправки почты локальными пользователями (откого, куда, сколько (количество писем, объем))?
Зараннее огромное спасибо за помощь!!!!!!

Re: и опят попал в блеклист!

Добавлено: 2007-12-03 12:14:37
Fastman
Ну не обязательно твой почтовик спамит. У меня такое было и не раз.
СОтрудник взял ноутбук домой, подцепил трояна который рассылает
спам. И все..этого вполне достаточно... Тебя просто банят по IP с которого идет спам.
Выходы всегда есть из такой ситуации... первый - запрети из сети отсылать наружу письма всем
кроме твоего почтовика.... Но тут будет много недовольных... Свою почту личную тока через браузер
можно бут смотреть.... Второй выход - образумить юзеров и воззвать к аккуратности, корпоративный антивирь
не мешало бы поставить.... это уже зависит от понятливости и культуры сотрудников....

Re: и опят попал в блеклист!

Добавлено: 2007-12-03 12:17:34
Urgor

Код: Выделить всё

# Конфигурация транспортов

# Доставка на удалённые хосты - по SMTP
remote_smtp:
	driver	= smtp
#	headers_add	= "X-Descriptions: powered by www.lissyara.su"
# следующая строка - это внесение в таблицу отправленных писем - грамотней не 
# придумал,поэтому на неё идут варнинги в логах, однако работает :)
	hosts_avoid_esmtp =  ${lookup mysql{INSERT IGNORE INTO `sended_list` \
			(`user_from`, `user_to`, `added_timestamp`, \
			`last_mail_timestamp`, `mail_count`) VALUES \
			(LCASE('${quote_mysql:$sender_address}'), \
			LCASE('${quote_mysql:$local_part@$domain}'), \
			UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1') ON DUPLICATE \
			KEY UPDATE `last_mail_timestamp` = UNIX_TIMESTAMP(), \
			`mail_count` = `mail_count` + 1}}
Из http://www.lissyara.su/?id=1453. Ну и что-нить типа ipacctd поставить, для учета траффика.

Re: и опят попал в блеклист!

Добавлено: 2007-12-03 12:27:39
torki
плевать на недовольных
первый - запрети из сети отсылать наружу письма всем
кроме твоего почтовика....
можно по подробней.

Re: и опят попал в блеклист!

Добавлено: 2007-12-03 12:31:23
Fastman
torki писал(а):плевать на недовольных
первый - запрети из сети отсылать наружу письма всем
кроме твоего почтовика....
можно по подробней.
man ipfw
а если точнее - закрой наружу 25 порт для всех компов кроме твоего почтовика.

Re: и опят попал в блеклист!

Добавлено: 2007-12-03 13:59:50
torki
Ага, враг пойман! 192.168.1.153 tcpdump показал черезмерную активность по 25-му порту, добавил временное правило в ipfw: ipfw add 03550 deny all from 192.168.1.153 to any, жду жалобу что не работает интернет, а там как говорится будет видно.

Re: и опят попал в блеклист!

Добавлено: 2007-12-04 11:26:07
Urgor
А если еще один заразиться? Так и ловить руками? Да и отрубать нат на 25й порт не всегда возможно.... обычно существует куча привелигированных идиотов которым не запретишь :(
Но разве кто-то сказал что будет просто? А все действительно может быть просто! :) Как жутко ленивый человек скажу: "Зачем делать то, что может делать комп?"
Итак:
1 : Ставим ipacctd по статье Lissyara из раздела подсчет траффика.
2 : Пишем перловый скрипт и суем его в cron на выполнение скажим каждые 30 минут (ну это каждый сам решает для себя), который и будет смотреть на сколько же серверов рассылает юзер почту (и банить если привышен некоторый лимит, засылая кляузу админу). Даже для очень болтливого юзера предел в 15-20 серваков почти неисчерпаем, у спамера же счет идет на десятки тысяч...
Вот пример статистики:

Код: Выделить всё

+---------------+-------+
| from_IP       | cnt   |
+---------------+-------+
| 192.168.0.11  |     3 |
| 192.168.15.21 | 39338 |
| 192.168.15.22 |     5 |
| 192.168.15.23 |     1 |
| 192.168.15.24 |     4 |
+---------------+-------+
И, собственно, сам скрипт:

Код: Выделить всё

#!/usr/bin/perl -w

# вводим переменные
# внешний интерфейс
$interface = 'xl0';
# Лимит серверов
$limit = 20;
# MySQL - хост где БД
$db_host = 'localhost';
# MySQL юзер
$db_user = 'ipacctd';
# MySQL пароль
$db_password = 'ipacctd';
# MySQL база данных
$db_database = 'ipacctd';
# подрубаем модуль для работы с MySQL
use DBI;
# время - тока чтоб год достать...
use Time::localtime;

# Ящик админа
$admemail='support@microsoft.com';
$RobotName='MailGuard';
$RobotAddr='no-reply@mbfkk.spb.ru';


sub SendEMail {
    open (SENDMAIL, "|/usr/sbin/sendmail -t") or die "sendmail not ready";
    print SENDMAIL "From: $RobotName <$RobotAddr>\n";
    print SENDMAIL "To: $_[0]\n";
    print SENDMAIL "Reply-To: $RobotName <$RobotAddr>\n";
    print SENDMAIL "Content-Type: text/plain; charset=koi8-r\n";
    print SENDMAIL "Subject: $_[1]\n\n";
    print SENDMAIL "$_[2]";
    close (SENDMAIL) or warn "sendmail didn`t close nicely";
  };

$year = localtime->year() + 1900;
$month = `date '+%m'`;
$month = substr($month,0,2);

# Коннектимся к MySQL
my $dsn = "DBI:mysql:database=$db_database;host=$db_host";
my $dbh = DBI->connect($dsn, $db_user, $db_password);

  $sql  = 'select from_IP, cnt';
  $sql .= '  from (select from_IP, count(from_IP) as cnt';
  $sql .= '    from (select distinct from_IP,to_IP,port_to_IP';
  $sql .= '      from ' . $interface . '_' . $year . '_' . $month;
  $sql .= '      where from_IP like "192.168.%"';
  $sql .= '        and port_to_IP = 25) as t1';
  $sql .= '    group by from_IP) as t2';
  $sql .= "  where cnt > $limit;";

  $body = '';

  my $sth = $dbh->prepare($sql);
  $sth->execute();
  while (@tmp = $sth->fetchrow_array()) {
        ($ip, $cnt) = @tmp;
    $body .= "${ip}\tЗобанен\t${cnt}\n";
    `/sbin/ipfw -q add 1 deny tcp from ${ip} to any 25 out via $interface`;
  }
  $sth->finish();

  $subj = 'Отчет по зобаненным';
  $msg = $subj . "\n\n" .  "IP-адрес\tСтатус\tКоличество\n" . $body;
  SendEMail($admemail, $subj, $msg);
#  print $body;
# выходим
1;