Crossroads » Linux » Postfix: пересылка почты через реле

Postfix: пересылка почты через реле

  • Dislike
  • 0
  • Like
Postfix: пересылка почты через релеPostfix — популярный и достаточно надёжный почтовый сервер, чаще всего используемый для отправки почты. Данный функционал работает «из коробки» практически во всех популярных дистрибутивах Linux.

Не смотря на то, что Postfix работает сразу после установки и работает хорошо, если его слегка настроить, большая часть отправленной с него почты попадает в «спам» на стороне сервера получателя. Даже если у вас правильно настроены DNS домена, этого не достаточно. Некоторые почтовые сервисы блокируют почту, передаваемую в открытом виде. Настройка шифрования же — занятие муторное и неоправданное с финансовой точки зрения, так как заверенный сертификат стоит денег. Если вы не админ корпоративного сервера, то перспектива платить за сертификат, дабы ваш Wordpress мог отправлять 5-10 писем в сутки, греет не многих.

Ещё одно препятствие между вами и вашей аудиторией — это блокировка 25-го порта большинством провайдеров. Из-за низких цен и переизбытка предложений, можно целый месяц рассылать спам во все уголки Сети, заплатив около пяти долларов за слабенький VPS. В связи с этим хост-провайдеры, дорожащие своей репутацией, блокируют 25-й порт. Если не всем поголовно, то как минимум новым клиентам. И это в последнее время стало, практически, стандартом в индустрии.

К счастью Postfix может отправлять почту не только через 25-й tcp порт. Postfix может отправлять почту не напрямую, а через реле. В случае блокировки 25-го порта, основным условием является то, что принимающее реле работает с другим портом. (Практически все популярные почтовые сервисы).

В данном примере я использую профессиональный сервис обработки почты Mailgun. Он бесплатен, если вы отправляете не более 10000 сообщений в месяц. Вообще, настройки реле в Postfix достаточно просты и можно использовать любой почтовый сервис, нацеленный на конечного пользователя (Gmail, Yahoo!, Yandex и прочие). Если сервис умеет работать с десктопными почтовыми программами, то сможет получать почту и от Postfix. Но в случае с Mailgun вы можете использовать свой домен. После подключения домена к Mailgun, в качестве отправного почтового адреса можно использовать любой адрес вида что_угодно@ваш_домен без дополнительных настроек. В случае же, например, с сервисом Google Apps или подобными, вы сначала должны создать полноценный аккаунт с почтовым ящиком, логином, паролем и так далее.

После регистрации в Mailgun и входа в панель управления, слева вы увидите вкладку «Sanding», в ней вкладку «Domains».
Там уже есть один домен вида sandbox85bfgk2706b4f9a96546412153a900р58a.mailgun.org. Это тестовый домен. Для подключения своего домена нужно указать номер своей банковской карты. Это ни к чему не обязывает и сервис будет по прежнему бесплатен в пределах 10000 писем в месяц. Необходимость в подобном «апгрейде» аккаунта они объясняют всё той же борьбой со спамерами.

После указания средства оплаты во вкладке «Domains» появится кнопка «Add New Domain». Вы должны указать свой домен. Сервис рекомендует использовать домены третьего уровня. Это удобно если у вас уже настроена почта на домене, или если вы хотите разграничить корреспонденцию ([email protected], [email protected] и так далее).

Далее вам отобразятся NS записи, которые следует внести на стороне вашего DNS сервера (на стороне регистратора, или DNS сервиса, если вы используете сторонний). После внесения соответствующих записей подтвердите это на стороне Mailgun и дождитесь окончания проверки. Это стандартная процедура при изменениях в DNS и может занять какое-то время. Настройки домена находятся во вкладке «Domain Settings». Там же статус DNS записей и данные для подключения к SMTP серверу (SMTP credentials): логин вида [email protected] и кнопка «Reset Password» для сброса пароля. Сам пароль отображается только при его генерации. Нужно нажать эту кнопку и скопировать пароль в удобное место. После чего он больше отображаться не будет. Так же можно создать нового SMPT пользователя с помощью кнопки «New SMTP User».

На своём сервере устанавливаем Postfix. В моём случае сервер работает под управлением Debian 10.
sudo apt install postfix


В процессе установки, на вопрос установщика по поводу конфигурации, указываем «Internet Site». То есть Postfix будет отправлять почту, полученную из функции PHP mail().

После установки редактируем файл «main.cf».
sudo nano /etc/postfix/main.cf


Убедитесь в наличии строки
myorigin = /etc/mailname


В строку, начинающуюся с «mydestination =» добавляем домен, подключенный к Mailgun. Пример:
mydestination = $myhostname, mailgun.mydomain.ltd, myhostname.ltd, localhost.myhostname.ltd, localhost


Где «mailgun.mydomain.ltd» - ваш домен, подключенный к Mailgun.

Строка «relayhost» должна выглядеть следующим образом:
relayhost = [smtp.mailgun.org]:587


Далее, в конец файла добавляем следующие строки:
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_password_maps = static:[email protected]:mailgun_password


Где в последней строке логин и пароль для подключения к SMTP серверу Mailgun.

Тут есть небольшой нюанс. Более «правильно», когда логин и пароль хранятся в отдельном файле, закрытом для чтения всем, кроме рута. Однако Postfix по каким-то причинам не получает эти данные, если строка «relayhost» выглядит так, как в этом примере, с указанием порта. Если 25-й порт не заблокирован, то конфигурация может выглядеть так:

.....

relayhost = smtp.mailgun.org

.....

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_password_maps = static:/etc/postfix/sasl_passwd


Где «/etc/postfix/sasl_passwd» - путь, указывающий на файл с логином и паролем.

Если второй вариант более предпочтителен, то создаём соответствующий файл:

sudo nano /etc/postfix/sasl_passwd


И добавляем в него строку следующего содержания:
smtp.mailgun.org   [email protected]:mailgun_password


То есть указываем адрес SMTP сервера, логин и пароль для подключения к нему.

Выставляем права и подключаем эту конфигурацию.
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd


Файл «/etc/postfix/generic» содержит в себе карту вида «пользователь — почтовый адрес». Пример:
root@local_server_hostname  [email protected]
user2@local_server_hostname  [email protected]
user3@local_server_hostname  [email protected]


То есть таким образом можно указать отдельный адрес для каждого пользователя в системе. Если ваш вебсервер работает от имени пользователя www-data, то можно указать это в этом файле.
www-data@local_server_hostname   [email protected]


Где «local_server_hostname» - имя хоста вашего сервера, mailgun.mydomain.ltd — домен, подключенный к Mailgun. Таким образом вся почта, отправленная вашим вебсервером будет приходить с соответствующего адреса.

После создания файла выполняем следующую команду.
sudo postmap /etc/postfix/generic


Редактируем файл «mailname», убираем из него то, что там уже есть и указываем в нём домен, подключенный к Mailgun.
sudo nano /etc/mailname


После того, как всё настроено, перезагружаем Postfix.
sudo systemctl restart postfix


Проверить работу сервера можно следующей командой:
mail -s "Test mail" your_email_address <<< "A test message using Mailgun"


Где «your_email_address» ваш действующий почтовый адрес, на который вы получите письмо с заголовком «Test mail» и текстом «A test message using Mailgun».

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

P.S.: Обновлено. В последнее время многие хостинг-провайдеры блокируют все исходящие порты, связанные с рассылкой почты (25, 465 и 587). Mailgun может принимать почту так же через 2525 порт, который в их системе является алиасом 587-го порта. Не все провайдеры предупреждают своих клиентов о блокировках исходящих портов. Обычно вопрос разблокировки решается обращением в службу поддержки, но не всегда с положительным результатом (особенно на новых аккаунтах) и не всегда сразу, так-как обычно требуется обосновать необходимость разблокировки этих портов и убедить провайдера, что вы в состоянии обеспечить сохранность вашего SMTP сервера от неавторизованного доступа. Другими словами, иногда проще использовать стороннее решение, если SMTP сервер не будет генерировать тонны сообщений, выходя за лимиты бесплатных подписок. Проверить состояние того или иного порта можно с помощью команды "Telnet". В большинстве дистрибутивов пакет не установлен по умолчанию. Например:
telnet smtp.mailgun.org 587

То есть мы проверяем возможность соединения с SMTP сервером (в данном случае Mailgun) на 587-ом порте. Я точно знаю, что порт открыт на стороне Mailgun, но в выдаче что-то вроде "Trying 54.184.250.231...". Из этого видно, что порт заблокирован. Пример удачного соединения:
Trying 54.184.250.231...
Connected to smtp.mailgun.org.
Escape character is '^]'.
220 Mailgun Influx ready

Введите команду "quit" для выхода из сессии Telnet. В вышепривёденной конфигурации замените порт на доступный. На операционных системах семейства Red Hat необходим пакет "cyrus-sasl-plain" для корректной работы авторизации Postfix при соединении с удалённым реле. Для устранения проблем посмотрите логи Postfix (обычно находятся в каталоге "/var/log").
Like Dislike

___
Tatyana K.



Article is edited by: Blacksmith - 26-04-2021, 09:39


Tags: Linux, Postfix


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com