feat: 3 статьи о почтовом сервере + замена картинок

This commit is contained in:
Олег Казанин 2026-03-18 19:55:55 +00:00
parent 6fb1f08915
commit 4036fb658d
20 changed files with 2821 additions and 23 deletions

View File

@ -5,7 +5,6 @@ draft: false
description: "Универсальная шпаргалка по работе с Hugo блогом через Git с двумя окружениями. Префиксы коммитов, откаты, типичные ошибки и решения."
tags: ["git", "workflow", "hugo", "cheatsheet"]
categories: ["Шпаргалки"]
showComments: true
---
## Структура проекта

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 KiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 KiB

View File

@ -0,0 +1,623 @@
---
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 решение.
Поехали.
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 994 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 MiB

After

Width:  |  Height:  |  Size: 611 KiB

View File

@ -1,6 +1,6 @@
---
title: "Безопасный production-сервер на Debian 12: пошаговая настройка"
date: 2026-03-12
date: 2026-03-07
draft: false
description: "Пошаговое руководство по защите Debian 12 с нуля: настройка SSH, ufw, Fail2ban, sysctl, автообновлений и мониторинга. Базовая безопасность production-сервера за один час."
tags: ["debian", "linux", "security", "безопасность", "ssh", "ufw", "fail2ban", "sysctl", "linux-admin"]
@ -441,22 +441,6 @@ sudo ufw allow 2222/tcp comment 'SSH'
**Замени 2222** на свой порт из `sshd_config`.
Разрешаем базовые сервисы (добавь те, что нужны):
```bash
# HTTP/HTTPS (если будет веб)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# SMTP (если будет почта)
sudo ufw allow 25/tcp comment 'SMTP'
sudo ufw allow 587/tcp comment 'SMTP Submission'
# IMAP (если будет почта)
sudo ufw allow 143/tcp comment 'IMAP'
sudo ufw allow 993/tcp comment 'IMAPS'
```
**Не открывай порты, которые не нужны!** Добавишь потом по мере необходимости.
### Rate limiting для SSH
@ -481,9 +465,6 @@ sudo ufw show added
```
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
...
```
Включаем:
@ -514,8 +495,6 @@ Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
2222/tcp LIMIT Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
```
Включи автозапуск: