Настройка ретрансляции почты с помощью Postfix и Mailgun в Ubuntu 16.04

Published by Leave your thoughts

Настройка SMTP-сервера – задача не для слабонервных. При этом очень важно обеспечить надёжную защиту данных, и, пожалуй, ещё важнее настроить доставляемость рассылок, которые не будут помечаться как спам.

Ретрансляция почты может решить обе эти проблемы. Настроить ретрансляцию гораздо проще, чем полномасштабный сервер SMTP: вы просто направляете всю почту, сгенерированную вашим сервером, на управляемый профессионалами сервер SMTP. Таким образом, вам не придётся сталкиваться с трудностями SMTP.

Существует два типа ретрансляции: открытая и закрытая. Открытая ретрансляция направляет почту с внутреннего сервера и внешних ресурсов. Такой тип ретрансляции могут использовать в своих целях спам-боты. Закрытая ретрансляция подразумевает передачу только почты, сгенерированной на внутреннем сервере и в закрытой сети.

Для ретрансляции почты можно использовать любой внешний SMTP-сервер. Сервер Mailgun имеет множество преимуществ над другими SMTP-серверами. Этот сервис можно использовать бесплатно до 10000 писем в месяц, он очень надёжен. Кроме того, он позволяет отправлять почту с отдельного домена, а это обеспечивает дополнительный уровень безопасности и спасает ваши письма от чёрных списков.

Данное руководство поможет вам создать бесплатный аккаунт Mailgun и поддомен, добавить все необходимые записи и настроить закрытую ретрансляцию почты с помощью Postfix.

Требования

  • Сервер Ubuntu 16.04 (инструкции по настройке сервера – здесь).
  • Пользователь с доступом к sudo.
  • Зарегистрированный домен (в руководстве используется example.com).
  • Обычная учетная запись электронной почты (для тестирования).

1: Учётная запись Mailgun

Создайте новую учётную запись, перейдя по этой ссылке. Войдите в новый аккаунт, откройте панель управления и выберите Domains.

Вы увидите, что сервис Mailgun создал для вас домен.

Не используйте этот домен. Лучше сразу создайте поддомен для Mailgun. Для этого нажмите на Add New Domain. Выберите поддомен для сервиса, например mailgun.example.com или bulkemail.example.com.

Примечание: В руководстве будет использоваться поддомен mg.example1.com.

После этого новый поддомен появится в списке доменов на странице Domains. Откройте страницу поддомена, для этого кликните по нему на странице Domains. Вы увидите три набора DNS-записей.

Добавьте эти записи в настройки домена на сервере. Для этого используется панель управления хостинг-провайдера.

Вам понадобятся записи для отправки и отслеживания почты (разделы Sending и Tracking). Записи для получения почты (Receiving) создавать не обязательно. Не закрывайте эту страницу: данные, указанные на ней нужно будет копировать в настройки DNS на сервере.

2: Настройка DNS-записей

Итак, вам нужно создать две записи TXT и запись CNAME. Опционально можно добавить запись MX.

Создайте все необходимые записи, используя предоставленную сервисом Mailgun информацию.

Чтобы создать CNAME:

  • Name: email
  • Hostname: mailgun.org. (обязательно поставьте точку в конце).

Чтобы создать первую записьTXT:

  • Name: @
  • Text: введите текст для первой записи TXT, предоставленный Mailgun, и возьмите его в двойные кавычки. Например: «v=spf1 include:mailgun.org ~all».

Чтобы создать вторую записьTXT:

  • Name: укажите выделенную жирным часть имени хоста со страницы Mailgun. Например: mallo._domainkey.
  • Text: скопируйте значение со страницы Mailgun и возьмите его в двойные кавычки. Например: «k=rsa; p=MIGfMA0G…AQAB».

Теперь Mailgun должен подтвердить ваш домен, прежде чем вы сможете продолжить. Вы можете подождать, пока обновятся записи DNS, или же вернуться на страницу Mailgun, найти раздел Domain Verification & DNS и нажать Check DNS Records Now. После проверки записей рядом с ними появятся зелёные галочки.

Обновление записей может занять некоторое время (от нескольких минут до нескольких часов).

Примечание: Если сервис Mailgun не подтвердил ваши записи, проверьте введённые вами значения и убедитесь, что вы правильно указали все данные, предоставленные Mailgun. Записи TXT нужно брать в двойные кавычки. Имя первой записи TXT — @, но не hostname со страницы Mailgun.

Ожидая проверки записей, вы можете просмотреть и скопировать учётные данные SMTP со страницы MailGun (они нужны для дальнейшей работы). Откройте раздел Domain Information. В строке Default SMTP Login вы найдёте имя, а в Default Password – пароль. Чтобы изменить эти значения, нажмите Manage SMTP credentials.

3: Настройка Postfix

Для установки Postfix можно использовать встроенный менеджер пакетов.

Подключитесь к серверу как пользователь с доступом к sudo:

ssh 8host@your_server_ip

Как правило, установка Postfix происходит в интерактивном режиме. Так программа может запросить у вас необходимые данные. Чтобы предотвратить ошибки во время установки, лучше настроить эти данные предварительно, а затем запустить установку.

Настройте Postfix как ретранслятор почты:

sudo debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"

Укажите имя хоста сервера (оно будет использоваться в качестве имени хоста почтового сервера):

sudo debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"

Настройте Postfix для использования SMTP-сервера Mailgun.

sudo debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"

Теперь можно начать установку Postfix.

sudo apt -y install postfix

Чтобы сервис Postfix мог подключиться к Mailgun, нужно создать файл с учётными данными и добавить в него скопированное имя и пароль Mailgun (раздел 2).

Примечание: Каждый поддомен Mailgun использует уникальные учётные данные. Больше информации можно найти в документации Mailgun.

Создайте и отредактируйте файл для учётных данных:

sudo nano /etc/postfix/sasl_passwd

Добавьте в него строку:

smtp.mailgun.org your_mailgun_smtp_user@your_subdomain_for_mailgun:your_mailgun_smtp_password

Ограничьте доступ к файлу. Право на чтение и запись могут быть только у пользователя root. Используйте команду postmap, чтобы обновить параметры Postfix.

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

Заблокируйте анонимный доступ к серверу и укажите файл с учётными данными для Mailgun. Откройте конфигурации Postfix:

sudo nano /etc/postfix/main.cf

И добавьте в файл такие строки:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = AUTH LOGIN

Примечание: Postfix предлагает множество настроек безопасности, которые блокирую доступ спам-ботам (больше информации – по этой ссылке). В частности, эти две строки ограничивают использование ретрансляции почты до локальной сети и указанных вам SASL-пользователей:

smtpd_relay_restrictions = permit_mynetworks
permit_sasl_authenticated defer_unauth_destination

Перезапустите Postfix:

sudo systmctl restart postfix

Также нужно убедиться, что все входящие порты SMTP заблокированы. Проверьте состояние брандмауэра:

sudo ufw status
To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

В столбце To не должно быть портов 25, 465 и 587. Эти порты используются SMTP. На них не должен поступать входящий трафик. Если же эти порты открыты в брандмауэре, их нужно заблокировать.

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 14.04

Обычно при настройке SMTP на Postfix имя хоста сервера должно совпадать с FQDN. Если это так, пропустите раздел 4.

4: Настройка отображения доменов

Поскольку для настройки SMTP используется Mailgun, а не Postfix, FQDN не должен совпадать с именем хоста. К примеру, серверы баз данных или мониторинговые серверы обычно вообще не имеют доменов.

Создайте таблицу для отображения доменов, которая будет заменять один электронный адрес другим.

В данном случае почтовая учётная запись сервера Linux должна использовать имена MailGun.

Создайте новый файл /etc/postfix/generic и отредактируйте его.

sudo nano /etc/postfix/generic

Добавьте эту строку, которая свяжет следующие имена пользователей:

8host@your_hostname sender@your_subdomain_for_mailgun

Примечание: Имена sender и 8host замените своими данными. Особенное внимание нужно уделить элементу your_subdomain_for_mailgun: его нужно заменить поддоменом Mailgun (раздел 1).

Чтобы указать несколько пользователей, добавьте в файл новый строки с таким же синтаксисом. Теперь добавьте эти правила отображения в Postfix с помощью команды postmap:

sudo postmap /etc/postfix/generic

Отредактируйте конфигурационный файл Postfix:

sudo nano /etc/postfix/main.cf

В конец файла добавьте строку:

smtp_generic_maps = hash:/etc/postfix/generic

Перезапустите Postfix:

sudo systemctl restart postfix

Теперь можно протестировать ретрансляцию почты.

5: Тестирование ретрансляции почты

Чтобы протестировать настройку, отправьте с сервера сообщение на ваш личный адрес электронной почты. Установите mailutils, чтобы отправить тестовое письмо.

sudo apt -y install mailutils

С помощью mailutils составьте и отправьте сообщение на ваш адрес электронной почты. Например:

mail -s "Test mail" your_email_address <<< "A test message using Mailgun"

Проверьте почтовый клиент и убедитесь, что вы получили сообщение. Если сообщение не пришло, читайте следующий раздел.

6: Устранение неполадок

Во время настройки ретрансляции можно допустить множество ошибок. Рассмотрим самые общие из них.

Во-первых, нужно убедиться, что Mailgun подтвердил DNS-записи. Ничего не будет работать до тех пор, пока сервис не примет новые записи. Откройте интерфейс пользователя Mailgun и убедитесь, что записи приняты.

Затем нужно проверить учётные данные в файле /etc/postfix/sasl_passwd. Указанные здесь имя и пароль должны совпадать с учётными данными соответствующего поддомена Mailgun. Не спутайте их с учётными данными аккаунта Mailgun.

Узнать больше об ошибках можно в логах почтового сервиса. Сначала проверьте /var/log/mail.log.

tail -f /var/log/mail.log

Это выведет несколько последних строк лога. По мере появления в логе новых записей вывод будет обновляться. Просмотрите вывод на наличие сообщений об ошибках, которые могут помочь вам обнаружить проблему. Например, так выглядит сообщение о неправильном пароле Mailgun.

> Nov 1 16:07:45 cart-1268 postfix/smtp[30082]: 0E8062038A: to=<yourmail@example.com>, relay=smtp.mailgun.org[173.203.37.114]:25, delay=2.3, delays=0.02/0/2.3/0, dsn=4.7.0, status=deferred (SASL authentication failed; server smtp.mailgun.org[173.203.37.114] said: 535 5.7.0 Mailgun is not loving your login or password)

Также Mailgun регистрирует транзакции. Откройте панель управления Mailgun, выберите Logs и просмотрите содержимое на наличие ошибок. Возможно, здесь вы найдёте информацию о том, почему сообщение не было доставлено.

Если имя хоста сервера не совпадает с FQDN, убедитесь, что вы правильно выполнили раздел 4.

Заключение

Если у вас есть дополнительные серверы, и вы хотели бы настроить их для отправки почты, нужно просто повторить разделы 3 и 4 на каждом таком сервере. Вы можете повторно использовать домен MailGun на всех этих серверах.

Обычно на почтовых серверах используются два домена: один для внутренней почты, второй – для массовой рассылки сообщений. Внутренняя почта – это сообщения, отправленные с помощью одной из программ сервера (cron или WordPress). Массовая рассылка – это отправка сообщений на все почтовые адреса, состоящие в списке рассылки. Этот тип почты особенно часто попадает в черный список из-за спама, так что, вероятно, лучше использовать домен, который не страшно потерять, если он будет заблокирован.

Больше информации о рассылке можно найти здесь.

Чтобы добавить ещё один домен, выполните разделы 1 и 2 (для каждого домена) и отредактируйте файлы /etc/postfix/sasl_passwd и /etc/postfix/generic. Базовая настройка Postfix остаётся без изменений.

Tags: , , , ,

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>