Настройки mysql для работы с postfixadmin
Материал из wiki.lissyara.su
Проверка, включена ли поддержка mysql:
[root@server /usr/local/etc/exim]# exim -bV | grep mysql Lookups: dbm dbmnz mysql
Рекомендую вынести всё касающееся mysql в отдельный файл:
/usr/local/etc/exim /000.mysql.conf
# Как подключаться к серверу MYSQL (сокет, база, логин, пароль)
hide mysql_servers = (/tmp/mysql.sock)/eximbase/eximuser/eximpassword
# Список доменов
MYSQL_DOMAINS = SELECT domain FROM domain WHERE transport = 'virtual' AND active='1'
# Перенаправления для доменов
MYSQL_ALIASES_DOMAINS = SELECT goto FROM alias WHERE address='${quote_mysql:@$domain}' LIMIT 1
# Список алиасов
MYSQL_ALIASES = SELECT goto FROM alias WHERE \
address='${quote_mysql:$local_part@$domain}' LIMIT 1
# Список пользователей
MYSQL_USERS = SELECT username FROM mailbox WHERE \
username='${quote_mysql:$local_part@$domain}' LIMIT 1
# Список всех E-Mail адресов для рассылки по адресу vsem
MYSQL_VSEM = SELECT username FROM mailbox
В основной конфигурации потребуется этот файл подключить:
Configure
# Настройки для mysql
.include /usr/local/etc/exim/000.mysql.conf
…
…
# Наши домены ( @ - домен нашего компьютера)
domainlist local_domains = @ : ${sg{${lookup mysql{MYSQL_DOMAINS}}}{\n}{:}}
…
…
Остальные настройки
…
…
Секцию роутеров можно сделать аналогично:
600.routers.conf
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
# Все адреса user@mydomain2.ru или user@mydomain1.ru отправляем на user@mydomain.ru
# все пользователи у нас в @mydomain.ru, чтобы постоянно алиасы не прописывать.
# Если есть желание, можно отказаться от этого роутера в пользу rewrite.
mysql_aliases_domains:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
condition = ${lookup mysql{MYSQL_ALIASES_DOMAINS}{yes}{no}}
data = ${quote:$local_part}${lookup mysql{MYSQL_ALIASES_DOMAINS}}
# Рассылка всем адресатам разрешена только для postmaster@mydomain.ru
mysql_vsem:
driver = redirect
domains = +local_domains
local_parts = vsem
allow_fail
allow_defer
senders = postmaster@mydomain.ru
data = ${lookup mysql{MYSQL_VSEM}}
mysql_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{MYSQL_ALIASES}}
mysql_user:
driver = accept
condition = ${lookup mysql{MYSQL_USERS}{yes}{no}}
transport = dovecot_delivery
cannot_route_message = Unknown user
Конфигурация rewrite для внутридоменного перенаправления: Был один, стало 2 запроса в mysql:
# Нужно для перенаправления для доменов через rewrite, а не роутер (acl_m1 - это $domain)
MYSQL_ALIASES_DOMAINS2 = SELECT address FROM alias WHERE address='${quote_mysql:@$acl_m1}' LIMIT 1
# Перенаправления для доменов
MYSQL_ALIASES_DOMAINS = SELECT goto FROM alias WHERE address='${quote_mysql:@$acl_m1}' LIMIT 1
acl_check_rcpt:
# rewrite работает в DATA и $domain там нет. (Хотя в первом варианте он работает :-()
warn set acl_m1 = $domain
begin rewrite
"${if !eq{${lookup mysql{MYSQL_ALIASES_DOMAINS}}}{}{*${lookup mysql{MYSQL_ALIASES_DOMAINS2}}}fail}" \
"${quote:$local_part}${lookup mysql{MYSQL_ALIASES_DOMAINS}}" Eh
Тут есть баги:
exim -bt работать не будет, т.к. переменная acl_m1 у него пустая.
Testing dikens3@birnn.ru
search_open: mysql "NULL"
search_find: file="NULL"
key="SELECT goto FROM alias WHERE address='@' LIMIT 1" partial=-1 affix=NULL starflags=0
и:
echo "Привет" | mail -s "Тема" user@mydomain.ru работать не будет для доменов-алиасов.
Может есть ещё какие баги, я в продакшен это не пускал.
Выкладываю только потому, что я полдня убил на рабочую конструкцию rewrite, а также для
демонстрации возможностей rewrite в exim.