Далее довольно простая реализация как можно логировать работу 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
...
Код: Выделить всё
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';
Код: Выделить всё
Alias /exlogs/ "/usr/local/www/eximlogs/"
<Directory "/usr/local/www/eximlogs">
Options All
DirectoryIndex index.php
AllowOverride All Options
Allow from all
</Directory>
config.php
Код: Выделить всё
<?php
$DB_HOST = "127.0.0.1";
$DB_NAME = "exim";
$DB_USER = "exim";
$DB_PSWD = "exim";
?>
Код: Выделить всё
<?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 );
?>
(интересующее подчеркнуть ) Ну и вприницпе на основе полученных данных можно чтото думать как бороться со спамерами