Решено: Домен-алиас в exim

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Решено: Домен-алиас в exim

Сообщение danger08 »

Привет всем,
Поставил Exim, прикрутил к нему postfixadmin.

Среди прочих, в БД есть таблицы `domain` и `alias_domain`.
Список локальных доменов считываю такой конструкцией:

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

domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE \
    `domain` = '${domain}' AND `active` = '1'}}
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE \
    `domain` = '${domain}' AND `active` = '1'}}

С локальными доменами понятно, все работает.
Возник вопрос: а как добавить поддержку доменов-алиасов в Exim (из таблицы `alias_domain`)?

Спасибо.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Домен-алиас в exim

Сообщение neol »

Судя по http://www.lissyara.su/doc/exim/4.62/some_..._settings/#46.7
в итоге должно получится что-то типа:

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

virtual:
  driver = redirect
  domains = ${mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \
    `alias_domain` = '${domain}' AND `active` = '1'}}
  data = ${lookup{$local_part}mysql{SELECT `target_domain FROM `alias_domain` WHERE `alias_domain`='${quote_mysql:$domain}'}}
  no_more

Но сам я таким вопросом не задавался, так что за работоспособность не ручаюсь.
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Решено: Домен-алиас в exim

Сообщение danger08 »

neol писал(а):
28.01.2010 10:07
Но сам я таким вопросом не задавался, так что за работоспособность не ручаюсь.

Не-а, не работает. В приведенном фрагменте ругается на ошибки в SQL-синтаксисе.
Я попытался сам как-то поправить, но я толком не знаю SQL (стыд мне и позор).
Может, подскажете, как сделать? :rolleyes:
Блогосайт - http://www.fateyev.com
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Домен-алиас в exim

Сообщение neol »

Вы-бы хоть показали как ругается.

data = ${lookup{$local_part}mysql{SELECT `target_domain(тут кавычка пропущена) FROM `alias_domain` WHERE `alias_domain`='${quote_mysql:$domain}'}}

PS Кавычка, которая апостроф. Вот такая - `
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Решено: Домен-алиас в exim

Сообщение danger08 »

neol писал(а):
29.01.2010 14:00
Вы-бы хоть показали как ругается.

В секции роутера добавил:

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

domain_aliases:
  driver = redirect
  domains = ${mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \
    `alias_domain` = '${domain}' AND `active` = '1'}}
  data = ${lookup{$local_part}mysql{SELECT `target_domain` FROM `alias_domain` WHERE \
    `alias_domain` = '${quote_mysql:$domain}'}}
  no_more
(Следом за этим блоком идет блок dovecot-деливера).

При попытке отправить почту для любого ящика (и реального домена, и домена-алиаса) Exim пишет:

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

451 Temporary local problem - please try later

В panic.log такая ругань:

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

2010-01-29 15:25:01 failed to expand "${mysql{SELECT `alias_domain` FROM `alias_domain` WHERE `alias_domain` = '${domain}' AND `active` = '1'}}"
while checking a list: "${mysql" is not a known operator (or a } is missing in a variable reference)
Блогосайт - http://www.fateyev.com
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Домен-алиас в exim

Сообщение neol »

"Если ты голодному дал рыбу, ты накормил его на один день. Если ты дал ему удочку и научил удить — ты накормил его на всю жизнь."

Так что читайте документацию. На русском языке это не так уж сложно. А то мы будем до ишачьей пасхи ошибки синтаксиса в семи строчках отлавливать (:
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Домен-алиас в exim

Сообщение Ленивая Бестолочь »

danger08 писал(а):
29.01.2010 14:34
domains = ${mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \

пологать надо, что

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

domains = ${lookup mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \

ввиду имеется.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Решено: Домен-алиас в exim

Сообщение danger08 »

Добил-таки SQL-синтаксис, теперь никаких ошибок не выдает. Так выглядит моя секция `routers`:

Код:

###################################################################### # ROUTERS CONFIGURATION # # Specifies how addresses are handled # ###################################################################### # THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! # # An address is passed to each router in turn until it is accepted. # ###################################################################### begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 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}' AND `active`='1'}} user = exim file_transport = address_file pipe_transport = address_pipe domain_aliases: driver = redirect domains = ${lookup mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \ `alias_domain` = '${domain}' AND `active` = '1'}} data = ${lookup mysql{SELECT `target_domain` FROM `alias_domain` WHERE \ `alias_domain` = '${quote_mysql:$domain}'}} no_more # Dovecot router 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 ###################################################################### # TRANSPORTS CONFIGURATION #

Но проблема, оказывается, где-то глубже, в конфигурации самого Exim-а.
В приведенной конфигурации, доставка к существующим адресам происходит без проблем, а к доменам-алиасам говорит:

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

550 Unrouteable address

Пробовал для теста вместо SQL-запроса прямо прописывать алиас:

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

domains = virtual.domain.com
data = real.domain.com
Тот же эффект.

Думаю, что еще как-то dovecot-деливер (`dovecot_user` ниже) надо модифицировать. Прежде Exim-ы не приходилось настраивать, подскажите кто знает.

Спасибо.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Домен-алиас в exim

Сообщение neol »

Смотрю в документацию, вижу фигу.
В data должен находится адрес получателя, а не домен. $local_part из моего первоначального конфига вы куда дели?

Вот так работает:

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

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

Но прописать это надо до dnslookup или добавить алиасы в local_domains.

Конфигурацию можно проверить выполнив exim -bt vpupkin@examle.com
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Решено: Домен-алиас в exim

Сообщение danger08 »

Спасибо, вроде все работает как надо.
Блогосайт - http://www.fateyev.com
Спасибо сказали: