Может войдёшь?
Черновики Написать статью Профиль

Почтовый сервер-сателлит Яндекса на базе ОС Debian и Postfix

Введение

Итак, у нас задача создать почтовый сервер для рассылки почты, но не хочется заморачиваться со всякими 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

/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
Файл несёт в себе отношения пользователя в системе ко внешнему пользователю.
То есть для каждого пользователя можно настроить разные внешние почтовые сервисы.
ВНИМАНИЕ! ИМЕННО «РАЗНЫЕ» ! То есть два аккаунта яндекса я настроить не смог, кто сможет — пишите.

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

/etc/postfic/mail.cf

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)

Proger_XP
  1. pgp

PGP в смысле шифрования? Что-то я не слышал о сервисах, которые рассылают автоматические письма в PGP...

  1. dkym

В смысле DKIM?

  1. exim надо добить!

По-моему проще перед установкой нового MTA сделать shapt remove exim\*.

  1. /etc/postfix/_cleanup.sh

Скрипты лучше в home dir держать, ибо писать /etc/postfix/_cleanup.sh ничуть не короче, чем собственно команду, которая внутри. В отличии от ~/_cleanup.sh.


Вообще, тема не раскрыта до конца.

Что значит «белый» способ, что именно спрятать не удасться?

Чем локальный Postfix лучше напрямую отправки почты с Яндекса через SMTP? В голову приходит только буферизация, когда Яндекс недоступен и письма какое-то время висят локально в очереди, но часто ли Яндекс недоступен? ИМХО, это не более проблема, чем раздача jQuery с CDN.

hzone

dkim — очепятался, и да, на 2 ряда кнопок. бывает.

в дебиан нельзя удалить МТА, так как страдает целостность системы. например дебконф уже становится хромой, поэтому ты никогда не сможешь удалить путём dpkg -P exim4
и управлять установленными пакетами через апт — это дебиан, как минимум 8 летней давности.

«белый способ» я пояснял, читай ещё раз, там же.

по теме «буфферизации», — не совсем, но тоже сойдёт...
а) так правильнее, ибо на самом деле яндекс в часы пик не отвечает — таймауты растут дико
б) так меньше проблем при работе с ларой, ибо меньше плясок с бубнами вокруг фреймворка, ИБО каждый сервис должен заниматься тем, для чего создан

Proger_XP
  1. и управлять установленными пакетами через апт — это дебиан, как минимум 8 летней давности.

apt это просто надстройка, где объединяются команды других apt-*, например apt search. apt-get более низкоуровневый интерфейс. Из особенно полезного — у apt есть прогресс бар, как в yum.

airy

А чем плох exim4?

hzone

1. Postfix больше распространён (exim только у тех, кого устраивает сидеть там, где сидят), и больше находимых (тем же гуглом) решений.
2. Exim более трудный в понимании и развёртывании для новичка.

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

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.