Логирование работы exim'a

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Логирование работы exim'a

Непрочитанное сообщение Morty » 2009-12-13 22:18:47

Сидел просматривал конфиги Лиса и затронула одна вещица :smile:
Далее довольно простая реализация как можно логировать работу exim'a

Цель: простота реализации и чтоб работало на любом конфиге(и в реалтайме) независимо не от чего. Может кому пригодиться
exim:
кудато в конец всех проверок, уже перед accept'ом
(почему в конец, а не начало? для того чтоб видеть только то что
принялось сервером, а не все подряд что идет до проверок)

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

...
  warn   condition   = ${lookup mysql{INSERT INTO `mail_history` (`to`, `from`, \
                        `message_size`,`sending_timestamp`, `sender_ip`, \
                        `sender_hostname`, `sender_hname`) VALUES \
                        ('$recipients', '$sender_address', \
                        '$message_size', UNIX_TIMESTAMP(), '$sender_host_address', \
                        '$sender_host_name', '$sender_helo_name')}}

  accept
 ...
mysql mail_history table:

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

DROP TABLE IF EXISTS `mail_history`;
CREATE TABLE `mail_history` (
  `id` int NOT NULL auto_increment,
  `to` varchar(255) default '',
  `from` varchar(255) default '',
  `message_size` int(64) ,
  `sending_timestamp` int(32),
  `sender_ip` varchar(255) default '',
  `sender_hostname` varchar(255) default '',
  `sender_hname` varchar(255) default '',
  PRIMARY KEY  (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM COMMENT='mail_history table for exim logs DB';
apache:

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

Alias /exlogs/ "/usr/local/www/eximlogs/"

<Directory "/usr/local/www/eximlogs">
    Options All
    DirectoryIndex index.php
    AllowOverride All Options
    Allow from all
</Directory>
web:
config.php

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

<?php

$DB_HOST = "127.0.0.1";
$DB_NAME = "exim";
$DB_USER = "exim";
$DB_PSWD = "exim";

?>
index.php

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

<?php
require("config.php");

$conn = mysql_connect("$DB_HOST", "$DB_USER", "$DB_PSWD");
if ( ! $conn )
        die ( "Couldn't connect to MySQL" );
mysql_select_db($DB_NAME, $conn)
 or die ( "Couldn't open $DB_NAME: " .mysql_error() );
$result = mysql_query ( "Select * from mail_history" );
$num_rows = mysql_num_rows ( $result );

print "<table border=2>\n";
print "<caption>Exim mail transfer history.</caption>\n";
print "<th>#<th>mail to<th>mail from<th>size(bytes)<th>time(unix)<th>sender ip<th>sender hostname<th>sender helo_name\n";
while ( $a_row = mysql_fetch_row ( $result ))
  {
  print "<tr>\n";
  foreach ( $a_row as $field )
   print "\t<td>$field</td>\n";
  print "</tr>\n";
  }
print "</table>";
mysql_close ( $conn );

?>
Все довольно просто , возможно даже слишком -)) зато в любом случае тут не сложно будет чтото добавить/убрать/поменять/доделать
(интересующее подчеркнуть :-D ) Ну и вприницпе на основе полученных данных можно чтото думать как бороться со спамерами :drinks:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: Логирование работы exim'a

Непрочитанное сообщение Laa » 2009-12-14 17:15:07

У меня когда-то поперла нагрузка на МТА, так аж mysql-ю плохо стало. Тогда я и искал пути уменьшения кол-ва sql-запросов, и таки уменьшил. Все домены прописал в конфиге, всех блек-вайт юзеров в конфиге, короче в базу только действительно нужную для базы инфу внес. И тогда здорово попустило mysql и сервер тоже. С тех пор лично я стараюсь минимизировать кол-во запросов в базу. Возможно, на небольших объемах сервер нифига не заметит и будет работать также.

Но за работу зачот! :good: молодчина!
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Логирование работы exim'a

Непрочитанное сообщение dikens3 » 2009-12-14 18:08:10

1. Все переменные нужно квотировать/экранировать. Сам накололся.

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

mysql_quote:$Переменная
2. Я запихнул логирование в DATA перед accept, ибо $message_size там точно известен к примеру.
3. База данных нужна для выборки данных, т.е. перед созданием структуры нужно 7 раз подумать.

тут тема была примерная.
http://forum.lissyara.su/viewtopic.php? ... %B8#p62637
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.