В мире, где ваша деловая переписка зависит от чужих алгоритмов и сомнительной репутации общих IP-адресов, полный контроль — это не прихоть, а фундамент цифровой независимости. Нас годами убеждали, что управлять своей почтой — удел корпораций. Но это не так. Имея надежную платформу и правильные инструменты, вы можете стать хозяином своей коммуникации.

В этом руководстве мы пройдем весь путь: от развертывания сервера до отправки первого письма с настроенной и автономной почтовой системы. Никаких «черных ящиков» и компромиссов. Только вы, надежное «железо» и стопроцентный контроль.

Руководство написано клиентом Selectel — Игорем Бакулиным aka @loveprod, автором блога loveprod.

Фундамент. Подготовка площадки

90% будущих проблем с доставкой почты рождаются именно на этом этапе из-за спешки. Не торопитесь, вникните в каждый пункт. Правильно заложенное основание — залог стабильной работы.

Для развертывания почтового сервера мы будем использовать недорогой выделенный сервер с десктопным процессором. А именно — конфигурацию CL02. Это наш осознанный выбор, потому что для почтового сервера критически важны несколько вещей.

  • Стабильный IP-адрес с чистой репутацией. Вы начинаете с белого листа — и только ваши действия будут влиять на репутацию IP.

  • Полный контроль над ресурсами без CPU Steal и прочих «особенностей» виртуализации, что гарантирует стабильную и предсказуемую работу почтовых сервисов.

В качестве операционной системы при заказе сервера подойдет Debian 12 Bookworm или SelectOS.

В поисках 25-го порта

Внимание! Это важный раздел руководства. Здесь мы сталкиваемся с реальностью, с которой сталкивается каждый, кто решает поднять свой почтовый сервер.

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

Итак, чтобы обезопасить инфраструктуру от вредоносной сетевой активности, ограничен доступ к некоторым TCP/UDP-портам. Блокируется входящий и исходящий трафик в момент прохождения бордеров (пограничных маршрутизаторов) на границе интернет-сети Selectel. Для 25 TCP-порта блокируется только исходящий трафик. Для разблокировки следует создать заявку.

Настройка DNS — вашей глобальной адресной книги

Это сердце нашей будущей почтовой системы. Все действия производятся в панели управления Selectel, в разделе Продукты → DNS-хостинг. Для примера мы используем домен lservers.ru и IP-адрес 45.92.177.249. На этой основе разберемся с основными понятиями.

A-запись (адресная запись)

Сообщает миру, по какому IP-адресу находится наш почтовый сервер.

  • Имя: mail (чтобы получить полное доменное имя mail.lservers.ru)

  • Тип: A

  • Значение: 45.92.177.249

MX-запись (почтовый обменник)

Указывает, какой сервер отвечает за прием почты для нашего домена.

  • Имя: @ (указывает на сам домен lservers.ru)

  • Тип: MX

  • Приоритет: 10 (стандартное значение)

  • Значение: mail.lservers.ru. (точка в конце обязательна!)

PTR-запись (Reverse DNS) — паспорт вашего сервера

Это самый важный шаг для репутации. PTR-запись подтверждает, что ваш IP-адрес действительно принадлежит вашему серверу. Без нее большинство почтовых гигантов будут считать вас самозванцем. У многих провайдеров для этого нужно писать тикет и ждать. В Selectel вы получаете полный контроль.

  1. Переходим в панель управления Selectel.

  2. В верхнем меню выбираем Продукты → IP-адреса.

  3. Находим в списке наш IP-адрес 45.92.177.249.

  4. В меню (три точки) выбираем Добавить PTR.

  5. В открывшемся поле вводим полное имя нашего почтового сервера: mail.lservers.ru.

  6. Нажимаем Сохранить.

Все. Никаких ожиданий и тикетов. Мы сами подтвердили, кто мы такие. Именно за такую свободу и ценят профессиональную инфраструктуру.

Закалка сервера. Базовая безопасность

Сервер установлен. Теперь превратим его из «коробки с ОС» в защищенную платформу, готовую к работе. Это займет не более 15 минут.

Первый вход и обновление

1. Подключаемся к серверу по SSH.

ssh root@45.92.177.249

2. Первым делом меняем пароль root (команда passwd) и обновляем все пакеты до актуальных версий.

apt update && apt upgrade -y

30+ бесплатных курсов на IT-темы в Академии Selectel

Для начинающих и опытных специалистов.

Изучить →

Создание пользователя и настройка SSH

Почему это важно? Работать постоянно под root — все равно что носить ключи от всего города на поясе. Одно неверное движение — и катастрофа. Мы создадим пользователя с ограниченными правами и будем давать ему «суперсилу» только при необходимости.

# Создаем нового пользователя
adduser admin
# Добавляем его в группу sudo, которая дает право выполнять команды от имени root
usermod -aG sudo admin

Далее настроим вход по SSH-ключам. После того как вы скопировали свой ключ на сервер (ssh-copy-id admin@45.92.177.249), откройте файл конфигурации SSH:

sudo nano /etc/ssh/sshd_config

И приведите его к следующему виду (рекомендуемые параметры):

PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no # Убедитесь, что эта опция установлена в 'no' если PasswordAuthentication no

Перезапускаем сервис SSH: sudo systemctl restart sshd. Обязательно проверьте вход в новой сессии, прежде чем закрывать старую!

Установка Mailcow с помощью Docker

Мы не будем вручную настраивать десяток сложных программ. Мы будем использовать Mailcow: готовый набор сервисов, упакованных в изолированные контейнеры Docker. Это современный, безопасный и, что важно, легко обслуживаемый подход.

Освобождаем 25-й порт

Вы запускаете установку Mailcow и видите, что контейнер с почтовым сервисом постоянно перезагружается с ошибкой «port 25 is already allocated». Что это? Это «призрак». На свежеустановленной системе Debian часто уже работает системный почтовый сервис (обычно Postfix или Exim4), который нужен для отправки локальных уведомлений. Он занимает 25-й порт и не дает нашему Mailcow запуститься. Наша задача — найти и изгнать его.

# 1. Узнаем, кто занял порт. Флаги tulpn покажут все слушающие TCP/UDP процессы.
sudo ss -tulpn | grep ':25'

# Внимательно посмотрите на вывод. Вы увидите либо 'master' (это Postfix), либо 'exim4'.
# 2. Теперь изгоняем найденного призрака. Выполните ТОЛЬКО ОДНУ из следующих секций.

# -- Вариант А: Если команда ss показала процесс 'master' (Postfix) --
sudo systemctl stop postfix
sudo apt purge postfix -y

# -- Вариант Б: Если команда ss показала процесс 'exim4' --
sudo systemctl stop exim4
sudo apt purge exim4 -y

# 3. Контрольный выстрел. Убеждаемся, что порт свободен.
sudo ss -tulpn | grep ':25'
# Вывод должен быть пустым. Территория зачищена.

Установка Docker

Теперь, когда плацдарм чист, устанавливаем Docker и Docker Compose из официального репозитория.

# Устанавливаем необходимые утилиты
sudo apt install git curl -y

# Добавляем ключ и репозиторий Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

# Устанавливаем Docker, его компоненты и плагин Compose
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Установка Mailcow

Далее разворачиваем сам почтовый сервер. Все действия выполняем от имени вашего пользователя (admin).

# Переходим в директорию /opt для установки
cd /opt

# Клонируем последнюю версию Mailcow с GitHub
sudo git clone https://github.com/mailcow/mailcow-dockerized

# Переходим в созданную папку
cd mailcow-dockerized

# Запускаем скрипт генерации конфигурации
sudo ./generate_config.sh

Важный момент. Скрипт задаст несколько вопросов. Самый главный из них — Mail server hostname (FQDN). Сюда вы должны ввести точно такое же имя хоста, которое вы прописали в PTR-записи (в нашем примере это mail.lservers.ru). На остальные вопросы можно оставить значения по умолчанию, нажимая Enter.

После генерации конфигурации запускаем все контейнеры:

sudo docker compose pull
sudo docker compose up -d

Поздравляем! Ваш личный почтовый сервер запущен. Через пару минут откройте его веб-интерфейс по адресу https://mail.lservers.ru. Логин по умолчанию — admin, пароль — moohoo. Не забудьте сразу сменить пароль администратора!

Объявляем миру о себе. Финальная настройка DNS

Сервер работает, но мир о нем еще не знает. Возвращаемся в панель управления DNS в Selectel. Mailcow сам подскажет, что нужно добавить. Зайдите в его веб-интерфейс Администрирование → Конфигурация → DNS и скопируйте оттуда значения для следующих записей.

  • SPF-запись (TXT): «Список доверенных лиц». Говорит, каким серверам разрешено отправлять почту от вашего имени.

  • DKIM-запись (TXT): «Восковая печать». Добавляет к письмам цифровую подпись, подтверждающую подлинность и то, что их не вскрывали по пути.

  • DMARC-запись (TXT): «Инструкция для охранника». Говорит другим серверам, что делать с письмами, которые пришли якобы от вас, но без «пропуска» (SPF) или «печати» (DKIM).

Просто создайте в панели Selectel новые TXT-записи для вашего основного домена (@) и скопируйте в них значения, которые сгенерировал Mailcow.

После добавления записей может потребоваться от нескольких минут до нескольких часов на их «распространение» по миру. Проверить статус можно на сайте dnschecker.org.

Резервное копирование и обслуживание

Рабочий сервер без бэкапов — это бомба замедленного действия. Настроим автоматическое резервное копирование.

Локальные резервные копии

В Mailcow есть отличный встроенный скрипт для бэкапов. Он находится в папке helper-scripts.

# Переходим в рабочую директорию Mailcow
cd /opt/mailcow-dockerized/
# Запускаем полный бэкап. Архивы сохраняются в /var/lib/mailcow/backups
sudo ./helper-scripts/backup_and_restore.sh backup all

Автоматизация с помощью Cron

1. Заставим сервер делать бэкапы самостоятельно — например, каждую ночь в 2:30.

# Открываем редактор заданий cron от имени root
sudo crontab -e

2. Добавляем в конец файла следующую строку:

30 2 * * * /usr/bin/docker exec -t $(docker ps -qf name=acme-mailcow) /usr/local/bin/acme.sh --cron --home /var/lib/acme > /dev/null && cd /opt/mailcow-dockerized && /usr/local/bin/docker compose exec -T postfix-mailcow /usr/local/bin/pflogsumm_wrapper.sh && /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 7 > /dev/null 2>&1

Что делает эта строка? Она не только создает бэкап, но и выполняет служебные задачи Mailcow (обновление сертификатов, ротация логов), а также удаляет архивы старше 7 дней, чтобы не занимать место на диске.

Внешние бэкапы: профессиональный подход

Хранить бэкапы на том же сервере — рискованно. Идеальное решение — настроить их отправку в S3-совместимое облачное хранилище. Это обеспечит надежность и отказоустойчивость. Для этого можно использовать утилиту rclone и добавить команду на отправку в тот же cron-скрипт, сразу после создания локального бэкапа.

Обновление

Не забывайте регулярно обновлять и саму систему, и Mailcow. Для обновления Mailcow используется скрипт update.sh в его корневой директории.

# Переходим в рабочую директорию Mailcow
cd /opt/mailcow-dockerized/
# Запускаем скрипт обновления
sudo ./update.sh

Момент истины. Финальный тест

Все настроено. Идем на главный сайт для проверки почты: www.mail-tester.com.

  1. Сайт сгенерирует вам уникальный email. Скопируйте его.

  2. Зайдите в веб-клиент Mailcow (в меню Приложения → SOGo), предварительно создав себе почтовый ящик, и отправьте с него любое письмо на сгенерированный адрес.

  3. Вернитесь на сайт mail-tester и нажмите кнопку проверки.

Если вы все сделали правильно, то увидите заветный результат: 10/10. Это и есть доказательство того, что вы теперь — хозяин своей почты.

Эпилог: манифест контроля

Да, этот путь требует концентрации и решения неочевидных задач. Но взамен вы получаете ценные преимущества.

  • Полный контроль. Никто не отключит вашу почту и не потеряет ваши письма.

  • Независимую репутацию. Только вы отвечаете за чистоту своего IP-адреса.

  • Знания. Вы больше не беззащитный клиент, а специалист, который понимает, как это работает.

  • Гибкость. Вы можете создавать сколько угодно доменов и почтовых ящиков, не доплачивая за каждого пользователя.

Это не просто инструкция. Это доказательство того, что имея в руках надежный инструмент в виде выделенного сервера и зная правильную последовательность действий, вы можете построить инфраструктуру профессионального уровня.

Но есть важный нюанс. Если вы не готовы собирать почтовый сервер с нуля, есть готовый почтовый сервис Selectel. Отправка осуществляется через SMTP, а статистика доставки — через API. При этом в сервисе уже настроены проверка адресов по стоп-листам и спам-ловушкам, а доставляемость составляет 99,99%.

Комментарии (2)


  1. urvanov
    25.07.2025 13:26

    У меня когда-то на ноутбуке крутился персональный почтовый сервис. И даже работал. Тоже по какой-то статье из интернета создавал наподобие этой. PTR-запись (Reverse DNS) — вот эту запись только не осилил. Но почта всё равно ходила.


  1. iwram
    25.07.2025 13:26

    Господа. Когда делал тесты и решил попробовать ваш дистрибутив SelectOS, то по неизвестной мне причине postgresql и clickhouse показал худший результат по сравнению с Debian11 и Ubuntu22. Может, если выпустили свой дистрибутив сделайте сравнение с другими - будет интересно.