Настройка alias в postfix.admin

Настройка alias для почтового сервера на базе iRedMail.

Для управления alias используется postfix.admin. Его установка и настройка, а так же прикручивание к iRedmail хорошо описано в этой статье. Но там не описаны нюансы настройки под веб-сервер nginx.

Я настраивал postfix.admin для двух почтовых серверов и в обоих случаях были свои нюансы.

Вне зависимости как был установлен phpmyadmin, веб-сервер для него я настраивал вручную. Вариант 1. Взять за образец уже имеющиеся шаблоны, например /etc/nginx/template/roundcube.tmpl и настроить его под phpmyadmin. Мой вариант (/etc/nginx/templates/postfixadmin.tmpl).

# phpmyadmin
location ~ ^/phpmyadmin(.*)\.php$ {
 include fastcgi_params;
 fastcgi_pass php_workers;
fastcgi_param HTTP_PROXY '';
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$1.php;
}

location ~ ^/phpmyadmin(.*) {
 alias /usr/share/phpmyadmin$1;
 index index.php;
}

location ~ ^/phpmyadmin/(bin|SQL|README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ { deny all; }

Прописать загрузку этого файла в /etc/nginx/conf.d/def.conf

include /etc/nginx/templates/phpmyadmin.tmpl;

Вариант 2. Тут всё содержится в одном файле конфигурации nginx /etc/nginx/conf.d/default.conf. Делается всё тоже по аналогии того, что там уже прописано для других веб-приложений.

location ~ ^/phpmyadmin { rewrite ^ https://$host$request_uri?; }

location ~ ^/phpmyadmin(.*) {
 alias /usr/share/phpmyadmin$1;
 index index.php;
}

После установки postfix он прописывается как в одном из вариантов с phpmyadmin, в зависимости от того, как организованы настройки nginx.


Особенности установки postfix.admin

В конце установки postfix.admin ситуация на разных почтовиках была разная. В одном из случаев, когда на финальном этапе (на странице /postfixadmin/setup.php) надо завести учётную запись администратора postfixadmin, я в итоге не мог зайти в панель управления postfixadmin после создания учётки. По существующим учётным записям меня тоже не пускало в админку. Решение ситуации простое: просто перезагрузить страницу /postfixadmin/setup.php и по новой добавить учётную запись.

Не работают alias

На одном из почтовиков после установки postfixadmin не работали alias. Они создавались, но при отправке на них писем была ошибка. В логах на стороне сервера писалось следующее:

NOQUEUE: reject: RCPT from f476.i.mail.ru[217.69.138.143]: 550 5.1.1 <тут почта alias>: Recipient address rejected: User unknown in virtual mailbox table; from=<тут моя почта> to=<тут почта alias> proto=ESMTP helo=<f476.i.mail.ru>

Почтовый сервер отправителя получал письмо обратно с таким содержанием:

SMTP error from remote mail server after RCPT TO:<тут почта alias>:
host mail.centuries-international.com [51.254.25.246]:
550 5.1.1 <тут почта alias>: Recipient address rejected:
User unknown in virtual mailbox table.

Я очень долго гуглил эти ошибки, но никакие решения мне не помогали, хотя судя по отписавшимся на форумах и прочих стековерфловах решения были рабочие. Решение заключалось в следующем.

Alias это виртуальные почтовые адреса, которых не существует и они ссылаются на настоящие почтовые адреса, локальные. За поиск этих виртуальных адресов отвечает файл /etc/postfix/mysql/virtual_alias_maps.cf. Чтобы проверить, ищется ли там искомый alias, надо выполнить команду:

postmap -q "alias@mail.ru" mysql:/etc/postfix/mysql/virtual_alias_maps.cf

Если команда возвращает пустую строку, то следовательно postfix не находит нужный alias и соответственно при отправке почты на несуществующий alias получается ошибка. Проверка показала, что alias существуют в таблице БД, а так же корректно создаются и удаляются там через веб-интерфейс postfixadmin. На рисунке я через phpmyadmin проверяю таблицу alias.

Проверив файл /etc/postfix/mysql/virtual_alias_maps.cf я обнаружил причину проблемы. Файл содержал запрос к БД следующего вида:

query = SELECT forwardings.forwarding FROM forwardings,domain WHERE forwardings.address='%s' AND forwardings.domain='%d' AND forwardings.domain=domain.domain AND forwardings.active=1 AND domain.backupmx=0 AND domain.active=1

А должен этот запрос выглядеть вот так:

query = SELECT alias.goto FROM alias,domain WHERE alias.address='%s' AND alias.domain='%d' AND alias.domain=domain.domain AND alias.active=1 AND domain.backupmx=0 AND domain.active=1

Если его поменять в файле virtual_alias_maps.cf, то всё заработает. На скриншоте выше видно, что таблица alias работает с полями address и goto, и эти поля как раз присутствуют в нужном запросе. После изменений в конфигурации перезагрузить postfix:

/etc/init.d/postfix restart

 

Добавить комментарий