== Введение == Итак, у нас задача создать почтовый сервер для рассылки почты, но не хочется заморачиваться со всякими pgp, dkym и глубокими настройками почтовика... Что нам нужно: * аккаунт на яндексе, для примера пусть это будет "myaccount@yandex.ru" с паролем "mypassword"; * доменное имя; * ...делегированное яндексу ((https://pdd.yandex.ru)) * ...с настроенным dns. После того, как настроили несущий аккаунт яндекса и домен, нам необходимо настроить debian-сервер. == Установка Postfix == Первое, что делаем - устанавливаем postfix (я фанат постфикса по причине его гибкости, кучи простых и понятных вариаций настройки). %%(sh) apt-get install postfix %% после чего aptitude снесёт установленный по умолчанию exim4 exim надо добить! выясняем имена пакетов для добития %%(sh) dpkg -l|grep exim4 %% должен выплюнуть 4 пакета, которые удаляем командой %%(sh) dpkg -P \ exim4 \ exim4-common \ exim4-base \ exim4-common exim4-daemon-light \ exim4-daemon-heavy %% Останавливаем постфикс %%(sh) service 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 %% /etc/postfix/_stop.sh %%(shell) #!/bin/sh clear service postfix stop %% /etc/postfix/_start.sh %%(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 Файл несёт в себе отношения пользователя в системе ко внешнему пользователю. То есть для каждого пользователя можно настроить разные внешние почтовые сервисы. ВНИМАНИЕ! ИМЕННО "РАЗНЫЕ" ! То есть два аккаунта яндекса я настроить не смог, кто сможет - пишите. %%(t) 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/posts/480)) ===================================== /etc/postfix/mailpasswd Файл несёт в себе пароль от яндексового аккаунта %%(t) [smtp.yandex.ru]:587 myaccount@yandex.ru:mypassword %% ===================================== /etc/postfix/transport Файл указывает на "транспорт" для сателлита для всей исходящей почты %%(t) * smtp:[smtp.yandex.ru]:587 %% ===================================== /etc/postfic/mail.cf %%(conf) smtpd_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 %% ===================================== Создаём линк на сертификат (нужен для нормальной работы) %%(sh) cd /etc/postfix ln -s cacert.pem /etc/ssl/certs/Equifax_Secure_CA.pem %% ===================================== == Запуск и тест == Запускаем %%(sh) cd /etc/postfix ./_postmap.sh ./_cleanup.sh ./_start.sh ./_test.sh ./_tail.sh %% Следом прячем доступ к чтению паролей не root-пользователям %%(sh) cd /etc/postfix chmod 0600 generic chmod 0600 mailpasswd chmod 0600 transport chmod 0600 *.db %% Смотрим в почту - пришёл тест === работает Не пришло - смотрим логи через tail и разбираемся. ===================================== == От автора == Данный сетап идеален для VPS/VDS в виде сайт/машина или домен/машина или проект/машина. Данный сетап идеален, если нет возможности содержать собственный DNS сервер и/или собственный Почтовый сервер, так как требует каких-то иных действий, недоступных пользователю/админу. За примерами далеко ходить не надо -- стартап/1-3 работника в проекте и все программеры со слабыми скилами в администрировании итп. В 9 из 10 случаев эта конфигурация запускается "сполпинка". 1 из 10 это случай, когда машина не голая (не только что установлена) и требуется поплясать с бубном. Хоть исходящий адрес будет настраиваемым, промежуточный яндексовый может светиться, как релей в исходнике письма. Это БЕЛЫЙ способ рассылки, что-то спрятать не удастся. И имейте ввиду, что у яндекса есть неявный лимит на рассылку, ~ стартапа конечно вряд ли коснётся, но всё же. И да, тут приятная побочка... Используя АП яндекса можно пользователям выдавать ящики ;)