oakazanin/content/posts/mailserver-part-1-intro/index.md

623 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Почтовый сервер на Debian 12: полное руководство от установки до production. Часть 1 - Начало"
date: 2026-03-05
draft: false
description: "Зачем поднимать свой mail-сервер вместо Gmail. Анатомия почтового сервера: Postfix, Dovecot, антиспам, антивирус. Системные требования и чек-лист готовности."
tags: ["postfix", "dovecot", "smtp", "imap", "Self-hosting"]
categories: ["Системное администрирование", "Электронная почта"]
series: ["Почтовый сервер на Debian 12"]
series_order: 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 и делает отчеты.
**Показывает:**
- Сколько писем отправлено/получено
- Сколько отклонено
- Топ отправителей/получателей
- Ошибки доставки
- Статистику по доменам
**Использование:**
```bash
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:**
```bash
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 решение.
Поехали.
---