Всем доброго времени суток! Поставил Exim+Courier-IMAP+MySQL+ClamAV, всё вроде бы хорошо, приходит, уходит. Но только вот проблемка вылезла, в базу добавил строку о квотах, в конфиг Exim тоже, в mysql.log при приходе письма говорит что
===
061227 18:07:34 130 Connect exim@localhost on exim
130 Query SELECT `domain` FROM `domain` WHERE `domain`='domain.ua' AND `active`='1'
130 Query SELECT `goto` FROM `alias` WHERE `address`='test@domain.ua' OR `address`='@domain.ua'
130 Query SELECT `maildir` FROM `mailbox` WHERE `username`='test@domain.ua'
130 Quit
131 Connect exim@localhost on exim
131 Query SELECT quota FROM mailbox WHERE username='test' AND domain='domain.ua'
131 Query SELECT CONCAT('/home/vmail/', `maildir`) FROM `mailbox` WHERE `username`='test@domain.ua'
131 Quit
===
т.е. я так понял, запросы в порядке...Лог Exim-а mainlog пишет следующее:
===
2006-12-27 18:07:00 Delay 20s for xxx.in.ua [213.186.xxx.xxx] with HELO=xxx.in.ua. Mail from test1@domain.com to test@domain.ua.
2006-12-27 18:07:34 1GzbJI-0000Wo-L6 <= test1@domain.com H=xxx.in.ua [213.186.xxx.xxx] I=[192.168.3.2]:25 P=esmtp S=3652945 id=003201c729c0$376df080$6401a8c0@kk.local from <test1@domain.com> for test@domain.ua
2006-12-27 18:07:34 1GzbJI-0000Wo-L6 => test <test@domain.ua> R=mysqluser T=mysql_delivery
2006-12-27 18:07:34 1GzbJI-0000Wo-L6 Completed
===
В придачу предоставлю свой сонфиг Exim-а
=== exim.conf ===
primary_hostname = ns.int.local
hide mysql_servers = 127.0.0.1/exim/exim/exim
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
FROM `domain` WHERE \
`domain`='${domain}' AND \
`active`='1'}}
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.0.0/16
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
av_scanner = clamd:127.0.0.1 3310
qualify_domain = domain.ua
qualify_recipient = mx.domain.ua
allow_domain_literals = false
exim_user = mailnull
exim_group = mail
never_users = root
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 45m
timeout_frozen_after = 15d
helo_accept_junk_hosts = 192.168.0.0/24
auto_thaw = 1h
smtp_accept_max = 50
smtp_accept_max_per_connection = 25
smtp_connect_backlog = 30
smtp_accept_max_per_host = 20
split_spool_directory = false
remote_max_parallel = 15
return_size_limit = 70k
message_size_limit = 24M
helo_allow_chars = _
smtp_enforce_sync = true
log_selector = \
+all_parents \
+connection_reject \
+incoming_interface \
+lost_incoming_connection \
+received_sender \
+received_recipients \
+smtp_confirmation \
+smtp_syntax_error \
+smtp_protocol_error \
-queue_run
syslog_timestamp = no
begin acl
acl_check_rcpt:
accept hosts = :
deny message = "Недопустимые символы в адресе"
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = "Недопустимые символы в адресе"
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
deny message = "HELO/EHLO обязано быть по SMTP RFC"
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
accept authenticated = *
deny message = "Не надо пихать свой IP в качестве HELO!"
hosts = *:!+relay_from_hosts
condition = ${if eq{$sender_helo_name}\
{$sender_host_address}{true}{false}}
deny condition = ${if eq{$sender_helo_name}\
{$interface_address}{yes}{no}}
hosts = !127.0.0.1 : !localhost : *
message = "Это мой IP-адрес! Пшёл прочь!"
deny condition = ${if match{$sender_helo_name}\
{\N^\d+$\N}{yes}{no}}
hosts = !127.0.0.1:!localhost:*
message = "В HELO не могут быть тока цифры!"
deny message = "Не нравится мне Ваш хост..."
condition = ${if match{$sender_host_name} \
{adsl|dialup|pool|peer|dhcp} \
{yes}{no}}
deny message = "host in blacklist - $dnslist_domain \n $dnslist_text"
dnslists = relays.ordb.org : \
opm.blitzed.org : \
proxies.blackholes.easynet.nl : \
cbl.abuseat.org : \
bl.spamcop.net : \
bl.csma.biz : \
dynablock.njabl.org : \
relays.ordb.org
warn
set acl_m0 = 20s
warn
hosts = +relay_from_hosts : 192.168.0.0/24
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name \
[$sender_host_address] with HELO=$sender_helo_name. Mail \
from $sender_address to $local_part@$domain.
delay = $acl_m0
accept domains = +local_domains
endpass
message = "В этом домене нет такого пользователя"
verify = recipient
accept domains = +relay_to_domains
endpass
message = "Моя сервера не знать маршрут на этот хост..."
verify = recipient
accept hosts = +relay_from_hosts
deny message = "Свободен. Это тебе не ОпенРелей."
acl_check_data:
deny message = "this is spam - denied"
condition = ${if match{$message_body} \
{105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
{yes}{no}}
deny malware = *
message = "In e-mail found VIRUS - $malware_name"
accept
begin routers
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/24
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}}
mysqluser:
driver = accept
condition = ${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}
transport = mysql_delivery
begin transports
remote_smtp:
driver = smtp
mysql_delivery:
driver = appendfile
check_string = ""
create_directory
delivery_date_add
directory = ${lookup mysql{SELECT CONCAT('/home/vmail/', `maildir`) \
FROM `mailbox` WHERE `username`='${local_part}@${domain}'}}
directory_mode = 770
envelope_to_add
group = mail
maildir_format
maildir_tag = ,S=$message_size
message_prefix = ""
message_suffix = ""
mode = 0600
quota = ${lookup mysql{SELECT quota FROM mailbox \
WHERE username='${local_part}' AND domain='${domain}'}{${value}M}}
quota_size_regex = S=(\d+)$
quota_warn_threshold = 95%
return_path_add
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
# Имя программы
address_pipe:
driver = pipe
return_output
# Транспорт для автоответов
address_reply:
driver = autoreply
begin retry
* quota
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
begin authenticators
===
ну и так далее...
Заготовка была взята вообще-то тут http://www.lissyara.su/?id=1175
Дамп базы данных:
====
--
-- БД: `exim`
--
USE mysql;
INSERT INTO `user` (`Host`, `User`, `Password`)
VALUES ('localhost','exim',password('exim'));
INSERT INTO `db` (`Host`, `Db`, `User`, `Select_priv`)
VALUES ('localhost','exim','exim','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON exim.* TO exim@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON exim.* TO exim@localhost;
CREATE DATABASE `exim`;
USE `exim`;
-- --------------------------------------------------------
--
-- Структура таблицы `admin`
--
CREATE TABLE `admin` (
`username` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`username`),
KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Virtual Admins';
-- --------------------------------------------------------
--
-- Структура таблицы `alias`
--
CREATE TABLE `alias` (
`address` varchar(255) NOT NULL default '',
`goto` text NOT NULL,
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
`copy_mail` int(1) NOT NULL default '1',
PRIMARY KEY (`address`),
KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Virtual Aliases';
-- --------------------------------------------------------
--
-- Структура таблицы `domain`
--
CREATE TABLE `domain` (
`domain` varchar(255) NOT NULL default '',
`description` varchar(255) NOT NULL default '',
`aliases` int(10) NOT NULL default '0',
`mailboxes` int(10) NOT NULL default '0',
`maxquota` int(10) NOT NULL default '0',
`transport` varchar(255) default NULL,
`backupmx` tinyint(1) NOT NULL default '0',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`domain`),
KEY `domain` (`domain`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Virtual Domains';
-- --------------------------------------------------------
--
-- Структура таблицы `domain_admins`
--
CREATE TABLE `domain_admins` (
`username` varchar(255) NOT NULL default '',
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Domain Admins';
-- --------------------------------------------------------
--
-- Структура таблицы `log`
--
CREATE TABLE `log` (
`timestamp` datetime NOT NULL default '0000-00-00 00:00:00',
`username` varchar(255) NOT NULL default '',
`domain` varchar(255) NOT NULL default '',
`action` varchar(255) NOT NULL default '',
`data` varchar(255) NOT NULL default '',
KEY `timestamp` (`timestamp`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Log';
-- --------------------------------------------------------
--
-- Структура таблицы `mailbox`
--
CREATE TABLE `mailbox` (
`username` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
`maildir` varchar(255) NOT NULL default '',
`quota` int(10) NOT NULL default '0',
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`username`),
KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Virtual Mailboxes';
-- --------------------------------------------------------
--
-- Структура таблицы `vacation`
--
CREATE TABLE `vacation` (
`email` varchar(255) NOT NULL default '',
`subject` varchar(255) NOT NULL default '',
`body` text NOT NULL,
`cache` text NOT NULL,
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`email`),
KEY `email` (`email`)
) TYPE=MyISAM COMMENT='Exim and courier-imap Admin - Virtual Vacation';
====