В этом руководстве мы рассмотрим процесс настройки резервного почтового сервера на основе Postfix в Ubuntu. Такой сервер часто называют резервным MX (Mail Exchanger). Ранее я писал о том, как с помощью iRedMail можно быстро развернуть свой собственный почтовый сервер. Однако бывают случаи, когда ваш почтовый сервер недоступен, особенно если он работает в домашних условиях, а не в дата-центре. Чтобы избежать потери писем, можно настроить резервный сервер, который будет принимать и временно хранить входящие сообщения, пока основной сервер недоступен. После восстановления работы основного сервера резервный MX перенаправит накопившиеся письма.
Содержание статьи
- 1 Требования
- 2 Настройка MX записи в DNS
- 3 Настройка резервного почтового сервера с использованием Postfix на Ubuntu.
- 4 Адресаты пересылки
- 5 Фильтры против спама
- 6 Активирование шифрования TLS
- 7 Настройка TLS-сертификата в Postfix
- 8 Обязательное установление TLS-соединения между основным и резервным.
- 9 В заключение
Требования
Для настройки резервного почтового сервера потребуется сервер с высокой доступностью, поэтому лучше арендовать виртуальный частный сервер (VPS) в дата-центре. Проверьте, что сервер поддерживает отправку писем через порт 25. Я настроил свой резервный почтовый сервер на VPS от Kamatera за $4 в месяц (1 ядро процессора, 1 ГБ оперативной памяти). Воспользуйтесь нижеуказанным руководством для создания VPS на платформе Kamatera.
- Как настроить сервер Linux VPS на платформе Kamatera
Рекомендуется, чтобы ваш резервный MX-сервер не выполнял функцию основного почтового сервера для каких-либо доменов. Оптимальным подходом считается раздельное использование хостов для основных и вторичных почтовых серверов.
Настройка MX записи в DNS
MX-запись определяет, какие серверы принимают и обрабатывают электронные письма для определенного домена. К примеру, для домена linux16.ru почтовый сервер email.linux16.ru выполняет функции основного обработчика почты. Для получения информации о MX-записи можно использовать утилиту dig.
dig MX +short linux16.ru

Когда пользователь с аккаунтом Gmail отправляет письмо на адрес [email protected], сервер Gmail сначала запрашивает MX-запись для домена linux16.ru. Узнав, что обработкой почты занимается email.linux16.ru, сервер затем обращается к A-записи этого поддомена, чтобы определить его IP-адрес. Таким образом, электронное письмо может быть успешно доставлено.
Для настройки резервного почтового сервера необходимо добавить еще одну MX-запись в вашем DNS-менеджере. В поле «Имя» укажите символ @, чтобы обозначить основное доменное имя, а в поле «Значение» введите имя хоста резервного почтового сервера. В моем случае это mx2.linux16.ru.

Теперь у меня имеется две MX-записи для моего домена. Обратите внимание на числа в начале – это приоритетные значения или значения предпочтения. Чем меньше число, тем выше приоритет.
SMTP-сервер, который отвечает за отправку писем, выберет почтовый сервер с наивысшим приоритетом для их доставки. Если этот сервер окажется недоступным, будет предпринята попытка использовать почтовый сервер со вторым по значимости приоритетом. Вы можете задать значение приоритета через настройки вашего DNS-менеджера. Это значение может варьироваться от 0 до 65 536. Обязательно убедитесь, что приоритет резервного почтового сервера выше, чем у основного. Кроме того, не забудьте создать запись A для вашего резервного MX-сервера.
Замечание: Имя хоста для записи MX не должно быть псевдонимом другого имени. Рекомендуется использовать имена хостов вместо чистых IP-адресов для записей MX.
Настройка резервного почтового сервера с использованием Postfix на Ubuntu.
Необходимо просто установить и настроить SMTP-сервер Postfix на резервном MX-хосте. Другие программные решения не нужны. Используйте следующие команды для установки Postfix на Ubuntu.
sudo apt update sudo apt install postfix
Как только вы получите следующее уведомление, нажмите клавишу Tab, а затем Enter.

После этого выберите второй вариант: веб-сайт.

Далее необходимо указать резервное имя хоста MX для почтового имени системы. К примеру, я указал mx2.linux16.ru. Важно отметить, что в этом поле нельзя использовать основное доменное имя. То есть, я не должен вводить linux16.ru как системное почтовое имя.

После установки Postfix необходимо открыть файл с конфигурацией.
sudo nano /etc/postfix/main.cf
Файл /etc/postfix/main.cf изначально включает в себя такую строку.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
- Permit_mynetworks указывает Postfix, что он может пересылать электронные письма от SMTP-клиентов, находящихся в его сети.
- Параметр Permit_sasl_authenticated позволяет Postfix отправлять электронные письма от пользователей, прошедших аутентификацию через SMTP.
- Defer_unauth_destination заставляет Postfix отвергать запросы от сторонних SMTP-клиентов, если доменное имя получателя отсутствует как в $relay_domains, так и в $my_destination.
Необходимо ввести параметр relay_domains с указанием доменных имен, чтобы письма могли быть перенаправлены на главный почтовый сервер, когда он вновь станет доступен.
relay_domains = linux16.ru
Также имеется возможность указать несколько доменных имен, если вы хотите настроить его как резервный MX-хост для нескольких доменов.
relay_domains = linux16.ru, 2nd-domain.com
Рекомендуется установить myhostname в значение mx2.your-domain.com.
myhostname = mx2.linux16.ru
Проверьте, чтобы значение mydestination не содержало ваше основное доменное имя. В противном случае резервный MX-сервер будет отправлять электронные письма на локальную систему вместо их перенаправления на главный почтовый сервер. Следующие параметры являются приемлемыми.
mydestination = $myhostname, mx2.linux16.ru , localhost, localhost. localdomain, localhost
Postfix продолжает попытки отправки отложенных сообщений в течение периода, заданного в параметре maximal_queue_lifetime. Этот параметр определяет, сколько времени отложенные сообщения могут оставаться в очереди перед тем, как вернуться к отправителю. Значение по умолчанию для этого параметра составляет 5 дней, что можно проверить с помощью следующей команды.
postconf - d | grep maximal_queue_lifetime
maximal_queue_lifetime = 5d
SMTP-протокол (RFC 2821) советует, чтобы SMTP-сервер, отправляющий сообщения, пытался доставить неудачные письма как минимум в течение 4-5 дней. Если вы администрируете резервный MX-хост, возможно, вам будет целесообразно увеличить время хранения очереди до 10 дней. Для этого добавьте следующую строку в конец файла main.cf.
maximal_queue_lifetime = 10d
Сохраните файл и закройте его. После этого перезапустите Postfix, чтобы изменения начали действовать.
sudo systemctl restart postfix
Минимальный интервал между попытками доставки отложенного сообщения задается параметром minimal_backoff_time, значение которого по умолчанию равно 300 секундам (5 минут). Если доставка снова оказывается неудачной, время ожидания увеличивается. Максимальный интервал ожидания между попытками доставки определяется параметром maximal_backoff_time, который по умолчанию составляет 4000 секунд (приблизительно 66,66 минут).
Проверьте, чтобы ваш брандмауэр разрешал входящие соединения на TCP-порт 25.
Адресаты пересылки
По умолчанию резервный MX-хост на Postfix принимает все адреса из списка $relay_domains. Если основной почтовый сервер информирует резервный MX-хост о том, что указанный адрес электронной почты не существует, резервный MX-хост должен вернуть уведомление первоначальному отправителю.
Спамеры часто используют вымышленные адреса для отправки сообщений, что приводит к тому, что ваш резервный MX-сервер получает множество ненужных писем, которые нужно будет возвращать. Если спамер использует действительные адреса других людей в качестве адреса отправителя, то невиновный получатель может начать получать возвратные уведомления от вашего сервера. В некоторых случаях это может создать впечатление, что именно вы являетесь спамером.
Рекомендуется создать перечень актуальных адресов получателей на резервном MX-хосте. Для этого в файле /etc/postfix/main.cf следует внести следующую строку.
relay_recipient_maps = hash:/etc/postfix/relay_recipients
После этого вы можете ввести корректные адреса получателей в файле /etc/postfix/relay_recipients, как указано ниже.
[email protected] OK [email protected] OK [email protected] OK
Очевидно, ручное добавление адресов для получателей подходит лишь для небольших почтовых серверов, так как для крупных это слишком трудоемко. Вместо этого можно использовать запросы в реальном времени через MySQL/MariaDB или LDAP. Если ваш почтовый сервер работает с MariaDB для хранения данных об учетных записях электронной почты, рекомендуется настроить репликацию master-slave, чтобы резервный почтовый сервер имел доступ к тем же учетным записям в базе данных. Не забудьте перенести конфигурации запросов MySQL/MariaDB из файла /etc/postfix/main.cf с основного почтового сервера на резервный, чтобы резервный сервер знал, как взаимодействовать с базой данных.
После настройки параметра relay_recipient_maps необходимо добавить адреса электронной почты для всех доменов, по которым вы осуществляете резервное обслуживание. Если вам неизвестны все действующие адреса для конкретного домена, можно воспользоваться записью с подстановочным знаком, как указано ниже.
[email protected] OK [email protected] OK [email protected] OK @2nd-domain.com OK
Финальная запись представляет собой запись с подстановочным знаком, позволяющую использовать любой адрес электронной почты второго домена. Сохраните изменения и закройте файл. После этого создайте файл relay_recipients. db.
sudo postmap /etc/postfix/relay_recipients
Фильтры против спама
Спамеры нередко атакуют резервные MX-хосты для рассылки спама. Поэтому крайне важно установить антиспамовые фильтры не только на основном, но и на резервном MX-хосте. Вы можете воспользоваться моими шестью рекомендациями по блокировке спама с помощью Postfix. Также следует обратить внимание на то, что резервный MX-хост должен успешно проходить антиспамовые фильтры основного почтового сервера.
Активирование шифрования TLS
По умолчанию Postfix не использует шифрование для соединений с другими почтовыми серверами. Необходимо активировать шифрование TLS, чтобы предотвратить перехват писем злоумышленниками, которые могут прослушивать сетевой трафик. Мы можем легко получить бесплатный TLS-сертификат от Let’s Encrypt. Для установки клиента Let’s Encrypt (certbot) на сервере Ubuntu, воспользуйтесь следующими командами из официального PPA.
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot
Теперь у вас есть возможность получить TLS-сертификат, используя один из трех плагинов: standalone, Apache или Nginx, в зависимости от конфигурации вашего сервера.
Получение TLS-сертификата с использованием плагина Standalone.
Если веб-сервер на вашем резервном MX-хосте не функционирует, вы можете воспользоваться плагином standalone для получения TLS-сертификата от Let’s Encrypt, выполнив следующую команду.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email ваш-адрес-электронной-почты - d mx2.your-domain.com
- certonly: Получите сертификат, но не производите его установку.
- Используйте плагин standalone для получения сертификата.
- —preferred-challenges http : Проведите проверку http-01 для подтверждения нашего домена, используя порт 80. Стандартно плагин standalone выполняет проверку tls-sni, которая работает на порту 443.
- —согласие-на: Примите условия использования Let’s Encrypt.
- Адрес электронной почты применяется для создания учетной записи и восстановления доступа.
- Укажите название вашего домена.
На следующем снимке экрана видно, что мне удалось получить сертификат.

Получение сертификата TLS с использованием плагина для Apache.
Если ваш резервный MX хост использует веб-сервер Apache, вы можете установить плагин Apache для получения TLS-сертификата. Для этого выполните следующую команду.
sudo apt install python3-certbot-apache
Чтобы получить TLS сертификат от Let’s Encrypt, необходимо сначала настроить виртуальный хост для mx2.your-domain.com. Для этого создайте файл виртуального хоста:
sudo nano /etc/apache2/sites-available/mx2.your-domain.com.conf
После этого поместите указанный текст в файл.
Сохраните файл и закройте его. После этого создайте корневую директорию для вашего веб-сайта.
sudo mkdir /var/www/mx2.your-domain.com
Сделайте пользователя www-data (Apache) владельцем корневой директории вашего веб-сайта.
sudo chown www-data:www-data /var/www/mx2.your-domain.com - R
Активируйте данный виртуальный хост.
sudo a2ensite mx2.your-domain.com.conf
Перезапустите Apache, чтобы обновления начали действовать.
sudo systemctl reload apache2
После настройки и активации виртуального хоста выполните следующую команду для получения TLS-сертификата от Let’s Encrypt.
sudo certbot --apache --agree-tos --redirect --hsts --email your-email-address - d mx2.your-domain.com
Вы должны увидеть следующее уведомление, которое указывает на успешное получение сертификата.

Получение сертификата TLS с использованием плагина для Nginx
Если веб-сервер Nginx установлен на вашем резервном MX-хосте, вы можете воспользоваться плагином Nginx для получения сертификата TLS. Для установки плагина Nginx выполните следующую команду.
sudo apt install python3-certbot-nginx
Для получения TLS-сертификата Let’s Encrypt необходимо сначала настроить виртуальный хост для mx2.your-domain.com. Начните с создания файла виртуального хоста:
sudo nano /etc/nginx/conf.d/mx2.your-domain.com.conf
Затем добавьте следующий текст в документ.
server { listen 80; server_name mx2.your-domain.comкорень /var/www/mx2.your-domain.comКонечно! ~ /.well-known/acme-challenge { allow all; }
Сохраните файл и закройте его. После этого создайте основную папку для веб-сервера.
sudo mkdir /var/www/mx2.your-domain.com/
Назначьте пользователя www-data (пользователь Nginx) владельцем корневой директории вашего веб-сервера.
sudo chown www-data:www-data /var/www/mx2.your-domain.com - R
Для применения изменений необходимо перезапустить Nginx.
sudo systemctl reload nginx
После настройки и активации виртуального хоста выполните следующую команду для получения и установки сертификата Let’s Encrypt с использованием плагина Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --email your-email-address - d mx2.your-domain.com
Вам следует обратить внимание на следующее: это указывает на успешное получение сертификата. Кроме того, вы сможете увидеть папку, где сохранён ваш сертификат.

Настройка TLS-сертификата в Postfix
Теперь, когда у нас есть действующий TLS-сертификат, приступим к его установке в Postfix.
sudo nano /etc/postfix/main.cf
Откройте настройки TLS и найдите две следующие строки.
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil. pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil. key
Замените их следующими:
smtpd_tls_cert_file=/etc/letsencrypt/live/mx2.your-domain.comФайл с полным сертификатом находится по пути /fullchain. pem, а ключ для TLS сервера SMTP задан в /etc/letsencrypt/live/smtpd_tls_key_file.mx2.your-domain.com/privkey. pem
Далее вставьте эти три строки для активации TLS на SMTP-сервере Postfix.
smtpd_tls_security_level=may smtpd_tls_protocols =!SSLv2,!SSLv3!TLSv1 smtpd_tls_loglevel = 1
Закройте файл после сохранения. Перезагрузите Postfix для применения изменений.
sudo systemctl restart postfix
Теперь SMTP-сервер Postfix способен применять STARTTLS для шифрования соединений с SMTP-клиентами на стандартном порту 25. Учтите, что клиентская почтовая программа пользователя не взаимодействует с резервным MX-сервером, поэтому нет нужды активировать отправку через порты 587 или 465.
Обязательное установление TLS-соединения между основным и резервным.
Так как ваш основной почтовый сервер настроен с действующим TLS-сертификатом Let’s Encrypt, можно заставить резервный MX-хост применять TLS для передачи писем на основной сервер. Для этого в файле /etc/postfix/main.cf нужно указать параметры, которые обяжут SMTP-клиент Postfix всегда использовать TLS, а также проверять сертификат удаленного сервера с помощью доверенных корневых сертификатов CA, находящихся в каталоге /etc/ssl/certs.
smtp_tls_security_level = verify smtp_tls_verify_cert_match = hostname, nexthop, dot-nexthop smtp_tls_CApath = /etc/ssl/certs smtp_tls_loglevel = 1
Закройте и сохраните файл main.cf, после чего выполните команду для создания хешированных символьных ссылок.
Ubuntu 18.04 : sudo openssl rehash /etc/ssl/certs Ubuntu 16.04 : sudo c_rehash /etc/ssl/certs
Перезапустите Postfix, чтобы новые настройки начали действовать.
sudo systemctl restart postfix
Теперь вы можете направить электронное письмо с вашего резервного MX-сервера на ваш почтовый ящик, используя следующую команду.
После того как вы отправите сообщение, вы сможете увидеть следующий текст в файле /var/log/mail.log.
Verified TLS connection established
В случае, если резервный MX-хост пытается наладить TLS-соединение, но не имеет возможности подтвердить сертификат основного почтового сервера, то возможно…
В конце файла необходимо вставить следующую строку. Вместо 12.34.56.78 укажите IP-адрес резервного почтового сервера.
smtp_fallback_relay = [12.34.56.78]:25
Сохраните файл и закройте его. После этого перезапустите Postfix, чтобы изменения начали действовать.
sudo systemctl restart postfix
После этого внесите изменения в главный конфигурационный файл Postfix на резервном почтовом сервере.
sudo nano /etc/postfix/main.cf
Определите параметр mynetworks.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
Включите IP-адрес главного почтового сервера в перечень. Это даст возможность главному почтовому серверу применять вторичный почтовый сервер в качестве реле без необходимости SMTP-аутентификации.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 Primary-Mail-Server-IP
Сохраните файл и закройте его. После этого перезапустите Postfix.
sudo systemctl restart postfix
Имейте в виду, что нельзя настраивать вторичный почтовый сервер на использование основного в качестве резервного реле, так как это может вызвать зацикливание сообщений между двумя серверами, особенно при отправке большого количества писем, например, в рамках рассылок.
Postfix будет применять резервное реле SMTP в следующих случаях:
- Время ожидания соединения закончилось.
- SMTP-сервер получателя временно задержал получение сообщения, например, применяя серый список.
- Почтовая очередь забита.
В заключение
Надеюсь, что данное руководство оказало вам помощь в настройке резервного почтового сервера с использованием Postfix на Ubuntu. Если вы посчитали эту статью полезной, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций. Заботьтесь о себе.

