Перейти к основному содержимому

Почтовый сервер на Debian 12: полное руководство от установки до production. Часть 1 - Начало

Олег Казанин
Автор
Олег Казанин
Строю полезную инфраструктуру на Open Source стеке. Документирую грабли, чтобы вы на них не наступали.
Оглавление
Почтовый сервер на Debian 12 - Эта статья — часть серии.
Часть 1: Ты уже здесь

Решил поднять свой почтовый сервер? Отлично. Сейчас объясню, почему это одновременно лучшее и худшее решение, которое ты можешь принять для своей инфраструктуры.

Зачем вообще заморачиваться
#

Что говорят в интернете: “Gmail бесплатный и работает отлично, зачем изобретать велосипед?”

Как есть на самом деле:
#

Gmail и прочие публичные сервисы - это хорошо до тех пор, пока:

  • Тебя не смущает, что твою переписку читают для таргетинга рекламы
  • Ты не против того, что твой домен висит на чужой инфраструктуре
  • Тебе не критично, когда Google решит внезапно заблокировать аккаунт без объяснений
  • Ты готов платить за каждый ящик в корпоративном тарифе
  • Тебе норм, что лимиты на размер ящика устанавливает кто-то другой

Свой почтовый сервер дает:

  • Полный контроль - ты сам решаешь кто, что и как
  • Безлимитные ящики - сколько нужно, столько и создашь
  • Любой размер - ограничение только в железе
  • Свои правила - никаких внезапных “обновлений политики”
  • Прозрачность - ты знаешь где лежит твоя почта и кто к ней имеет доступ

Но есть нюанс.

Реальность: во что ты ввязываешься
#

Первые 48 часов после запуска:
#

Час 1: Сервер работает, письма ходят, ты доволен собой.

Час 3: Gmail отправляет твои письма в спам. Начинаешь разбираться с SPF.

Час 6: SPF настроен. Письма все равно в спаме. Погружаешься в DKIM.

Час 12: DKIM работает. Половина писем доходит. Открываешь документацию DMARC.

Час 24: Понимаешь, что твой IP попал в какой-то DNSBL. Гуглишь что это вообще такое.

Час 48: Письма наконец-то доходят до inbox. Пользователь жалуется: “Я не получил письмо от клиента”. Начинаешь копаться в логах.

Неделя 1: Обнаруживаешь, что сервер стал источником спама. Как это получилось - вопрос другой.

Месяц 1: Осознаешь, что забыл настроить бэкапы. Молишься, чтобы диск не “помер”.

Это нормально
#

Я не пугаю. Я готовлю к реальности. Почтовый сервер - это не “поставил и забыл”. Это инфраструктура, которая требует:

  • Начальной настройки (4-8 часов чистого времени)
  • Отладки репутации (первые 2-4 недели)
  • Регулярного мониторинга (15-30 минут в день)
  • Периодического обслуживания (2-4 часа в месяц)

Но когда оно работает - работает как часы.

Что ты получишь в итоге
#

Техническая часть:
#

ТВОЙ ПОЧТОВЫЙ СЕРВЕР
├─ Прием и отправка почты (Postfix)
├─ Доступ к ящикам через IMAP (Dovecot)
├─ Веб-интерфейс (RoundCube)
├─ Защита от вирусов (ClamAV)
├─ Защита от спама (SpamAssassin)
├─ Защита от взлома (Fail2ban)
├─ Шифрование (Let's Encrypt)
├─ Подписи писем (DKIM)
└─ Мониторинг и логи (Pflogsumm)

Функциональная часть:
#

Отправка почты:

  • С любого почтового клиента (Thunderbird, Outlook, Apple Mail, K-9)
  • Через веб-интерфейс из любой точки мира
  • С защищенным соединением (TLS)
  • С цифровой подписью (твои письма не подделать)

Прием почты:

  • От любых отправителей
  • С проверкой на вирусы
  • С фильтрацией спама
  • С пользовательскими правилами (Sieve)

Управление:

  • Неограниченное количество доменов
  • Неограниченное количество ящиков
  • Псевдонимы (алиасы)
  • Пересылки
  • Автоответчики
  • Квоты на размер (если нужно)

Безопасность:

  • Шифрование при передаче (никто не прочитает по пути)
  • Защита от подбора паролей
  • Блокировка спамеров
  • Проверка отправителей

Из чего это состоит: анатомия почтового сервера
#

Почтовый сервер - это не одна программа. Это экосистема из нескольких компонентов, каждый из которых делает свою работу.

Postfix - почтальон
#

Что делает: Принимает письма от отправителей и доставляет их получателям.

Как работает:

  1. Кто-то отправляет письмо на user@твой-домен.ru
  2. Postfix принимает письмо на порт 25
  3. Проверяет: “А должен ли я вообще принимать почту для этого домена?”
  4. Проверяет отправителя через кучу правил
  5. Если все ОК - передает письмо дальше (Dovecot или другому Postfix)
  6. Если что-то не так - отклоняет с кодом ошибки

Конфиг: /etc/postfix/main.cf - туда ты будешь лезть чаще всего.

Dovecot - хранитель ящиков
#

Что делает: Дает доступ к почтовым ящикам по протоколам IMAP/POP3.

Как работает:

  1. Почтовый клиент подключается к Dovecot (порт 143/993)
  2. Вводит логин и пароль
  3. Dovecot проверяет учетные данные
  4. Открывает доступ к почтовому ящику
  5. Клиент качает письма

Дополнительно:

  • Работает как LDA (Local Delivery Agent) - складывает письма в ящики
  • Поддерживает Sieve - пользовательские фильтры
  • Управляет квотами

Конфиг: /etc/dovecot/dovecot.conf и куча подфайлов в /etc/dovecot/conf.d/.

Amavis + ClamAV - санитары
#

Что делает Amavis: Прослойка между Postfix и антивирусом/антиспамом.

Что делает ClamAV: Сканирует вложения на вирусы.

Как работает:

  1. Postfix получает письмо
  2. Отправляет его в Amavis (порт 10024)
  3. Amavis передает в ClamAV
  4. ClamAV сканирует
  5. Если вирус найден - письмо в карантин
  6. Если чисто - Amavis возвращает в Postfix (порт 10025)
  7. Postfix доставляет получателю

Конфиг: /etc/amavis/conf.d/50-user

SpamAssassin - фильтр
#

Что делает: Определяет спам по куче признаков.

Как работает:

  1. Анализирует заголовки письма
  2. Проверяет тело письма
  3. Смотрит IP отправителя в черных списках (DNSBL)
  4. Применяет эвристические правила
  5. Использует Bayesian фильтр (обучаемый)
  6. Выставляет баллы
  7. Если баллов больше порога (обычно 5) - помечает как SPAM

Обучение:

  • Показываешь примеры спама → он учится
  • Показываешь примеры нормальной почты → он учится
  • Со временем точность растет

Конфиг: /etc/spamassassin/local.cf

Postgrey - вышибала
#

Что делает: Временно отклоняет письма от новых отправителей.

Как работает:

  1. Письмо приходит от нового сервера
  2. Postgrey: “Приходи через 5 минут”
  3. Легальный почтовый сервер вернется через 5 минут
  4. Спам-бот не вернется (ему некогда)
  5. При повторной попытке - пропускает

Эффективность: Отсекает ~70% спама вообще без анализа.

Конфиг: /etc/default/postgrey

Fail2ban - охрана
#

Что делает: Блокирует IP-адреса, которые брутфорсят(взламывают методом перебора парольных комбинаций) пароли.

Как работает:

  1. Следит за логами
  2. Видит неудачные попытки входа
  3. Считает количество попыток
  4. Если больше 3-5 за короткое время - бан IP через iptables
  5. Через час-два-пять(как настроишь) разбанивает (если не повторится)

Защищает:

  • SMTP AUTH (порт 25, 587)
  • IMAP/POP3 (порт 143, 993, 110, 995)
  • Веб-интерфейс RoundCube

Конфиг: /etc/fail2ban/jail.local

Let’s Encrypt - замок
#

Что делает: Выдает бесплатные SSL-сертификаты.

Зачем: Шифрование соединений между клиентом и сервером.

Как работает:

  1. Запускаешь Certbot
  2. Он доказывает, что домен принадлежит тебе
  3. Let’s Encrypt выдает сертификат на 90 дней
  4. Certbot автоматически продлевает каждые 60 дней

Без этого: Все пароли и письма идут открытым текстом по сети.

Конфиг: Автоматический, сертификаты в /etc/letsencrypt/live/

OpenDKIM - печать
#

Что делает: Подписывает исходящие письма цифровой подписью.

Зачем: Доказывает, что письмо действительно от твоего домена.

Как работает:

  1. Генеришь пару ключей (открытый + закрытый)
  2. Открытый публикуешь в DNS
  3. OpenDKIM подписывает каждое исходящее письмо закрытым ключом
  4. Получатель проверяет подпись открытым ключом из DNS
  5. Если подпись валидна - письмо не подделано

Без этого: Gmail/Outlook 100% отправят твои письма в спам.

Конфиг: /etc/opendkim.conf

RoundCube - веб-морда
#

Что делает: Веб-интерфейс для работы с почтой.

Зачем: Читать/писать письма через браузер без настройки почтового клиента.

Возможности:

  • Чтение/отправка писем
  • Адресная книга
  • Настройка фильтров (через плагин Sieve)
  • Смена паролей
  • Управление папками
  • Поиск по почте

Конфиг: /etc/roundcube/config.inc.php

PostgreSQL - база данных
#

Что делает: Хранит данные.

Что хранит:

  • Базу RoundCube (сессии, адресная книга, кэш)
  • Опционально: список пользователей и паролей
  • Опционально: псевдонимы и пересылки

Почему PostgreSQL, а не MySQL:

  • Строже к типам данных → меньше косяков
  • Лучше работает с UTF-8
  • Проще репликация
  • В Debian 12 отличная интеграция

Конфиг: /etc/postgresql/15/main/postgresql.conf

Apache + PHP
#

Что делает: Крутит RoundCube.

Apache: Веб-сервер, принимает HTTP-запросы.

PHP: Интерпретатор, выполняет код RoundCube.

Альтернатива: Nginx + PHP-FPM (быстрее, но сложнее, может в будущем рассмотрю и такой подход).

Почему Apache: Работает из коробки, тупо проще с той же эффективностью.

Конфиг: /etc/apache2/sites-available/

Pflogsumm
#

Что делает: Анализирует логи Postfix и делает отчеты.

Показывает:

  • Сколько писем отправлено/получено
  • Сколько отклонено
  • Топ отправителей/получателей
  • Ошибки доставки
  • Статистику по доменам

Использование:

pflogsumm /var/log/mail.log

Автоматизация: Настроишь cron - каждый день отчет на почту.

Netdata - приборная панель
#

Что делает: Мониторинг в реальном времени.

Показывает:

  • Загрузка CPU, RAM, Disk
  • Очереди Postfix
  • Соединения Dovecot
  • Запросы к PostgreSQL
  • Запросы к Apache
  • Температура (если есть датчики)

Интерфейс: Веб на порту 19999.

Потребление: ~100MB RAM.

Как все это работает вместе
#

Сценарий 1: Получение письма
#

1. example.ru отправляет письмо на user@твой-домен.ru
2. DNS: "MX-запись для твой-домен.ru → mail.твой-домен.ru"
3. Письмо приходит на твой сервер (Postfix, порт 25)
4. Postfix: "Проверю отправителя..."
   - SPF проверка
   - DNSBL проверка
   - Greylisting (Postgrey)
5. Postfix: "Отправлю на проверку в Amavis"
6. Amavis → ClamAV: "Есть вирусы?"
   ClamAV: "Чисто"
7. Amavis → SpamAssassin: "Это спам?"
   SpamAssassin: "3 балла из 5, норм"
8. Amavis возвращает в Postfix: "Все ок, доставляй"
9. Postfix → Dovecot (LMTP): "Положи в ящик user@твой-домен.ru"
10. Dovecot кладет в /var/spool/mail/твой-домен.ru/user/
11. Пользователь открывает RoundCube или Thunderbird
12. Dovecot (IMAP) отдает письмо клиенту

Сценарий 2: Отправка письма
#

1. Пользователь пишет письмо в RoundCube
2. RoundCube → Postfix (порт 587, SMTP Submission)
3. Postfix: "Проверю авторизацию..."
   - SMTP AUTH через Dovecot
4. Postfix: "Пользователь свой, подпишу письмо"
5. OpenDKIM добавляет DKIM-подпись
6. Postfix отправляет письмо на mail.example.ru
7. example.ru получает и проверяет:
   - SPF (в DNS твоего домена)
   - DKIM (подпись валидна?)
   - DMARC (политика домена)
8. example.ru: "Все проверки пройдены" → Inbox

Терминология: что есть что
#

MTA (Mail Transfer Agent)
#

Что: Программа, которая передает почту между серверами. Пример: Postfix, Sendmail, Exim.

MDA (Mail Delivery Agent)
#

Что: Программа, которая кладет письма в почтовые ящики. Пример: Dovecot (в режиме LDA/LMTP).

MUA (Mail User Agent)
#

Что: Почтовый клиент. Пример: Thunderbird, Outlook, RoundCube, K-9 Mail.

SMTP (Simple Mail Transfer Protocol)
#

Что: Протокол отправки почты. Порты: 25 (сервер-сервер), 587 (клиент-сервер с авторизацией).

IMAP (Internet Message Access Protocol)
#

Что: Протокол доступа к почте (с синхронизацией). Порты: 143 (открытый), 993 (с TLS). Особенность: Письма хранятся на сервере.

POP3 (Post Office Protocol)
#

Что: Протокол доступа к почте (скачивание). Порты: 110 (открытый), 995 (с TLS). Особенность: Письма скачиваются и удаляются с сервера. Статус: Устарел, не будем использовать.

TLS/SSL
#

Что: Шифрование соединения. Зачем: Чтобы пароли и письма не перехватили. Пример: HTTPS для почты.

SPF (Sender Policy Framework)
#

Что: DNS-запись, которая говорит “с этих IP можно слать почту от моего домена”. Пример: v=spf1 ip4:1.2.3.4 ~all Зачем: Защита от подделки отправителя.

DKIM (DomainKeys Identified Mail)
#

Что: Цифровая подпись письма. Как: Закрытый ключ на сервере, открытый в DNS. Зачем: Доказать, что письмо не подделано.

DMARC (Domain-based Message Authentication)
#

Что: Политика домена: что делать, если SPF или DKIM не прошли. Варианты: none (ничего), quarantine (в спам), reject (не принимать). Пример: v=DMARC1; p=quarantine; rua=mailto:dmarc@домен.ru

DNSBL (DNS-based Blackhole List)
#

Что: Черные списки IP-адресов спамеров. Примеры: zen.spamhaus.org, bl.spamcop.net. Как работает: Postfix спрашивает DNSBL: “Этот IP спамер?” → DNSBL отвечает.

Greylisting
#

Что: Временная задержка писем от новых отправителей. Логика: Спам-боты не повторяют попытки, легальные серверы - повторяют. Задержка: 5 минут (обычно).

Relay
#

Что: Пересылка почты через промежуточный сервер. Пример: Твой сервер → SMTP провайдера → получатель. Зачем: Если твой IP в блэклистах или нет белого IP.

Open Relay
#

Что: Сервер, который пересылает почту от кого угодно. Статус: ЗЛО. Мгновенно попадешь в блэклисты. Защита: SMTP AUTH + правильные restrictions.

Maildir vs Mbox
#

Mbox: Все письма в одном файле. Maildir: Каждое письмо - отдельный файл. Используем: Maildir (надежнее, быстрее).

Sieve
#

Что: Язык для создания почтовых фильтров. Пример: “Если тема содержит ‘счет’, переложить в папку ‘Финансы’”. Управление: Через плагин managesieve в RoundCube.

Quota
#

Что: Ограничение на размер почтового ящика. Пример: 5GB на пользователя. Наш случай: Без ограничений (или устанавливаешь сам).

Системные требования
#

Минимальная конфигурация (1-50 пользователей):
#

CPU:  2 ядра (любой современный процессор)
RAM:  2 GB
Disk: 20 GB (система) + объем почты
      SSD рекомендуется
Net:  Стабильное подключение
      Белый IP (желательно)
      Открытые порты: 25, 587, 143, 993, 80, 443

Рекомендуемая конфигурация (50-200 пользователей):
#

CPU:  4 ядра
RAM:  4 GB
Disk: 50 GB (система) + объем почты
      SSD обязательно
Net:  100 Мбит/с
      Белый статический IP

Оптимальная конфигурация (200-500 пользователей):
#

CPU:  8 ядер
RAM:  8 GB
Disk: 100 GB (система) + объем почты
      NVMe SSD
Net:  1 Гбит/с
      Резервный канал

Расчет дискового пространства:
#

Средний пользователь: 1-5 GB в год
Активный пользователь: 10-20 GB в год
Очень активный: 50+ GB в год

Пример на 100 пользователей:
  100 × 5 GB = 500 GB
  + запас 20% = 600 GB
  + система 50 GB = 650 GB
  
Итого: диск на 1 TB с запасом

Что нужно ДО начала установки
#

1. Домен
#

Зарегистрированный домен с доступом к управлению DNS.

Пример: example.ru

2. Сервер
#

VPS/Dedicated с Debian 12 и белым IP.

Требования:

  • Root-доступ
  • Чистая установка Debian 12
  • Статический IP
  • Обратная DNS (PTR) настроена на твое имя хоста

Проверка PTR:

host твой-IP
# Должно вернуть: mail.example.ru

3. DNS-записи (настроишь в процессе)
#

A-запись:

mail.example.ru.  IN  A  твой-IP

MX-запись:

example.ru.  IN  MX  10  mail.example.ru.

SPF-запись:

example.ru.  IN  TXT  "v=spf1 mx ~all"

DKIM и DMARC - настроим позже.

4. Открытые порты
#

Обязательно:

  • 25 (SMTP) - прием почты от других серверов
  • 587 (Submission) - отправка от клиентов
  • 143 (IMAP) - доступ к ящикам
  • 993 (IMAPS) - IMAP с TLS
  • 80 (HTTP) - для Let’s Encrypt
  • 443 (HTTPS) - для RoundCube

Опционально:

  • 22 (SSH) - для администрирования
  • 19999 (Netdata) - для мониторинга

5. Время
#

Реально необходимое:

  • Установка и базовая настройка: 4-6 часов
  • Отладка доставки в Gmail/Outlook: 2-4 часа
  • Настройка веб-интерфейса: 1-2 часа
  • Тестирование и доработка: 2-4 часа

Итого: Закладывай полноценные выходные.

Проверка готовности
#

Прежде чем начинать, убедись:

☐ Есть зарегистрированный домен
☐ Есть доступ к управлению DNS
☐ Есть VPS/Dedicated с Debian 12
☐ Есть root-доступ к серверу
☐ Настроен PTR для твоего IP
☐ Открыты необходимые порты
☐ Есть понимание, сколько времени займет
☐ Есть план резервного копирования
☐ Есть готовность разбираться в проблемах
☐ Прочитал эту статью до конца

Если все пункты отмечены - можешь начинать.

Что дальше
#

В следующей части разберем установку и базовую настройку Postfix + Dovecot - сердца почтового сервера.

Ты получишь работающую систему приема и отправки почты. Без защиты, без веб-интерфейса, без красивостей - но работающую.

А потом будем навешивать остальное: антивирус, антиспам, шифрование, подписи и все остальное, что превращает голый сервер в production-ready решение.

Поехали.


Почтовый сервер на Debian 12 - Эта статья — часть серии.
Часть 1: Ты уже здесь

Статьи по теме