Как я поднял свой почтовый сервер и понял, что зря ввязался
Почему я решил сделать свою почту
Я хотел свой почтовый ящик на своём домене. Не через Яндекс.Почту для домена, не через Google Workspace — свой, личный, чтобы письма хранились на моём сервере.
Я думал это будет круто: полный контроль, никакой рекламы, никакого чтения моих писем алгоритмами. Спойлер: я оказался прав, но путь к этому был тернистым.
На самом деле идея зрела давно. Я смотрел на ящик вида admin@mysurik.ru и понимал — это выглядит солидно. Когда отправляешь письмо с Gmail, тебя воспринимают как обычного пользователя. А когда с почты на своём домене — ты уже «владелец инфраструктуры». Мелочь, а приятно.
Установка iRedMail
Решил ставить iRedMail на Ubuntu 24.04. Скачал скрипт, запустил:
bash iRedMail.sh
Скрипт задал всего несколько вопросов: домен, пароль админа, какие компоненты ставить (Postfix, Dovecot, MySQL, Roundcube). Всё остальное сделал сам. Через 10 минут почтовый сервер был готов.
Но это была только вершина айсберга.
iRedMail, кстати, штука удобная. Он сам ставит Postfix для отправки, Dovecot для приёма, MySQL для хранения, Roundcube для веб-интерфейса. И спам-фильтр SpamAssassin докидывает. Всё из коробки. Я только глянул, что порты открылись: 25, 465, 587, 993, 995. Проверил:
ss -tlnp | grep -E ':(25|465|587|993|995)'
Всё висело и слушало. Красота.
Но первая проблема пришла откуда не ждали — iRedMail включает Fail2ban и активно блокирует подборщиков. Я об этом узнал, когда сам не смог зайти в Roundcube. Пришлось добавлять свой IP в whitelist:
echo '[Dovecot]
enabled = true
ignoreip = 192.168.0.xxx' >> /etc/fail2ban/jail.local
И перезапустить Fail2ban. Мелочь, а минус час жизни.
Настройка DNS — ад на неделю
Чтобы почта не уходила в спам, нужно настроить кучу DNS-записей: SPF, DKIM, DMARC, PTR.
SPF — чтобы другие серверы знали, что мой сервер имеет право отправлять почту с моего домена. Прописал TXT запись:
v=spf1 mx ip4:192.168.0.130 ~all
Но я тут же наступил на грабли: сначала написал v=spf mx -all без единицы в версии. И серверы возвращали «PermError». Тупил полчаса, пока не заметил.
DKIM — цифровая подпись писем. iRedMail сгенерировал ключи, я добавил публичный ключ в DNS. Без этого Yahoo и GMail помечали письма как спам.
Ключи лежат в /var/lib/dkim/. iRedMail сам добавил запись в DNS — мне осталось только скопировать TXT-значение в панель управления доменом. Но я умудрился скопировать не весь ключ — он длинный, переносы строк сбивают. Пришлось перепроверять через dig:
dig TXT 2024._domainkey.mysurik.ru +short
Если возвращает пустоту — значит, запись кривая. Я потратил вечер на то, чтобы вбить ключ одной строкой без кавычек внутри.
DMARC — политика, что делать с письмами, которые не прошли SPF/DKIM. Я поставил p=quarantine. Потом почитал логи и понял, что некоторые письма всё равно уходят в спам. Переключил на p=reject — и количество жалоб упало.
PTR — обратная DNS-запись. Это настроил у хостинг-провайдера. Без неё многие почтовые серверы отклоняют письма.
Вот тут самое больное. У моего провайдера настройка PTR была в личном кабинете, но применялась она только через тикет в поддержку. Я написал: «Установите PTR-запись 192.168.0.130 → mail.mysurik.ru». Ответили через сутки: «Готово». Проверил:
dig -x 192.168.0.130 +short
И правда — вернуло mail.mysurik.ru. Ура.
Самое обидное — настройка DNS заняла неделю, потому что изменения распространяются не сразу, и я не мог проверить, правильно ли всё настроил. Сидишь, ждёшь, перепроверяешь через whatsmydns.net, а там то одно, то другое не видно.
Борьба со спамом — рутина, которая бесит
Первые письма с моего сервера улетали в спам даже на GMail. Оказалось, IP моего сервера был в чёрных списках (мой IP из диапазона, который использовался спамерами раньше).
Пришлось писать запросы на удаление из базы Spamhaus, Barracuda, и ещё нескольких. Это заняло дня три.
Spamhaus — самый строгий. Заявку рассматривали дольше всех. Для каждого нужно было доказать, что я не спамер: показать PTR-запись, SPF, DKIM. Я заполнил форму, приложил скриншоты DNS-записей. Через пару дней IP убрали из чёрного списка.
Но я заметил ещё одну вещь: Postfix по умолчанию не проверяет, что письма от легитимных отправителей. Я настрол её через opendkim — проверку подписей входящих писем. Без этого любой мог подделать мой домен и слать письма от моего имени.
Проверить, не подделывают ли мой домен, можно через DMARC-отчёты. Я получаю их раз в день на почту и вижу, кто пытался отправить письмо якобы от меня. Один раз пришёл отчёт из Китая — кто-то пробовал слать спам с моего домена. DMARC отклонил. Я тогда выдохнул.
Ещё я поставил Postscreen — лёгкий спам-фильтр перед Postfix. Он проверяет, кто стучится в 25 порт, по нескольким тестам: делает ли клиент правильное SMTP-рукопожатие, не тупит ли. Настраивается парой строк в main.cf:
postscreen_access_list = permit_mynetworks
postscreen_dnsbl_sites = zen.spamhaus.org, bl.spamcop.net
postscreen_dnsbl_threshold = 2
После включения Postscreen число соединений от спам-ботов упало с нескольких сотен в день до десятка. И нагрузка на сервер снизилась.
Про очереди и битые письма
Была ситуация: письмо ушло, а адресат не получил. Я полез в логи Postfix:
tail -f /var/log/mail.log
Там увидел, что удалённый сервер отвечает: «550 Sender rejected — not yet authenticated». Оказалось, что на моём сервере была включена аутентификация SMTP, а я отправлял письмо через локальный скрипт без логина. Пришлось добавить авторизацию в скрипте.
Или ещё: я отправил письмо с вложением 30 МБ, а GMail отказался его принимать, потому что лимит — 25 МБ. Postfix вернул письмо обратно в очередь и пытался отправить снова каждый час. Чистил очередь:
postqueue -p — смотрим, что зависло
postsuper -d ALL — удаляем всё.
Потом я вписал лимит в main.cf: message_size_limit = 26214400 — и проблема ушла.
Мониторинг и алерты
Я поставил проверку: раз в час скрипт пытается отправить тестовое письмо на Gmail и проверяет, дошло ли. Если нет — шлёт уведомление в Telegram. За месяц было три сбоя: два раза падал Dovecot (кончилась память), один раз Postfix переставал принимать соединения после перезагрузки сервера (забыл включить автозапуск).
Скрипт простой: swaks --to myuser@gmail.com --server localhost — отправляет письмо, а потом через IMAP проверяет его наличие в отправленных. Если не находит — бьёт тревогу. swaks, кстати, крутая штука для тестирования SMTP, советую.
Стоит ли игра свеч
Честно: если вам нужна почта для себя — проще взять Яндекс.Почту для домена (бесплатно) или Google Workspace (дёшево). Свой сервер — это геморрой.
Но если вам нужен контроль над данными, и вы готовы возиться — iRedMail лучший выбор. Он собирает Postfix + Dovecot + Roundcube + спам-фильтр в одну работающую систему. Главное — терпение с DNS и репутацией IP.
Сейчас моя почта работает стабильно уже три месяца. Письма доходят, спам-фильтр работает, DMARC-отчёты приходят. Я могу зайти в Roundcube с телефона, могу настроить любой почтовый клиент. Но если честно — я бы не стал проходить этот путь снова.
Раз в месяц я вспоминаю эту эпопею, захожу на сайт Яндекса, вижу бесплатную почту для домена с их фильтрами, и думаю: «Может, ну его?» Но потом опять лезу в логи, смотрю, как всё работает, и остаюсь. Потому что это моё. И я знаю, что письма не читает никто, кроме меня. И блэклисты я чищу сам. И если что-то сломается — я знаю, где чинить. Это даёт странное чувство уверенности, даже если оно иррационально.
Расширю статью о почтовом сервере дополнительными деталями из опыта. Почему я решил сделать свою почту. Я хотел свой почтовый ящик на своём домене. Не через Яндекс.Почту для домена, не через Google Workspace — свой, личный, чтобы письма хранились на моём сервере. Я думал это будет круто: полный контроль, никакой рекламы, никакого чтения моих писем алгоритмами. Спойлер: я оказался прав, но путь к этому был тернистым. На самом деле идея зрела давно. Я смотрел на ящик вида admin@mysurik.ru и понимал — это выглядит солидно. Когда отправляешь письмо с Gmail, тебя воспринимают как обычного пользователя. А когда с почты на своём домене — ты уже «владелец инфраструктуры». Мелочь, а приятно. Свой почтовый сервер — это ещё и независимость: вы не привязаны к чужой политике, чужим фильтрам, чужим сбоям. Ваша почта хранится у вас, на вашем железе. Судьба ваших писем зависит только от вас. Но прежде чем нырять в эту тему, стоит честно оценить свои силы и время. Я оценку сделал, но, как выяснилось, — занизил сложность раза в три. Спама и DNS-проблем оказалось больше, чем я думал.
Установка iRedMail. Решил ставить iRedMail на Ubuntu 24.04. Скачал скрипт, запустил: bash iRedMail.sh. Скрипт задал всего несколько вопросов: домен, пароль админа, какие компоненты ставить (Postfix, Dovecot, MySQL, Roundcube). Всё остальное сделал сам. Через 10 минут почтовый сервер был готов. Но это была только вершина айсберга. iRedMail, кстати, штука удобная. Он сам ставит Postfix для отправки, Dovecot для приёма, MySQL для хранения, Roundcube для веб-интерфейса. И спам-фильтр SpamAssassin докидывает. Всё из коробки. Я только глянул, что порты открылись: 25, 465, 587, 993, 995. Проверил: ss -tlnp | grep -E ‘:(25|465|587|993|995)’. Всё висело и слушало. Красота. Установка iRedMail — это, пожалуй, самое простое во всей эпопее. Скрипт делает всё сам, и через десять минут у вас уже принимающая и отправляющая почта. Я помню своё удивление: неужели всё настолько просто? Увы, самое сложное было впереди. Компоненты: Postfix отвечает за отправку, Dovecot — за хранение и приём по IMAP/POP3, MySQL хранит учётки и ящики, Roundcube даёт веб-морду. Связка проверенная, работает как часы. Но первая проблема пришла откуда не ждали — iRedMail включает Fail2ban и активно блокирует подборщиков. Я об этом узнал, когда сам не смог зайти в Roundcube. Пришлось добавлять свой IP в whitelist: echo ‘[Dovecot] enabled = true ignoreip = 192.168.0.xxx’ >> /etc/fail2ban/jail.local. И перезапустить Fail2ban. Мелочь, а минус час жизни. Fail2ban — это защита от перебора паролей. Он следит за логами Dovecot и Postfix, и если видит много неудачных попыток входа с одного IP — банит его. Хорошая защита. Плохо только то, что в карман попадают и законные пользователи, если их IP попал в диапазон атакующего. Белый список решает: свой IP вы вносите заранее и не мучаетесь. Опыт полезный, но неприятный.
Настройка DNS — ад на неделю. Чтобы почта не уходила в спам, нужно настроить кучу DNS-записей: SPF, DKIM, DMARC, PTR. SPF — чтобы другие серверы знали, что мой сервер имеет право отправлять почту с моего домена. Прописал TXT запись: v=spf1 mx ip4:192.168.0.130 ~all. Но я тут же наступил на грабли: сначала написал v=spf mx -all без единицы в версии. И серверы возвращали «PermError». Тупил полчаса, пока не заметил. DKIM — цифровая подпись писем. iRedMail сгенерировал ключи, я добавил публичный ключ в DNS. Без этого Yahoo и GMail помечали письма как спам. Ключи лежат в /var/lib/dkim/. iRedMail сам добавил запись в DNS — мне осталось только скопировать TXT-значение в панель управления доменом. Но я умудрился скопировать не весь ключ — он длинный, переносы строк сбивают. Пришлось перепроверять через dig: dig TXT 2024._domainkey.mysurik.ru +short. Если возвращает пустоту — значит, запись кривая. Я потратил вечер на то, чтобы вбить ключ одной строкой без кавычек внутри. DNS — это фундамент всей почтовой доставки. Без SPF письма отклоняют или помечают спамом. Без DKIM подпись не проверяется, и письма тоже выглядят подозрительно. Проблема в том, что ошибку вы видите не сразу: изменения DNS распространяются часами, а то и сутками. dig — лучший друг при проверке: TXT-записи, DKIM-ключи, PTR — всё проверяется одной командой. Только не забывайте, что кэш DNS вашего провайдера может показывать устаревшие данные. DMARC — политика, что делать с письмами, которые не прошли SPF/DKIM. Я поставил p=quarantine. Потом почитал логи и понял, что некоторые письма всё равно уходят в спам. Переключил на p=reject — и количество жалоб упало. DMARC определяет судьбу писем, которые не прошли проверку: quarantine — в спам, reject — отклонить. Строгая политика отпугивает подделывателей и повышает доверие вашего домена. Но сначала стоит понаблюдать в quarantine, чтобы не потерять легитимные письма. PTR — обратная DNS-запись. Это настроил у хостинг-провайдера. Без неё многие почтовые серверы отклоняют письма. Вот тут самое больное. У моего провайдера настройка PTR была в личном кабинете, но применялась она только через тикет в поддержку. Я написал: «Установите PTR-запись 192.168.0.130 → mail.mysurik.ru». Ответили через сутки: «Готово». Проверил: dig -x 192.168.0.130 +short. И правда — вернуло mail.mysurik.ru. Ура. PTR связывает IP с именем — обратное SPF. Многие серверы проверяют: совпадает ли имя, которое представился сервер, с тем, что в PTR. Если нет — отклоняют. У провайдера это делается только через поддержку, и тут запаситесь терпением. Самое обидное — настройка DNS заняла неделю, потому что изменения распространяются не сразу, и я не мог проверить, правильно ли всё настроил. Сидишь, ждёшь, перепроверяешь через whatsmydns.net, а там то одно, то другое не видно.
Борьба со спамом — рутина, которая бесит. Первые письма с моего сервера улетали в спам даже на GMail. Оказалось, IP моего сервера был в чёрных списках (мой IP из диапазона, который использовался спамерами раньше). Пришлось писать запросы на удаление из базы Spamhaus, Barracuda, и ещё нескольких. Это заняло дня три. Spamhaus — самый строгий. Заявку рассматривали дольше всех. Для каждого нужно было доказать, что я не спамер: показать PTR-запись, SPF, DKIM. Я заполнил форму, приложил скриншоты DNS-записей. Через пару дней IP убрали из чёрного списка. Чёрные списки — это бич новых IP-адресов. Спамеры сжигают диапазоны, и добропорядочным владельцам потом приходится выбивать удаление. Spamhaus — самый влиятельный список: если вы в нём, многие серверы молча отклоняют ваши письма. Дело не в вас, а в репутации адреса. Доказывать приходится формами и скриншотами. Это нудно, но необходимо. После очистки списков доставка резко улучшилась. Но я заметил ещё одну вещь: Postfix по умолчанию не проверяет, что письма от легитимных отправителей. Я настрол её через opendkim — проверку подписей входящих писем. Без этого любой мог подделать мой домен и слать письма от моего имени. Проверить, не подделывают ли мой домен, можно через DMARC-отчёты. Я получаю их раз в день на почту и вижу, кто пытался отправить письмо якобы от меня. Один раз пришёл отчёт из Китая — кто-то пробовал слать спам с моего домена. DMARC отклонил. Я тогда выдохнул. DMARC-отчёты — это кристально честный взгляд на то, кто отправляет почту от вашего имени. Раз в день — сводка попыток. Китай, спам, подделки — всё фиксируется. Благодаря opendkim и DMARC я вижу, что мой домен защищён, и чужие письма отсекаются на этапе проверки подписи. Это спокойствие стоит затраченных вечеров. Ещё я поставил Postscreen — лёгкий спам-фильтр перед Postfix. Он проверяет, кто стучится в 25 порт, по нескольким тестам: делает ли клиент правильное SMTP-рукопожатие, не тупит ли. Настраивается парой строк в main.cf: postscreen_access_list = permit_mynetworks, postscreen_dnsbl_sites = zen.spamhaus.org, bl.spamcop.net, postscreen_dnsbl_threshold = 2. После включения Postscreen число соединений от спам-ботов упало с нескольких сотен в день до десятка. И нагрузка на сервер снизилась. Postscreen отсекает ботов ещё до того, как они успеют занять ресурсы Postfix. База в две строки в main.cf — и спам-боты почти перестают приходить. Нагрузка на CPU падает, логи чистятся, живётся спокойнее. Из сотен подключений остаётся десяток реальных. Рекомендую включить сразу после установки почты.
Про очереди и битые письма. Была ситуация: письмо ушло, а адресат не получил. Я полез в логи Postfix: tail -f /var/log/mail.log. Там увидел, что удалённый сервер отвечает: «550 Sender rejected — not yet authenticated». Оказалось, что на моём сервере была включена аутентификация SMTP, а я отправлял письмо через локальный скрипт без логина. Пришлось добавить авторизацию в скрипте. Или ещё: я отправил письмо с вложением 30 МБ, а GMail отказался его принимать, потому что лимит — 25 МБ. Postfix вернул письмо обратно в очередь и пытался отправить снова каждый час. Чистил очередь: postqueue -p — смотрим, что зависло, postsuper -d ALL — удаляем всё. Потом я вписал лимит в main.cf: message_size_limit = 26214400 — и проблема ушла. Логи Postfix почти всегда дают ответ. Ошибка «not yet authenticated» означает, что скрипт не прошёл авторизацию: пропишите логин и пароль в SMTP-сплитте. Вложение больше 25 МБ — это частое недоразумение: GMail принимает максимум 25 МБ, а почтовые серверы возвращают письмо в очередь. Очередь растёт, сервер долбится каждый час, письмо не уходит. Решение — либо резать вложения, либо лимит message_size_limit. Полезно заглядывать в очередь регулярно. Мониторинг и алерты. Я поставил проверку: раз в час скрипт пытается отправить тестовое письмо на Gmail и проверяет, дошло ли. Если нет — шлёт уведомление в Telegram. За месяц было три сбоя: два раза падал Dovecot (кончилась память), один раз Postfix переставал принимать соединения после перезагрузки сервера (забыл включить автозапуск). Скрипт простой: swaks —to myuser@gmail.com —server localhost — отправляет письмо, а потом через IMAP проверяет его наличие в отправленных. Если не находит — бьёт тревогу. swaks, кстати, крутая штука для тестирования SMTP, советую. Мониторинг отправки — это то, что делает почту предсказуемой. Раз в час проверочное письмо — и вы знаете, что доставка живёт. Три сбоя за месяц: Dovecot падал от нехватки памяти — решается увеличением лимита, Postfix не стартовал после ребута — автозапуск забыт. Всё это ловится вовремя благодаря автоматике.
Стоит ли игра свеч. Честно: если вам нужна почта для себя — проще взять Яндекс.Почту для домена (бесплатно) или Google Workspace (дёшево). Свой сервер — это геморрой. Но если вам нужен контроль над данными, и вы готовы возиться — iRedMail лучший выбор. Он собирает Postfix + Dovecot + Roundcube + спам-фильтр в одну работающую систему. Главное — терпение с DNS и репутацией IP. Сейчас моя почта работает стабильно уже три месяца. Письма доходят, спам-фильтр работает, DMARC-отчёты приходят. Я могу зайти в Roundcube с телефона, могу настроить любой почтовый клиент. Но если честно — я бы не стал проходить этот путь снова. Раз в месяц я вспоминаю эту эпопею, захожу на сайт Яндекса, вижу бесплатную почту для домена с их фильтрами, и думаю: «Может, ну его?» Но потом опять лезу в логи, смотрю, как всё работает, и остаюсь. Потому что это моё. И я знаю, что письма не читает никто, кроме меня. И блэклисты я чищу сам. И если что-то сломается — я знаю, где чинить. Это даёт странное чувство уверенности, даже если оно иррационально. Свой почтовый сервер — это инвестиция в знания больше, чем в инфраструктуру. Вы узнаёте, как работает электронная почта: DNS, SPF, DKIM, DMARC, очереди, спам-фильтры. Эти знания пригодятся в любой другой задаче. Готовы ли вы на неделю DNS-погружения ради собственного ящика? Если да — iRedMail станет интересным приключением. Если нет — есть готовые сервисы. Выбор за вами.