Введение
Итак, у нас задача создать почтовый сервер для рассылки почты, но не хочется заморачиваться со всякими pgp, dkym и глубокими настройками почтовика...
- аккаунт на яндексе, для примера пусть это будет «myaccount@yandex.ru» с паролем «mypassword»;
- доменное имя;
- ...делегированное яндексу [https://pdd.yandex.ru]
- ...с настроенным dns.
После того, как настроили несущий аккаунт яндекса и домен, нам необходимо настроить debian-сервер.
Установка Postfix
Первое, что делаем — устанавливаем postfix (я фанат постфикса по причине его гибкости, кучи простых и понятных вариаций настройки).
shapt-get install postfix
после чего aptitude снесёт установленный по умолчанию exim4
exim надо добить!
выясняем имена пакетов для добития
shdpkg -l|grep exim4
должен выплюнуть 4 пакета, которые удаляем командой
shdpkg -P \ exim4 \ exim4-common \ exim4-base \ exim4-common exim4-daemon-light \ exim4-daemon-heavy
shservice postfix stop
Настройка Postfix
Чистит логи почтовика — может понадобиться при глубокой настройке постфикса для чистоты эксперимента
/etc/postfix/_cleanup.sh
shell#!/bin/sh
clear
truncate -s0 \
/var/log/mail.*
Создаёт lookup-карты паролей, «транспорта» итп
/etc/postfix/_postmap.sh
shell#!/bin/sh
clear
postmap /etc/postfix/generic
postmap /etc/postfix/mailpasswd
postmap /etc/postfix/transport
Запуск/перезапуск -скрипты, чтобы не носиться с консолью
/etc/postfix/_restart.sh
shell#!/bin/sh
clear
service postfix restart
shell#!/bin/sh
clear
service postfix stop
shell#!/bin/sh
clear
service postfix start
Смотрит в реальном времени лог почтовика — понадобится для тестирования
/etc/postfix/_tail.sh
shell#!/bin/sh
clear
tail -f /var/log/mail.log
Запускает тест
/etc/postfix/_test.sh
shell#!/bin/sh
clear
mail -s "test" [ВАШ EMAIL АДРЕС] < /dev/null
/etc/postfix/generic
Файл несёт в себе отношения пользователя в системе ко внешнему пользователю.
То есть для каждого пользователя можно настроить разные внешние почтовые сервисы.
ВНИМАНИЕ! ИМЕННО «РАЗНЫЕ» ! То есть два аккаунта яндекса я настроить не смог, кто сможет — пишите.
root@localhost myaccount@yandex.ru root@ВАШ_ДОМЕН myaccount@yandex.ru www-data@localhost myaccount@yandex.ru www-data@ВАШ_ДОМЕН myaccount@yandex.ru ПОЛЬЗОВАТЕЛЬ@localhost myaccount@yandex.ru ПОЛЬЗОВАТЕЛЬ@ВАШ_ДОМЕН myaccount@yandex.ru
Подразумевается, что виртуальный хост запущен от «ПОЛЬЗОВАТЕЛЬ», равно, как и PHP исполняется от него.
Смотри статью «Установка и настройка Debian Linux в качестве хостинга» [https://laravel.ru]
/etc/postfix/mailpasswd
Файл несёт в себе пароль от яндексового аккаунта
[smtp.yandex.ru]:587 myaccount@yandex.ru:mypassword
/etc/postfix/transport
Файл указывает на «транспорт» для сателлита для всей исходящей почты
* smtp:[smtp.yandex.ru]:587
confsmtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no 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 myhostname = ВАШ_ДОМЕН alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only inet_protocols = ipv4 relayhost = smtp.yandex.ru:587 smtp_destination_rate_delay = 60 relay_destination_rate_delay = 60 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/mailpasswd smtp_sasl_security_options = noanonymous transport_maps = hash:/etc/postfix/transport smtp_generic_maps = hash:/etc/postfix/generic smtp_tls_CAfile = /etc/postfix/cacert.pem smtp_use_tls = yes
Создаём линк на сертификат (нужен для нормальной работы)
shcd /etc/postfix ln -s cacert.pem /etc/ssl/certs/Equifax_Secure_CA.pem
Запуск и тест
shcd /etc/postfix ./_postmap.sh ./_cleanup.sh ./_start.sh ./_test.sh ./_tail.sh
Следом прячем доступ к чтению паролей не root-пользователям
shcd /etc/postfix chmod 0600 generic chmod 0600 mailpasswd chmod 0600 transport chmod 0600 *.db
Смотрим в почту — пришёл тест === работает
Не пришло — смотрим логи через tail и разбираемся.
От автора
Данный сетап идеален для VPS/VDS в виде сайт/машина или домен/машина или проект/машина.
Данный сетап идеален, если нет возможности содержать собственный DNS сервер и/или собственный Почтовый сервер, так как требует каких-то иных действий, недоступных пользователю/админу. За примерами далеко ходить не надо — стартап/1-3 работника в проекте и все программеры со слабыми скилами в администрировании итп.
В 9 из 10 случаев эта конфигурация запускается «сполпинка».
1 из 10 это случай, когда машина не голая (не только что установлена) и требуется поплясать с бубном.
Хоть исходящий адрес будет настраиваемым, промежуточный яндексовый может светиться, как релей в исходнике письма. Это БЕЛЫЙ способ рассылки, что-то спрятать не удастся.
И имейте ввиду, что у яндекса есть неявный лимит на рассылку, ~ стартапа конечно вряд ли коснётся, но всё же.
И да, тут приятная побочка...
Используя АП яндекса можно пользователям выдавать ящики ;)
Комментарии (5)
PGP в смысле шифрования? Что-то я не слышал о сервисах, которые рассылают автоматические письма в PGP...
В смысле DKIM?
По-моему проще перед установкой нового MTA сделать
shapt remove exim\*
.Скрипты лучше в home dir держать, ибо писать /etc/postfix/_cleanup.sh ничуть не короче, чем собственно команду, которая внутри. В отличии от ~/_cleanup.sh.
Вообще, тема не раскрыта до конца.
Что значит «белый» способ, что именно спрятать не удасться?
Чем локальный Postfix лучше напрямую отправки почты с Яндекса через SMTP? В голову приходит только буферизация, когда Яндекс недоступен и письма какое-то время висят локально в очереди, но часто ли Яндекс недоступен? ИМХО, это не более проблема, чем раздача jQuery с CDN.
dkim — очепятался, и да, на 2 ряда кнопок. бывает.
в дебиан нельзя удалить МТА, так как страдает целостность системы. например дебконф уже становится хромой, поэтому ты никогда не сможешь удалить путём dpkg -P exim4
и управлять установленными пакетами через апт — это дебиан, как минимум 8 летней давности.
«белый способ» я пояснял, читай ещё раз, там же.
по теме «буфферизации», — не совсем, но тоже сойдёт...
а) так правильнее, ибо на самом деле яндекс в часы пик не отвечает — таймауты растут дико
б) так меньше проблем при работе с ларой, ибо меньше плясок с бубнами вокруг фреймворка, ИБО каждый сервис должен заниматься тем, для чего создан
apt это просто надстройка, где объединяются команды других apt-*, например apt search. apt-get более низкоуровневый интерфейс. Из особенно полезного — у apt есть прогресс бар, как в yum.
А чем плох exim4?
1. Postfix больше распространён (exim только у тех, кого устраивает сидеть там, где сидят), и больше находимых (тем же гуглом) решений.
2. Exim более трудный в понимании и развёртывании для новичка.