Postfix. Перенаправление почты

From SysadminWiki.ru
Jump to: navigation, search

Общая информация

Иногда возникает необходимость перенаправлять почтовые сообщения как для отдельных пользователей так и для доменов. По-английски это называется mail routing.

  • В первом случае это могут быть служебные почтовые адреса такие как postmaster и webmaster или когда человек желает перенаправлять всю свою почту на другой адрес.
  • Во втором, использовать перенаправление можно для пересылки почты через VPN или когда используем алиасы домена (см ниже).


! Про перенаправление почты в Zimbra см отдельную статью.


Транспортная таблица Postfix

  • Чтобы в Postfix перенаправлять почту с одного домена на другой (mail routing), используется транспортная таблица (mail transport). Подробно о ней можно узнать в руководстве:
# man transport

или по адресу http://www.postfix.org/transport.5.html.

  • Если мы используем Postfix Admin, то для того, чтобы временно перенаправлять почту с одного ящика на другой нужно подредактировать в PostfixAdmin таблицу alias, поле goto. Сам PostfixAdmin этого делать не позволяет, поэтому придётся править вручную таблицы MySQL, для этого удобно воспользоваться phpMyAdmin.
  • Подключаемся к MySQL базе с именем postfix, пользователем User и паролем Password и добавляем правило перенаправления в таблицу transport:
# mysql -uUser -pPassword postfix
mysql> INSERT INTO transport (domain,destination) VALUES ('domain1.ru',':mail.domain2.ru');

Не лишне будет предворительно проверить, что mail.domain2.ru принимает почту:

# telnet mail.domain2.ru 25

В противном случае при попытке отправить сообщение на ящик user@domain1.ru в /var/log/maillog появится запись:

postfix/qmgr[25305]: 65D383767D: to=<user@domain1.ru>, relay=none, delay=1689, status=deferred (transport is unavailable)

Если мы не поставим двоеточие , то в журнале получим сообщение:

postfix/qmgr[25305]: warning: connect to transport mail.domain2.ru: No such file or directory

Если указали неверный транспорт (я сначала пробовал smtp:mail.domain2.ru), то:

postfix/smtp[32546]: 798993767D: to=<user@domain1.ru>, relay=none, delay=1, status=bounced ([mail.domain2.ru]: Name or service not known)

Если же всё нормально, то увидим:

postfix/smtp[354]: 5C8793767F: to=<user@domain1.ru>, relay=mail.domain2.ru[182.160.1.3], delay=1, status=sent (250 1182880 message accepted for delivery)


Алиас (alias) почтового домена

  • Если мы купили ещё одно доменное имя newname.ru, то Postfix можно указать, чтобы письма отправляемые на user@newname.ru перенаправлялись на user@oldname.ru, другими словами сделать алиас на домен. В Postfix Admin это можно сделать нажав на кнопку "Добавить алиас". То же самое можно сделать вручную, выполнив команды в MySQL:
mysql> INSERT INTO domain (domain, description, aliases, mailboxes, maxquota, transport, backupmx, created, modified, active) VALUES ('newname.ru','Our new domain','50','130','0','','0','2006-08-10 16:06:27','2006-08-10 16:06:42','1')
mysql> INSERT INTO alias (address, goto, domain, created, modified, active) VALUES ('@newname.ru','@oldname.ru','newname.ru','2006-08-10 16:08:06','2006-08-10 16:08:06','1')
  • После этого добавляем в файл /etc/postfix/mydestination строку
newname.ru
  • убедимся, что этот файл подключается в /etc/postfix/main.cf:
mydestination = localhost, $myhostname, localhost.$mydomain, $config_directory/mydestination
  • Также проверим, что мы не забыли указать новое имя в /etc/hosts:
127.0.0.1     localhost.localdomain localhost
10.0.0.2      localnet.dns.name
89.116.14.18  oldname.ru newname.ru


  • Всё, перегружаем postfix и можем использовать оба доменных имени для отправки и получения почты.