Перейти к содержанию

Настройка Postfix с возможностью отправки сообщений в другой домен

В этой заметке описывается настройка Postfix для обеспечения возможности пересылки сообщений между двумя серверами в разных доменах.

Здесь не учитываются некоторые нюансы, которые могут быть важны в случае применения данного материала на серверах в публичных сетях.

Предположим, что у нас есть два сервера: mail.test1.local и mail.test2.local. Сначала нужно обеспечить возможность разрешения имен для обоих серверов (грубо говоря, чтобы каждый "видел" каждого), а значит нужно настроить DNS.

Настройка DNS

Рассмотрим простой случай, когда сеть обслуживает один сервер имен Dnsmasq. Добавьте в файл /etc/dnsmasq.d/addresses следующую конфигурацию:

#
# mail.test1.local
#
address=/mail.test1.local/192.168.20.51
mx-host=test1.local,mail.test1.local,10
ptr-record=51.20.168.192.in-addr.arpa., mail.test1.local
#
# mail.test2.local
#
address=/mail.test2.local/192.168.20.52
mx-host=test2.local,mail.test2.local,10
ptr-record=52.20.168.192.in-addr.arpa., mail.test2.local
#

Не забудьте перезапустить Dnsmasq после изменения конфигурации.

Настройка Postfix

Далее, будем предполагать, что Postfix уже установлен, т.к. делается это тривиально, а за основу возьмем файл конфигурации по-умолчанию.

Здесь мы не будем подробно рассматривать все параметры настройки.

Настройте файл конфигурации /etc/postfix/main.cf следующим образом (тут показан файл для mail.test1.local; отличия для второго сервера будут показаны ниже):

compatibility_level = 3.9
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian)
inet_protocols = ipv4
mynetworks_style = host
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mydestination = $myhostname, mail.test1.local, localhost.test1.local, , localhost, test1.local
mailbox_size_limit = 0
mailbox_command = 
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
biff = no
recipient_delimiter = +
relayhost = 
cyrus_sasl_config_path = /etc/postfix/sasl
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
myhostname = mail.test1.local
inet_interfaces = all
home_mailbox = maildir/
relay_domains = mail.test2.local, test2.local
virtual_alias_maps = hash:/etc/postfix/virtual

Файл конфигурации для mail.test2.local будет незначительно отличаться следующими строками:

mydestination = $myhostname, mail.test2.local, localhost.test2.local, , localhost, test2.local
myhostname = mail.test2.local
relay_domains = mail.test1.local, test1.local

Как видите, конфигурации отличаются именем хоста сервера (очевидно...), а также параметрами mydestination (сообщения для каких серверов не нужно никуда больше пересылать) и relay_domains (какие серверы использовать для пересылки сообщений).

Необходимо обратить внимание на еще один параметр - virtual_alias_maps. Этот параметр позволяет настроить соответствия некоторых псевдонимов некоторым реальным адресам. Использование этого механизма продиктовано тем, что имена серверов носят имена mail.test1.local и mail.test2.local, и для корректной доставки сообщений адрес получателя должен содержать имя сервера, например, user1@mail.test1.local и никак не user1@test1.local, т.к. последний просто неизвестен в сети. Чтобы обойти это ограничение, можно использовать параметр virtual_alias_maps.

Создайте файл соответствий псевдонимов /etc/postfix/virtual. Например, для mail.test2.local он может содержать:

user01@test1.local user01@mail.test1.local

Эта запись означает, что при отправке сообщений в адрес user01@test1.local с сервера mail.test2.local сообщения будут фактически перенаправлены на хост mail.test1.local.

Не забудьте сформировать (обновить) базу данных на основе файла соответствий командой postmap /etc/postfix/virtual и перезапустить Postfix.

Если с какого-либо из серверов сообщения в адрес другого доставляться не должны, нужно закомментировать в файле конфигурации этого сервера строки:

relay_domains = ...

и

virtual_alias_maps = ...