Отправка почты с серверов где заблокирован 25-ый порт (Google cloud platform)

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 377]


    На одном из проектов мне потребовалось отправлять оповещения о падении сервиса на электронную почту и я сильно удивился когда узнал, что все взаимодействие по протоколу smtp в "Google cloud platform" заблокировано.

    Google cloud заблокирован SMTP-порт

    На серверах Google Cloud Platform заблокирован исходящий 25-ый порт, что делает невозможным отправку оповещений штатными средствами системы. Официальная документация сообщает, что порт разблокировать нельзя и рекомендует использовать сторонние сервисы, что мы сейчас и рассмотрим.

    Google предложил на выбор три сервиса (на самом деле мы можем и сами поднять систему с подобным функционалом, но незачем завязывать клиента на себя):

    • Sendgrid
    • Mailgun
    • Mailjet

    Из представленных сервисов меня устроил только https://www.mailjet.com, так как у этого сервиса заявлена доп. программа для пользователей использующих Google cloud platform и по этой реферальной программе бесплатный тариф позволяет отправлять 800 писем в день, что для системы оповещения вполне достаточно.

    Дополнительные лимиты отправки почты MailJet для Google Cloud

    Так же, что немаловажно мы можем настроить postfix для использования MailJet в качестве почтового relay-сервера с авторизацией и это позволит нам прозрачно использовать штатный Linux-функционал консольной отправки почты без заморочек с API-функционалом.

    Отправка почты осуществляется штатными средствами и вам потребуется перенастроить Postfix на использование внешнего relay-сервера. Похожий функционал мы уже рассматривали в статье "Отправка почты стандартными средствами PHP c использованием стороннего почтового сервера".

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

    # apt-get install postfix libsasl2-modules

    В процессе установки будет запущен мастер настройки и вы можете выбрать режим настройки "Local only":

    Настройка Postfix при помощи мастера настройки

    Дальнейшие опции можно оставить используемыми по умолчанию и по завершении работы мастера настройки мы должны внести правки в конфигурационные файлы.

    В конфигурационный файл main.cf добавляем (или изменяем существующий) параметр:

    relayhost = in.mailjet.com:2525

    Обратите внимание, что используется порт 2525 и этого достаточно для обхода блокировки 25-го порта. Естественно, что вы можете на своем почтовом сервере используя утилиту socat создать дублирующий порт который будет слушать ваш почтовый сервер и реализовать аналогичный функционал на своей стороне.

    Активируем TLS режим и указываем файл с учетными данными для авторизации на relay-сервере:

    smtp_tls_security_level = encrypt
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous

    Создаем файл содержащий учетные денные для авторизации на relay-сервере /etc/postfix/sasl_passwd. Файл содержит записи вида:

    in.mailjet.com:2525 API_KEY:API_SECRET

    В отличие от рассмотренных ранее методов, в этом используется API-ключ получить который можно перейдя по ссылке https://app.mailjet.com/account/api_keys или используя навигацию по сайту перейти в раздел Mailjet -> Account -> Api Keys.

    Созданный файл авторизации необходимо преобразовать в hash-формат командой:

    # postmap /etc/postfix/sasl_passwd

    Перезапускаем postfix при помощи команды:

    # /etc/init.d/postfix restart

    И проводим отправку тестового письма:

    echo "TEST" | mail -s "Сбой на MarketMon" -aFrom:Monitor\<chernousov@help-me-24.com\> \
    chernousov@help-me-24.com

    Сообщение будет отправлено через relay-хост и в лог-файле /var/log/mail.log появится соответствующая запись.

    to=<chernousov@help-me-24.com.com>, relay=smtp-ovhfr9.mailjet.com[37.59.74.234]:2525, delay=2,
    delays=0.01/0.03/1.7/0.25, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9B6102E400CE)
    Aug 14 03:41:59 marketplacemonitor postfix/qmgr[26187]: CDAE2CB4: removed

    Теперь почтовые сообщения из Google Cloud Platform будут доставляться получателям.

    Обратите внимание! Сообщения должны отправляться от имени пользователя который привязан к учетной записи. За отправку почты от имени определенного пользователя отвечает параметр -aFrom:

    В противном случае вы получите "письмо счастья".

    Пользователь не в списке рассылки

    We have received an email from a new sender address using your account :

    Detected on: 2017-08-14 14:41:59
    From: root@marketplacemonitor.c.bespoke-apps-151005.internal

    Emails sent from this sender will not be sent until you validate this address in your account. Messages will remain in our processing queue for a few days and will be sent as soon as the sender becomes valid.


    Связанные записи в блоге

    Обсуждение статьи

    Ваш комментарий: