Разворачиваем Mailu за вечер: от пустого VPS до первого письма — пошаговый регламент ITfresh

Пошаговая установка Mailu на VPS: от пустого сервера до первого письма

Что готовим до установки: чек-лист из шести пунктов

Меня зовут Евгений Семёнов, я технический директор ITfresh. Это наш внутренний регламент, по которому инженеры компании ставят Mailu клиентам. Я специально написал его так, чтобы человек с базовыми навыками Linux повторил всё за вечер, а тот, кто возиться не хочет, — понял объём работ и что именно он заказывает у подрядчика.

Главная ошибка новичков — сразу кидаться устанавливать сервер, а потом неделю ловить проблемы с доставляемостью. Девяносто процентов боли снимается подготовкой. Наш чек-лист из шести пунктов, без которых мы вообще не начинаем:

Чек-лист подготовки к установке Mailu: VPS, чистый IP, порт 25, домен, PTR, Docker
Шесть пунктов, которые мы закрываем до первой команды на сервере
  1. VPS нужного размера. Наш типовой тариф под Mailu — 2 vCPU, 2 ГБ RAM, 40 ГБ SSD. Для 10–30 ящиков этого достаточно, если не включать ClamAV (о нём ниже). Диск берём с запасом на рост почты.
  2. Чистый IP-адрес. Это критично. До покупки VPS проверяем адрес по чёрным спискам (DNSBL): если он уже засвечен предыдущим арендатором в спам-базах, почта будет улетать в спам с первого дня. Проверка занимает минуту, а спасает недели репутационных мучений. Не поленитесь запросить у хостера конкретный IP заранее.
  3. Открытый исходящий порт 25. Половина провайдеров закрывает 25-й порт по умолчанию — это анти-спам-мера. Без него сервер не сможет отправлять почту наружу. Порт открывается тикетом в поддержку хостера; иногда просят объяснить, зачем. Закладывайте на это день ожидания.
  4. Домен и доступ к DNS-зоне. Нужна возможность самостоятельно править записи MX, A, TXT у регистратора или DNS-провайдера домена.
  5. PTR-запись (обратная зона). Настраивается на стороне хостера: IP должен разрешаться в hostname вашего почтового сервера. Без корректного PTR крупные почтовики (Gmail, Яндекс) режут доставляемость.
  6. Docker и compose-плагин. На свежей Ubuntu 24.04 ставится официальным скриптом за пару минут.

Про порт 25 отдельно. Это пункт номер один по частоте «почему не отправляется почта» у тех, кто ставил сам. Сервер поднялся, webmail открывается, письма внутри ходят — а наружу не уходят. Причина почти всегда одна: закрытый исходящий 25-й у хостера. Проверьте это ещё до установки командой с сервера, а не после.

Генерируем конфигурацию на setup.mailu.io

Открываем в браузере официальный конфигуратор setup.mailu.io и отвечаем на вопросы мастера. Разберу ключевые развилки — именно на них новички ошибаются.

Ветка — 2024.06

Выбираем стабильную ветку 2024.06. Никакого master на боевом сервере клиента — это правило без исключений.

Домен и hostname

Главный почтовый домен — например company.ru. Hostname сервера — mail.company.ru. Это тот адрес, который будет фигурировать в MX, в PTR и в настройках почтовых клиентов; выбирайте его один раз и навсегда.

Webmail: Roundcube или Snappymail

Обоим клиентам мы доверяем, но по опыту раздаём по-разному. Бухгалтерии и возрастным сотрудникам ставим Roundcube — он максимально похож на привычную «толстую» почту, с адресной книгой и фильтрами. Молодой команде, которой важнее скорость и мобильный вид, — Snappymail: он легче и не тащит свою базу данных. Ошибиться тут нельзя, оба хороши.

Антивирус ClamAV — почему на 2 ГБ мы его НЕ включаем

А вот здесь принципиальное решение. ClamAV держит в памяти больше гигабайта сигнатур постоянно, вне зависимости от того, идёт почта или нет. На сервере с 2 ГБ RAM это означает, что система начнёт свопиться при первой же нагрузке. Поэтому на маленьких серверах мы ClamAV отключаем, а защиту от вредоносных вложений строим иначе: Rspamd режет типовой спам с малварью, а на уровне политики мы блокируем опасные типы вложений (исполняемые файлы, скрипты). Если клиенту принципиально нужен антивирус на почте — берём VPS от 4 ГБ и закладываем это в смету заранее.

Правим mailu.env руками: наши шесть обязательных правок

Конфигуратор отдаёт два файла: docker-compose.yml и mailu.env. Первый мы обычно не трогаем, а вот в mailu.env всегда вносим одни и те же правки. Разберу каждую с объяснением, что будет, если оставить дефолт.

ПараметрЧто ставимЗачем
TZEurope/MoscowИначе метки времени в логах и заголовках писем будут в UTC — путаница при разборе инцидентов
SUBNETсвоя подсетьДефолтная подсеть контейнеров может пересечься с локальной сетью клиента (VPN, офис) — тогда часть маршрутов ломается
MESSAGE_SIZE_LIMIT50 МБДефолт мал для бухгалтерии с тяжёлыми сканами и архивами документов
AUTH_RATELIMITужесточаемОграничение попыток входа — базовая защита от перебора паролей по IMAP/SMTP
SECRET_KEYслучайные 16 символовКлюч шифрования сессий; дефолтный или пустой — дыра в безопасности
DEFAULT_QUOTAпод задачуКвота ящика по умолчанию, чтобы один пользователь не забил весь диск

Ещё раз про SECRET_KEY: это не формальность. Он подписывает пользовательские сессии, и оставлять его значением по умолчанию нельзя категорически. Генерируем случайную строку и вставляем один раз.

docker compose up -d и первый вход в админку

Заливаем оба файла в отдельный каталог на сервере (мы держим их в /mailu), переходим туда и запускаем стек:

cd /mailu
docker compose up -d
docker compose ps

Последняя команда покажет список контейнеров. Ждём, пока все перейдут в состояние healthy — это занимает минуту-две на первом запуске, пока скачиваются образы и инициализируются сервисы. Пока не все healthy — в админку не идём.

Теперь создаём первого администратора. Пароль задаём стойкий:

docker compose exec admin flask mailu admin admin company.ru 'СтойкийПарольСюда'

После этого админка доступна по адресу https://mail.company.ru/admin, а веб-почта — по https://mail.company.ru/webmail.

Типовая ошибка — права на каталог. Если контейнеры падают в рестарт-петлю сразу после запуска, первым делом смотрим права на каталог с данными /mailu. Docker должен иметь возможность писать в тома; при неверных правах Dovecot и Postfix не стартуют. Лечится корректной выдачей прав на подкаталоги данных.

DNS-записи: то, от чего зависит доставляемость

Сервер поднялся, но без правильных DNS-записей ваша почта будет улетать в спам или не доходить вовсе. Это самая ответственная часть. Разберу по записям.

Схема DNS-записей для почтового сервера: MX, A, SPF, DKIM, DMARC, PTR
Пять записей в зоне плюс PTR у хостера — фундамент доставляемости

A и MX

Запись A для mail.company.ru указывает на IP сервера. Запись MX для домена company.ru указывает на mail.company.ru с приоритетом 10 — этим вы говорите всему миру, куда доставлять почту вашего домена.

SPF

TXT-запись, разрешающая вашему серверу отправлять почту от имени домена. Типовое значение — разрешить IP сервера и запретить всё остальное жёстким -all. Без SPF письма помечаются как подозрительные.

DKIM — генерируется кнопкой в админке

Приятная особенность Mailu: ключ DKIM генерируется прямо в админ-панели одной кнопкой в настройках домена. Панель тут же показывает готовую TXT-запись, которую нужно скопировать в DNS. DKIM криптографически подписывает исходящие письма — это второй столп доставляемости после SPF.

DMARC

TXT-запись, которая говорит принимающим серверам, что делать с письмами, не прошедшими SPF и DKIM. Начинаем с политики p=quarantine (в спам) и почтового адреса для отчётов; на жёсткий p=reject переходим позже, убедившись, что легитимная почта проходит.

PTR у хостера

Обратная запись: IP должен разрешаться в mail.company.ru. Настраивается в панели хостера, а не в зоне домена. Крупные почтовики без корректного PTR почту либо режут, либо отклоняют.

Проверить каждую запись после настройки можно утилитой dig:

dig MX company.ru +short
dig TXT company.ru +short          # SPF
dig TXT dkim._domainkey.company.ru +short
dig TXT _dmarc.company.ru +short
dig -x IP_СЕРВЕРА +short           # PTR

Let's Encrypt из коробки

TLS-сертификат — ещё одно место, где Mailu приятно удивляет. В mailu.env достаточно указать режим TLS_FLAVOR=letsencrypt, и контейнер front сам получит сертификат и будет автоматически его продлевать. Ничего похожего на ручную возню с certbot, cron-задачами и перезапуском сервисов — всё делается внутри.

Единственные штатные грабли — конфликт по 80-му порту. Валидация Let's Encrypt требует, чтобы порт 80 был свободен и доступен снаружи. Если на том же сервере уже стоит какой-то reverse-proxy или веб-сервер, слушающий 80-й, — сертификат не получится. Решение: либо освободить 80-й порт под Mailu, либо развернуть Mailu за существующим прокси по документированной схеме. На выделенном под почту VPS этой проблемы обычно нет.

Совет: дайте DNS-записи A для mail.company.ru распространиться до запуска стека. Let's Encrypt проверяет домен через публичный DNS, и если запись ещё не разошлась, первая попытка получить сертификат провалится, а повторные будут ограничены лимитами. Мы просто заводим A-запись первой, ждём, и только потом поднимаем контейнеры.

Тестируем как параноики: наш приёмочный протокол

Сервер запущен, но сдавать клиенту его рано. У нас есть приёмочный протокол, который мы проходим целиком перед тем, как сказать «работает».

  1. mail-tester.com на 10/10. Отправляем письмо на сгенерированный адрес сервиса и проверяем оценку. Всё, что ниже 10/10, разбираем по пунктам отчёта: чаще всего это недокрученный SPF, DKIM или PTR.
  2. Письма на Gmail, Яндекс и Mail.ru. Отправляем на каждый из трёх и открываем исходный текст письма: в заголовках Authentication-Results должно стоять spf=pass, dkim=pass, dmarc=pass. Это объективная проверка, а не «вроде дошло».
  3. Обратная доставка. Отвечаем с внешних адресов на наш сервер — письма должны приходить и попадать в нужный ящик.
  4. Проверка на open relay. Пробуем с постороннего хоста отправить через наш 25-й порт письмо чужому адресату. Сервер обязан отказать. Открытый релей — это репутационная катастрофа и почти гарантированное попадание в спам-базы.
  5. Скорость webmail. Просто заходим в Roundcube или Snappymail и убеждаемся, что интерфейс отзывчив — на 2 ГБ он должен летать.

Пункт про open relay пропускать нельзя. Сервер, который пересылает чужую почту, за сутки попадает во все чёрные списки, и вытащить IP оттуда потом сложно и долго. Проверка занимает минуту, а страхует от катастрофы.

Хронометраж и смета

Сколько это реально занимает и стоит. У нашего инженера чистое рабочее время на развёртывание Mailu — около 3,5 часов, и это с учётом ожидания распространения DNS и прохождения приёмочного протокола. Основные «паузы» — не работа, а ожидание: тикет на открытие 25-го порта у хостера, распространение DNS-записей, получение сертификата. Поэтому по календарю установка нередко растягивается на день-полтора, хотя рук в неё вложено немного.

Экономика хостинга. VPS уровня 2 vCPU / 2 ГБ / 40 ГБ SSD у российских провайдеров стоит ориентировочно 400–900 ₽ в месяц. К этому стоит заложить:

  • рост диска на второй год — почта не удаляется, ящики распухают, место придётся докупать;
  • резервное хранилище под бэкапы — держать бэкап на том же диске, что и данные, нельзя, это самообман;
  • час-другой обслуживания в месяц: обновления ветки, контроль очереди, реакция на алерты.

Итого своя почта на Mailu обходится в разы дешевле подписки за каждого сотрудника — но при условии, что кто-то за ней присматривает. Если своего админа нет, эту роль берём мы: сервер остаётся у клиента, а эксплуатация — на нас.

Это вторая статья серии про Mailu. В следующей я подробно разберу миграцию: как мы перенесли 28 ящиков с Яндекс 360 на свой Mailu без потери писем и с параллельным периодом работы двух систем. А если вы хотите не разбираться самостоятельно, а получить готовую почту под ключ — напишите мне в Telegram @ITfresh_Boss или позвоните +7 903 729-62-41. Развернём, настроим, перенесём и возьмём на сопровождение.

Развернём почтовый сервер под ключ

Подберём площадку, поставим и настроим Mailu, доведём доставляемость до 10/10 и возьмём на сопровождение. Свои серверы в дата-центре МТС, 15+ лет практики.

✈️ Telegram @ITfresh_Boss 📞 +7 903 729-62-41
#установка Mailu #Mailu docker-compose #setup.mailu.io #mailu.env параметры #SPF DKIM DMARC #свой почтовый сервер на VPS #Mailu инструкция
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.