Почтальон Печкин у тебя дома. Часть 1
Я давно занимаюсь обслуживанием почтовых серверов. Серверов корпоративных, где число пользователей исчисляется многими тысячами.
В общении с коллегами и не только часто сталкивался со мнением, что развернуть почтовый сервер у себя — задача сложная и практически не реализуемая в плане доставки писем, проще купить услугу у провайдера и т.п. В этих двух постах я, с учетом своего опыта, покажу вам, что это не так.
В первой части мы рассмотрим техническую часть для домашнего использования, во второй части я расскажу про всякие SPF и прочие непонятные сразу вещи.
Для начала нам нужно понимать самые основные вещи: нужен белый статический IP-адрес от провайдера и обратная запись в DNS, которая будет соответствовать нашему почтовому хосту. Допустим, это будет mail.ivanov.ru.
С IP-адресом могут быть проблемы. Он может быть где-то уже заюзан, попасть в черные списки DNSBL. Это можно узнать через, например, сайт mxtoolbox. Кроме того (неочевидный, но решаемый момент), некоторые провайдеры, например, мой Дом.ру, делают пометку в анонсе своих ASN, что сеть является частной (домашней). В этом случае такие провайдеры, как Google, не будут принимать с этих адресов почту. Этот вопрос тоже решается, расскажу во второй части. Кроме того, у провайдеров есть "любовь" блочить 25 порт. Это тоже решаемо или обращением в поддержку, или сменой порта. Не 25 портом одним почта жива)
Теперь к практическому применению. Конечно, я тут мог бы расписать длинную-предлинную историю как развернуть Exchange или вообще все поднять на Dovecot, Postfix и smtpd, но делать этого не буду. Для дома нужно простое и элегантное решение.
Такое решение есть. Это проект poste.io — https://poste.io/. Это Docker-контейнер, который разворачивает "из коробки" небольшой почтовый сервер, функционала которого вполне хватит для дома/семьи (календарных возможностей у него нет).
Установка — фактически одна команда. Потребуются: 64-битный Linux, Docker, чуть-чуть свободных RAM и CPU (их едят антиспам и антивирус) и публичный IP с настроенной PTR-записью.
docker run \
--net=host \
-e TZ=Europe/Moscow \
-v /opt/poste/data:/data \
--name "mailserver" \
-h "mail.ivanov.ru" \
-d -t analogic/poste.io
Образ на Docker Hub — analogic/poste.io (вариант poste.io/mailserver требует логина, это лицензионная ветка, содержательно то же самое). --net=host — рекомендованная схема: не нужно пробрасывать порты и возиться с NAT. Весь сервер — конфигурация, письма, сертификаты — лежит в одной папке /data, что удобно для бэкапа и переноса.
После старта открываем https://<IP-адрес> (сертификат сначала самоподписанный), мастер установки предлагает задать пароль веб-администратора. Дальше через админку добавляем почтовый домен и пользователей.
Порты, которые должны слушать и быть открыты снаружи: 25 — приём почты от других серверов (без него это не сервер), 465/587 — отправка клиентами, 993 — IMAP, 80/443 — вебмейл и получение сертификатов Let's Encrypt.
DNS: A-запись mail.ivanov.ru -> IP-адрес, MX-запись ivanov.ru -> mail.ivanov.ru. PTR — запрос провайдеру, она должна совпадать с hostname почтового хоста.
После этого мы получим вполне рабочий почтовик с веб-интерфейсом на базе Roundcube, поддержкой IMAP. Самая интересная часть впереди — настройка записей в DNS, ключей и других плюх, на которых многие и спотыкаются. Подписывайтесь на канал — во второй части все расскажу 😉