Полное руководство по настройке резервного почтового сервера с использованием Postfix на Ubuntu

В этом руководстве мы рассмотрим процесс настройки резервного почтового сервера на основе Postfix в Ubuntu. Такой сервер часто называют резервным MX (Mail Exchanger). Ранее я писал о том, как с помощью iRedMail можно быстро развернуть свой собственный почтовый сервер. Однако бывают случаи, когда ваш почтовый сервер недоступен, особенно если он работает в домашних условиях, а не в дата-центре. Чтобы избежать потери писем, можно настроить резервный сервер, который будет принимать и временно хранить входящие сообщения, пока основной сервер недоступен. После восстановления работы основного сервера резервный MX перенаправит накопившиеся письма.

Требования

Для настройки резервного почтового сервера потребуется сервер с высокой доступностью, поэтому лучше арендовать виртуальный частный сервер (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 сервер

Теперь у меня имеется две 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 как системное почтовое имя.

Читайте также:  Как установить и использовать Ruby on Rails в Linux

домены реле почтового сервиса Postfix

После установки 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 с основного почтового сервера на резервный, чтобы резервный сервер знал, как взаимодействовать с базой данных.

Читайте также:  Как установить Node.js и NPM на Linux для веб-разработки

После настройки параметра 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.
  • Адрес электронной почты применяется для создания учетной записи и восстановления доступа.
  • Укажите название вашего домена.

На следующем снимке экрана видно, что мне удалось получить сертификат.

Как настроить резервный MX-сервер для Postfix.

Получение сертификата 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

После этого поместите указанный текст в файл.

ServerName mx2.your-domain.comКорневая директория документа: /var/www/mx2.your-domain.com

Сохраните файл и закройте его. После этого создайте корневую директорию для вашего веб-сайта.

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

Вы должны увидеть следующее уведомление, которое указывает на успешное получение сертификата.

Резервное копирование MX-сервера Postfix с использованием шифрования TLS.

Получение сертификата 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

Затем добавьте следующий текст в документ.

Читайте также:  Как настроить панель управления в Ubuntu 18.04 для удобной работы

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

Вам следует обратить внимание на следующее: это указывает на успешное получение сертификата. Кроме того, вы сможете увидеть папку, где сохранён ваш сертификат.

Резервное копирование MX-сервера Postfix с использованием шифрования TLS.

Настройка 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. Если вы посчитали эту статью полезной, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций. Заботьтесь о себе.