From 39447cbf6e0aa20ffdc0086dbfee0598aedda351 Mon Sep 17 00:00:00 2001 From: zailon Date: Thu, 16 Apr 2026 11:23:38 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20docs/services/lxc212-mail/mailcow.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/services/lxc212-mail/mailcow.md | 406 +++++++++++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 docs/services/lxc212-mail/mailcow.md diff --git a/docs/services/lxc212-mail/mailcow.md b/docs/services/lxc212-mail/mailcow.md new file mode 100644 index 0000000..c02bc1f --- /dev/null +++ b/docs/services/lxc212-mail/mailcow.md @@ -0,0 +1,406 @@ +# 📧 Почтовый сервер Mailcow (Olimp) + +**Дата обновления**: 16.04.2026 +**Сервер**: Olimp (Proxmox VE) +**Контейнер**: LXC 212 (mail) +**Домен**: zailon.ru +**Внешний IP**: 188.73.191.202 +**Внутренний IP**: 192.168.1.212 +**Путь к данным**: `/mnt/mailcow/mailcow-dockerized` + +--- + +## 📋 Содержание + +1. [Описание и архитектура](#1-описание-и-архитектура) +2. [Требования к ресурсам](#2-требования-к-ресурсам) +3. [Подготовка контейнера](#3-подготовка-контейнера) +4. [Установка Mailcow](#4-установка-mailcow) +5. [Запуск и первичная настройка](#5-запуск-и-первичная-настройка) +6. [Настройка DNS](#6-настройка-dns) +7. [Настройка Nginx Proxy Manager](#7-настройка-nginx-proxy-manager) +8. [Проброс портов на роутере](#8-проброс-портов-на-роутере) +9. [Настройка почтовых клиентов](#9-настройка-почтовых-клиентов) +10. [Полезные команды](#10-полезные-команды) +11. [Решение проблем](#11-решение-проблем) +12. [Безопасность и обслуживание](#12-безопасность-и-обслуживание) + +--- + +## 1. Описание и архитектура + +Mailcow — это готовый почтовый сервер на базе Docker, включающий: + +| Компонент | Назначение | +|-----------|-----------| +| **Postfix** | Приём и отправка писем (SMTP) | +| **Dovecot** | Доступ к почте (IMAP/POP3) | +| **SOGo** | Веб-интерфейс (почта, календарь, контакты) | +| **Rspamd** | Антиспам-фильтр | +| **ClamAV** | Антивирусная проверка | +| **Unbound** | Локальный DNS-резолвер | +| **MariaDB/Redis** | Базы данных и кэш | + +**Архитектура развёртывания**: +- Контейнер LXC 212 (Ubuntu) на хосте Proxmox VE +- Внутри LXC: Docker + Docker Compose +- Все сервисы Mailcow запускаются как Docker-контейнеры +- Данные хранятся в `/mnt/mailcow` (монтируемый том с HDD) + +--- + +## 2. Требования к ресурсам + +### Минимальные требования +| Ресурс | Значение | +|--------|----------| +| **CPU** | 2 ядра | +| **RAM** | 4 ГБ (рекомендуется 6 ГБ для стабильной работы ClamAV) | +| **Disk** | 40 ГБ (система + почта) | +| **Swap** | 2 ГБ | + +### Рекомендуемые настройки LXC +> **Выполняется на хосте Proxmox**: +```bash +pct set 212 -memory 4096 -swap 2048 -cores 2 +pct set 212 -features nesting=1,fuse=1 +``` + +--- + +## 3. Подготовка контейнера + +### 3.1 Проверка конфигурации +> **Выполняется на хосте Proxmox**: +```bash +pct config 212 +``` + +**Обязательные параметры в выводе**: +- `features: nesting=1,fuse=1` +- `unprivileged: 0` (или отсутствие этой строки) +- `lxc.cgroup2.devices.allow: a` + +### 3.2 Проверка Docker внутри контейнера +Подключись по SSH к `192.168.1.212` и проверь версии: + +```bash +docker --version +docker compose version +``` + +### 3.3 Остановка системного Postfix +Системный Postfix в Ubuntu может занимать порт 25: + +```bash +systemctl stop postfix +systemctl disable postfix +``` + +--- + +## 4. Установка Mailcow + +### 4.1 Клонирование репозитория +```bash +cd /mnt/mailcow +git clone https://github.com/mailcow/mailcow-dockerized +``` + +### 4.2 Генерация конфигурации +```bash +cd /mnt/mailcow/mailcow-dockerized +./generate_config.sh +``` + +**Ответы на вопросы скрипта**: +1. `Mail server hostname (FQDN)`: `mail.zailon.ru` +2. `Timezone`: `Asia/Yekaterinburg` (или твоя) +3. `Branch`: `1` (master — стабильная) +4. `IPv6`: `n` (если не используется) + +### 4.3 Правка docker-compose.yml для LXC +```bash +cd /mnt/mailcow/mailcow-dockerized +sed -i 's/ipv6nat:/#ipv6nat:/g' docker-compose.yml +sed -i 's/^ netfilter:/ #netfilter:/g' docker-compose.yml +``` + +--- + +## 5. Запуск и первичная настройка + +### 5.1 Загрузка образов и запуск +```bash +cd /mnt/mailcow/mailcow-dockerized +docker compose pull +docker compose up -d +``` + +### 5.2 Проверка статуса контейнеров +```bash +cd /mnt/mailcow/mailcow-dockerized +docker compose ps +``` + +**Ожидаемый результат**: все контейнеры в статусе `Up`. + +### 5.3 Первый вход в админку +1. Открой в браузере: `https://192.168.1.212` +2. Пропусти предупреждение о сертификате +3. Логин: `admin`, Пароль: `moohoo` +4. **Сразу смени пароль** в настройках профиля + +### 5.4 Добавление домена +1. В админке: **Configuration** → **Mail Setup** → **Domains** +2. Нажми **Add domain** +3. Введи: `zailon.ru` +4. Нажми **Add domain and restart SOGo** + +### 5.5 Создание почтового ящика +1. **Mail Setup** → **Mailboxes** → **Add mailbox** +2. Заполни: + - **Email**: `olimp@zailon.ru` + - **Name**: Имя владельца + - **Password**: надёжный пароль + - **Quota**: `5120` (5 ГБ) +3. Нажми **Add mailbox** + +--- + +## 6. Настройка DNS + +### 6.1 Получение записей из Mailcow +В админке: **Configuration** → **Mail Setup** → **Domains** → кнопка **DNS** + +### 6.2 Пример записей для zailon.ru +```dns +$ORIGIN zailon.ru. +mail IN A 188.73.191.202 +@ IN MX mail.zailon.ru. (pri=10) +@ IN TXT "v=spf1 mx a:mail.zailon.ru -all" +dkim._domainkey IN TXT "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkq..." +_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:olimp@zailon.ru" +autodiscover IN CNAME mail.zailon.ru. +autoconfig IN CNAME mail.zailon.ru. +_autodiscover._tcp IN SRV 0 0 443 mail.zailon.ru. +``` + +> **Важно**: Ключ DKIM берётся из админки Mailcow (кнопка DNS). Он уникальный для твоей установки. + +### 6.3 Обратная запись PTR +Обратись к провайдеру с запросом установить PTR для `188.73.191.202` → `mail.zailon.ru`. Без этого письма могут попадать в спам. + +--- + +## 7. Настройка Nginx Proxy Manager + +### 7.1 Создание Proxy Host +В админке NPM (LXC 201): + +| Параметр | Значение | +|----------|----------| +| **Domain Names** | `mail.zailon.ru` | +| **Scheme** | `https` | +| **Forward Hostname/IP** | `192.168.1.212` | +| **Forward Port** | `443` | +| **SSL Certificate** | Request a new SSL Certificate | +| **Force SSL** | ✅ ON | +| **Block Common Exploits** | ✅ ON | + +### 7.2 Advanced: Custom Nginx Configuration +```nginx +proxy_ssl_verify off; +proxy_ssl_server_name on; +``` + +Это необходимо, так как Mailcow использует самоподписанный сертификат внутри сети. + +--- + +## 8. Проброс портов на роутере + +| Имя | Внешний порт | Внутренний порт | Протокол | Назначение | +|-----|-------------|----------------|----------|-----------| +| mail_smtp | 25 | 25 | TCP | Приём почты от внешних серверов | +| mail_imap | 993 | 993 | TCP | Безопасный доступ к ящику (IMAP) | +| mail_smtp_ssl | 465 | 465 | TCP | Отправка почты (SMTP SSL) | +| mail_smtp_tls | 587 | 587 | TCP | Отправка почты (SMTP STARTTLS) | + +**IP устройства**: `192.168.1.212` + +--- + +## 9. Настройка почтовых клиентов + +### Параметры подключения +| Параметр | Значение | +|----------|----------| +| **Email** | `olimp@zailon.ru` | +| **Пароль** | пароль от ящика | + +### Входящая почта (IMAP) +- **Сервер**: `mail.zailon.ru` +- **Порт**: `993` +- **Безопасность**: SSL/TLS + +### Исходящая почта (SMTP) +- **Сервер**: `mail.zailon.ru` +- **Порт**: `465` (SSL/TLS) или `587` (STARTTLS) +- **Аутентификация**: Да, логин = email + +### Рекомендуемые клиенты +- **Android**: K-9 Mail (бесплатно, open source) или Aqua Mail (платно, красивый интерфейс) +- **iOS**: Родной клиент Почта или Spark +- **Desktop**: Thunderbird, Outlook + +--- + +## 10. Полезные команды + +### Переход в директорию Mailcow +```bash +cd /mnt/mailcow/mailcow-dockerized +``` + +### Проверка статуса сервисов +```bash +docker compose ps +``` + +### Просмотр логов +```bash +# Все сервисы +docker compose logs -f + +# Только postfix +docker compose logs -f postfix-mailcow + +# Только последние 50 строк +docker compose logs --tail=50 postfix-mailcow +``` + +### Перезапуск сервисов +```bash +# Один сервис +docker compose restart postfix-mailcow + +# Все сервисы +docker compose restart +``` + +### Полная перезагрузка +```bash +docker compose down +docker compose up -d +``` + +### Обновление Mailcow +```bash +./update.sh +``` + +### Проверка DNS +```bash +nslookup -type=MX zailon.ru +nslookup -type=TXT zailon.ru +``` + +### Проверка открытых портов +```bash +ss -tlnp | grep -E ':25|:443|:993' +``` + +--- + +## 11. Решение проблем + +### Письма не приходят извне +1. Проверь проброс портов на роутере (25, 993, 465) +2. Проверь DNS-записи: `nslookup -type=MX zailon.ru` +3. Проверь логи postfix: +```bash +cd /mnt/mailcow/mailcow-dockerized +docker compose logs --tail=100 postfix-mailcow | grep -E 'connect|NOQUEUE|reject' +``` + +### Ошибка "Waiting for DNS..." в Postfix +Проблема с Docker-сетью в LXC. Решение: +```bash +cd /mnt/mailcow/mailcow-dockerized +docker compose down +docker network rm mailcowdockerized_mailcow-network +docker compose up -d +``` + +### SOGo: "not allowed in state 1" +1. Очисти куки браузера +2. Или перезапусти SOGo: +```bash +cd /mnt/mailcow/mailcow-dockerized +docker compose restart sogo-mailcow +``` + +### Письма попадают в спам +1. Проверь наличие и корректность записей SPF, DKIM, DMARC +2. Убедись, что настроена PTR-запись у провайдера +3. Не отправляй массовые рассылки с нового домена + +### Не могу зайти по https://mail.zailon.ru +1. Проверь, что в NPM настроен прокси на `192.168.1.212:443` +2. Убедись, что в Custom Config добавлено `proxy_ssl_verify off;` +3. Проверь, что сертификат Let's Encrypt выпущен (статус в NPM) + +### ClamAV не обновляет базы (ошибка 403) +Известная проблема CDN ClamAV. Антивирус продолжит работать на локальных сигнатурах. Для обновления можно: +1. Подождать 24 часа (кулдаун) +2. Или отключить ClamAV в `mailcow.conf`, если не критично: +```ini +SKIP_CLAMD=y +``` +Затем: `docker compose up -d` + +--- + +## 12. Безопасность и обслуживание + +### Регулярные задачи +| Задача | Периодичность | Команда/Действие | +|--------|--------------|------------------| +| Проверка логов | Еженедельно | `docker compose logs --tail=100` | +| Обновление Mailcow | По выходу версии | `./update.sh` | +| Резервное копирование | Ежедневно | Настроить backup через Proxmox Backup Server | +| Проверка места на диске | Еженедельно | `df -h /mnt/mailcow` | + +### Резервное копирование +Рекомендуемый способ — через Proxmox Backup Server (PBS): + +1. В веб-интерфейсе Proxmox выбери контейнер 212 +2. **Backup** → **Backup now** +3. Режим: `snapshot`, хранилище: `olimpbkp` +4. Расписание: ежедневно в 03:00 + +### Обновление системы +```bash +apt update && apt upgrade -y +``` + +> **Перезапуск контейнера** (если обновилось ядро) выполняется на хосте Proxmox: +```bash +pct reboot 212 +``` + +### Мониторинг +Mailcow интегрируется с внешними системами мониторинга. Для Grafana (LXC 208): +1. Добавь источник данных Prometheus: `http://192.168.1.212:9900/metrics` +2. Импортируй дашборд Mailcow (ID: 13429) + +### Контакты для экстренных случаев +- Администратор: Zailon +- Сервер: Olimp (192.168.1.1) +- Контейнер почты: 212 (192.168.1.212) +- Документация: `mail.md` в репозитории конфигураций + +--- + +> **Примечание**: Все команды выполняются от имени root. \ No newline at end of file