Простой SMTP-сервер (с авторизацией) для почтовой рассылки в дополнение к Yandex почта для домена

by Anton Chernousov aka GITA-DEV


Опубликовано: 27 Сен 2018 (последние правки 3 недели)


Простой SMTP-сервер (с авторизацией) для почтовой рассылки в дополнение к Yandex почта для домена

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

У Яндекс очень маленький рэйт-лимит по числу отправляемых писем в час и сутки, причем не предусмотрено какого-то коммерческого тарифного плана который бы эти лимиты увеличивал. И самое противное, что превысив эти лимиты вам надо будет прекратить отправку почты на срок от 12-и до 24-х часов пока с вас не снимут бан.

Вы можете довольно легко влететь в бан Яндекс почта для домена если у вас например настроена автоматическая отправка счетов и предложений для ваших клиентов. Меня часто спрашивают, что в этом случае делать и я могу предложить только одно решение: если вы скажем так "доросли" до таких объемов, то пора подумать о отдельном почтовом сервере или о сервере предназначенном только для отправки почты.

Про полноценный почтовый сервер на базе OpenSource-компонентов я уже не однократно рассказывал, а отдельно стоящий SMTP-сервер дополнительно к инфраструктуре "Яндекс почта для домена" является отдельным случаем почтового сервера, но с некоторыми оговорками:

  • Вместо базы данных пользователей используется несколько записей вида robot@domain.ru и т.п. с которых идет только отправка оповещений.
  • Почтовый сервер не принимает подключения и не доставляет почту получателям

В результате у нас получается Relay-сервер настроенный по всем правилам полноценного сервера, но без функционала приема почты, а за прием почты у нас будет отвечать "Яндекс почта для домена".

Итак, начнем с установки и настройки saslauthd и именно этот компонент будет отвечать за авторизацию пользователей которые могут отправлять почту через этот почтовый сервер.

# aptitude install sasl2-bin

Настраиваем автозапуск saslauthd и основные параметры, для чего приведем конфигурационный файл /etc/default/saslauthd к следующему виду:

START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="sasldb"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Настройка SASL в связке c Postfix это наверное самое простое из всех возможных решений, но оно может попротить довольно много крови если не знать последовательность действий по ее настройке.

Устанавливаем Postfix (настройки которые предложит мастер мастер установки оставляйте по умолчанию):

# aptitude install postfix

Типовой конфигурационный файл для Postfix будет выглядеть следующим образом:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.part710.online
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = smtp-x, localhost.localdomain, , localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Создаем каталог /etc/postfix/sasl/ и файл /etc/postfix/sasl/smtpd.conf содержащий следующие записи:

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true

Для того чтобы он работал на нестандартном порту в файле /etc/postfix/master.cf изменяем строку:

smtp     inet n      -      y      -      -      smtpd

на строку:

2525     inet n      -      y      -      -      smtpd -v

Перезапускаем SMTP-сервер Postfix:

# /etc/init.d/postfix restart

Проверяем, что SMTP-сервер работает на нестандартном порту:

# netstat -tulpn | grep master
tcp       0     0 0.0.0.0:2525           0.0.0.0:*              LISTEN     24211/master       
tcp6      0     0 :::2525                :::*                   LISTEN     24211/master

Проводим некоторые нестандартные телодвижения для корректной работы Postfix через saslauthd в том случае, когда Postfix запущен в chroot:

# dpkg-statoverride --remove /var/spool/var/run/saslauthd
# dpkg-statoverride --add root sasl 770 /var/spool/postfix/var/run/saslauthd
# adduser postfix sasl

Настраиваем автозапуск saslauthd и перезапускаем его:

# systemctl enable saslauthd
# /etc/init.d/saslauthd restart

Проверяем сокет saslauthd и права доступа к нему:

# ls -lua /var/spool/postfix/var/run/
total 12
drwxr-xr-x 3 root root 4096 Sep 24 06:54 .
drwxr-xr-x 3 root root 4096 Sep 24 06:52 ..
drwxrwx--- 2 root sasl 4096 Sep 24 06:53 saslauthd

Создаем пользователя который сможет авторизовываться для отправки почты:

# saslpasswd2 -c -u part710.online -a smtpauth robot

Проверяем, что пользователь создан:

# sasldblistusers2
robot@part710.online: userPassword

Проверяем авторизацию:

# testsaslauthd -u robot@part710.online -p SecretPassword

Проверяем отправку почты без авторизации:

# echo "message" | heirloom-mailx -S smtp=95.216.157.2:25 -s "Test email" -v anton@gita-dev.ru

Для этой операции вам понадобится пакет heirloom-mailx:

# aptitude install heirloom-mailx

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

Aug 27 04:09:50 mail postfix/smtpd[1679]: connect from l49-118-251.cn.ru[178.49.118.251]
Aug 27 04:09:50 mail postfix/smtpd[1679]: NOQUEUE: reject: RCPT from l49-118-251.cn.ru[178.49.118.251]: 454 4.7.1 <anton@gita-dev.ru>: Relay access denied; from=<root@veresk-v> to=<anton@gita-dev.ru> proto=SMTP helo=<veresk-v>
Aug 27 04:09:50 mail postfix/smtpd[1679]: lost connection after RCPT from l49-118-251.cn.ru[178.49.118.251]

Теперь тоже самое, но уже с авторизацией:

# echo "message" | heirloom-mailx -S smtp-use-starttls -S smtp-auth-user="robot@part710.online" -S smtp-auth-password="SecretPassword" -S smtp=95.216.157.2:25 -S smtp-auth=login -S ssl-verify=ignore -s "Test email" -r "From: Robot <robot@part710.online>" -v anton@gita-dev.ru

Если у вас возникли проблемы с SASL-авторизацийе, то вы всегда можете запустить saslauthd в режиме отладки при помощи команды:

# /usr/sbin/saslauthd -d -a sasldb -c -m /var/spool/postfix/var/run/saslauthd

На этом пожалуй и закончим, а дальше все делается по инструкции "Настройка DKIM, SPF, DMARK. Повышаем уровень доверия к почтовому серверу".

PS: Единственное, что хотелось бы добавить по этому вопросу, это настройка SPF записи для "Яндекс почта для домена" полюс наш дополнительный почтовый сервер будет выглядеть следующим образом:

@ IN TXT v=spf1 a mx include:_spf.yandex.net ip4:95.216.188.107 ~all
@ IN TXT v=spf1 a mx include:_spf.yandex.ru ip4:95.216.188.107 ~all

Обратите внимание на статьи:


Настройка DKIM, SPF, DMARK. Повышаем уровень доверия к почтовому серверу.

Настройка DKIM, SPF, DMARK. Повышаем уровень доверия к почтовому серверу.

Задачи по настройке DKIM/SPF/DMARK и т.п. довольно распространены на фриланс-сайтах, но в большинстве случаев там все в итоге сводится к настройте мне почтовый сервер для спам рассылок чтобы мои уникальные предложения не попадали в спам. Такие товарищи мне не товарищи и сразу идут лесом, да и кстати сказать, из за них теперь для настройки банального почтового сервера требуется совершать столько приседаний. Чтобы не забыть последовательность действий по настройке почтового сервера письма от которого не будут сразу уходить в спам, я решил написать эту небольшую инструкцию.


Настройка MTA Postfix в связке с Dovecot

Настройка MTA Postfix в связке с Dovecot

В предыдущей статье посвященной сборке и настройке почтового сервера из Opensource-компонентов, я в качестве MTA использовал EXIM и как мне сказали я это сделал зря, так как наиболее распространенным почтовым сервером на данный момент является Postfix и он применяется на 90% почтовых серверов. Пожалуй прислушаюсь к советам читателей и расскажу в дополнение к предыдущей статье как настроить Postfix для той же связки.


Настройка шифрования трафика протоколов SMTP и IMAP сертификатами let's Encrypt (EXIM+Dovecot)

Настройка шифрования трафика протоколов SMTP и IMAP сертификатами let's Encrypt (EXIM+Dovecot)

Как я уже говорил, я продолжу настраивать тестовый почтовый сервер на базе Dovecot+Exim и сегодня мы настроим шифрование трафика SMTP и IMAP валидными сертификатами Let's encrypt.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.