Алиасы доменов в Exim, Dovecot + mysql

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Violator
ефрейтор
Сообщения: 63
Зарегистрирован: 2012-03-23 11:50:37

Алиасы доменов в Exim, Dovecot + mysql

Непрочитанное сообщение Violator » 2012-07-30 11:04:09

Стоит связка postfixadmin, mysql, exim, dovecot.
В postfixadmin есть возможность создавать алиасы доменов, но exim и dovecot c таблицей alias_domain не общаются (пока) и соотв. user@aliasdomain.ru для них не существует.
Вот как они проверяют наличие пользователя в базе сейчас:
dovecot

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

password_query = SELECT password, concat('*:bytes=', quota) as userdb_quota_rule FROM mailbox WHERE username = '%u'
user_query = SELECT  CONCAT('/var/mail/exim/',LCASE(`maildir`)) as home, 26 AS uid,  26 AS gid, concat('*:bytes=',CAST(quota AS CHAR)) AS quota_rule FROM mailbox WHERE
username = '%u' AND active = '1'
квоты dovecot

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

map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}
exim

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

GET_QUOTA=${lookup mysql{SELECT `maxquota` FROM `domain` \
           WHERE domain='${quote_mysql:$domain}'}{${value}M}}
MAILDIR_SIZE=${lookup mysql{SELECT `bytes` FROM `quota_domain` \
           WHERE domain='${quote_mysql:$domain}'}}
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}'}}
virtual_user_quota_defer:
  driver          = redirect
  domains         = +local_domains
  condition =   ${if and{{>{GET_QUOTA}{0}}{>={MAILDIR_SIZE}{GET_QUOTA}}}}
  data            = :fail: Domain over quota!
  verify_sender = false
  allow_fail
dovecot_user:
  driver = accept
    condition = ${lookup mysql{SELECT `goto` FROM \
        `alias` WHERE \
        `address`='${quote_mysql:$local_part@$domain}' OR \
         `address`='${quote_mysql:@$domain}'}{yes}{no}}
    transport = dovecot_delivery
Да, да, квоты и в dovecot и в exim, т.к. dovecot не умеет одновременно проверять и доменные и персональные квоты.

Единственное что нарыл, это для dovecot:

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

password_query = SELECT DISTINCT mb.username as user, mb.password AS password, concat('/usr/local/mail/domains/', mb.maildir) as userdb_home, concat('maildir:/usr/local/mail/domains/', mb.maildir) as userdb_mail, FROM mailbox mb LEFT JOIN alias_domain ad ON mb.domain = ad.target_domain AND ad.active = 1 WHERE ((mb.username = '%u') OR (mb.local_part = '%n' AND ad.alias_domain = '%d')) AND mb.active = 1
Подобное можно конечно соорудить и для exim, но что делать с квотами, которые так же хранятся в базе? Как научить dovecot правильно обновлять квоты в ящиках, которые являются алиасами?

Думаю насчет создания view в mysql, но может у кого есть рабочее и элегантное решение?

Хостинговая компания 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/

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Алиасы доменов в Exim, Dovecot + mysql

Непрочитанное сообщение xM » 2012-08-03 14:09:28

Э, да всё общается прекрасно.
Если вы поднимали эту связку по статье с этого сайта (и её многочисленных аналогов), то domain aliasing работает на раз-два.
Единственное что в конфиг Exim надо добавить вот что (по-моему не было этого в конфиге):

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

...
begin routers

domain_aliases:
  driver        = redirect
  domains       = ${lookup mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \
                  `alias_domain`='${quote_mysql:$domain}' AND `active` ='1'}}
  data          = ${quote:$local_part}@${lookup mysql{SELECT `target_domain` FROM \
                  `alias_domain` WHERE `alias_domain`='${quote_mysql:$domain}'}}
  no_more
...
У меня лично все отлично работает с четырьмя доменами. Конфигурируется, традиционно, через postfixadmin.
IT voodoo blog https://kostikov.co

Violator
ефрейтор
Сообщения: 63
Зарегистрирован: 2012-03-23 11:50:37

Re: Алиасы доменов в Exim, Dovecot + mysql

Непрочитанное сообщение Violator » 2012-08-08 16:22:16

Спасибо, попробую. А с dovecot как быть?
Ставил по одной из статей с этого сайта плюс допиливал.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Re: Алиасы доменов в Exim, Dovecot + mysql

Непрочитанное сообщение xM » 2012-08-09 13:08:26

Violator писал(а):Спасибо, попробую. А с dovecot как быть?
Ставил по одной из статей с этого сайта плюс допиливал.
А что - Dovecot ? Отправляйте почту с базовых доменов и ящиков, а не с псевдонимов.
По-крайней мере у меня так настроено. Если надо разрешить отправку почты с aliases то тоже
не так трудно SQL запрос по образцу наваять.
Кстати, забыл в предыдущем посте еще один блок добавить - для mailbox-aliases (там было только
для доменов). Идёт сразу после, вторым номером. Вот он:

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

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}' AND `active`='1'}}
IT voodoo blog https://kostikov.co