Почтовый сервер Postfix доступен почти во всех дистрибутивах Linux. Вы можете использовать его в качестве простого релея (smart host) для отправки почты из вашей локальной сети в ящики пользователей или пересылки на почтовые сервера за пределами вашей организации. В этой статье мы покажем, как настроить SMTP подключение в Microsoft 365 (Office 365, Exchange Online) в postfix на Linux (на примере Ubuntu/Debian).
Разрешить SMTP аутентификацию в Microsoft 365
По умолчанию postfix поддерживает только basic аутентификацию для пользователей в Microsoft 365. Поэтому нужно разрешить SMTP AUTH (basic authentication) для пользователя, из-под которого ваш postfix будет выполнять отправку.
По умолчанию SMTP AUTH отключена на уровне всего тенанта Exchange Online. Проверьте это с помощью PowerShell.
Подключитесь к вашем тенанту Exchange Online с помощью модуля Exchange Online PowerShell v2 (EXO v2):
Connect-ExchangeOnline
Проверьте настройки SMTP аутентификации:
Get-TransportConfig | Format-List SmtpClientAuthenticationDisabled
В нашем случае достаточно включить SMTP AUTH для одного пользователя с помощью PowerShell:
Set-CASMailbox -Identity username@vmblog365tenant.com -SmtpClientAuthenticationDisabled $false
Также вы можете разрешить SMTP аутентификацию через Microsoft 365 Admin Center: Users -> Active Users -> выберите пользователя, перейдите на вкладку Mail и нажмите Manage email apps. Включите опцию Authenticated SMTP.
Настройка SMTP релея для Microsoft 365 на Postfix
Установите необходимые компоненты на вашем хосте Linux ( Ubuntu в этом случае):
$ sudo apt-get update
$ sudo apt-get install postfix sasl2-bin mailutils
При первичной настройке postfix задайте:
- General type of mail configuration -> Internet Site
- System mail name -> ваш FQDN (hostname —fqdn)
Сохраните имя и пароль пользователя для аутентификации на SMTP сервере Microsoft 365 в файл /etc/postfix/sasl_passwd.
[smtp.office365.com]:587 username@vmblog365tenant.com:user_password
Такой файл с паролем в виде plain текста нельзя использовать в postfix. Чтобы создать хэш для этого файла, выполните:
# postmap /etc/postfix/sasl_passwd
Хэш с настройками подключения будет сохранен в файл /etc/postfix/sasl_passwd.db.
При использовании Office 365 SMTP вы можете оправить письмо только от имени пользователя, под которым аутентифицировались (должно совпадать с полем FROM в письмо). Postfix может подменить поле FROM для всех исходящих писем. Для этого создайте файл /etc/postfix/sender_canonical и добавьте в него строку:
/.+/ username@vmblog365tenant.com
Также создайте хэш для данного файла:
# postmap /etc/postfix/sender_canonical
Проверьте владельцев и права доступа к файлам:
# chown root:root /etc/postfix/{sasl_passwd,sasl_passwd.db,sender_canonical,sender_canonical.db}
# chmod 640 /etc/postfix/{sasl_passwd,sasl_passwd.db,sender_canonical,sender_canonical.db}
Для SMTP подключения мы будем использовать TLS. Получите сертификаты:
; openssl s_client -showcerts -starttls smtp -crlf -connect smtp.office365.com:587
И скопируйте их в файл /etc/postfix/cacert.pem
Теперь внесите следующие изменения в конфигурационный файл postfix (/etc/postfix/main.cf):
inet_protocols = ipv4 relayhost = [smtp.office365.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = may sender_canonical_maps = regexp:/etc/postfix/sender_canonical smtp_tls_CAfile = /etc/postfix/cacert.pem smtp_use_tls = yes smtp_always_send_ehlo = yes
Если вы хотите ограничить сети, с которых Postfix разрешено принимать подключения, используйте директиву mynetworks:
mynetworks = 127.0.0.0/8, 192.16.31.0/24 inet_interfaces = ipv4
Перезапустите сервис:
# systemctl restart postfix
Попробуйте отправить письмо. Создайте текстовый файл:
# nano /etc/postfix/testemail.txt
to: emailto@vmblog.ru subject: Send test email postfix relay to M365
Чтобы отправить тестовое письмо от имени вашего пользователя через SMTP сервер по-умолчанию:
# sendmail -v username@vmblog365tenant.com < /etc/postfix/testemail.txt
Или можно отправить письмо с помощью утилиты mail:# echo "Тестовое письмо через Microsoft 365 SMTP" | mail -s "Проверка отправки M365 Postfix" admin@vmblog.ru -a "FROM:host1@vmblog.ru"
Проверьте, что ваше письмо было успешно отправлено через Microsoft 365 SMTP:# journalctl -u postfix
Для анализа подключений к SMTP relay и просмотра логов отправки писем, смотрите журнал в файле:
# less /var/log/mail.log
v=spf1 ip4:xxx.xxx.xxx.xxx include:spf.protection.outlook.com -all