# 📧 Почтовый сервер 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-безопасность-и-обслуживание) 13. [Настройка Nginx Proxy Manager](#13-настройка-nginx-proxy-manager) 14. [Создание почтового ящика](#14-создание-почтового-ящика) --- ## 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` в репозитории конфигураций --- ## 13 Настройка Nginx Proxy Manager > Делается один раз при первом запуске почтового сервера. ### Шаг 1: Открой админку NPM 1. В браузере перейди: `http://192.168.1.201:81` 2. Введи логин/пароль от NPM (если не менял — смотри в `group_vars/all.yml` или спроси у админа) ### Шаг 2: Создай новый Proxy Host 1. В меню слева выбери **Hosts** → **Proxy Hosts** 2. Нажми кнопку **Add Proxy Host** (внизу справа) 3. Заполни вкладку **Details**: | Поле | Значение | |------|----------| | **Domain Names** | `mail.zailon.ru` (нажми Enter после ввода) | | **Scheme** | `https` | | **Forward Hostname / IP** | `192.168.1.212` | | **Forward Port** | `443` | | **Cache Assets** | ❌ выключено | | **Block Common Exploits** | ✅ включено | | **WebSockets Support** | ❌ выключено | ### Шаг 3: Настрой SSL 1. Перейди на вкладку **SSL** 2. Выбери: **Request a new SSL Certificate** 3. Поставь галочки: - ✅ **Force SSL** - ✅ **HTTP/2 Support** - ✅ **I agree to the Let's Encrypt Terms of Service** 4. Поле **Email for Let's Encrypt** — введи твой email (для уведомлений) ### Шаг 4: Добавь настройки для HTTPS-проксирования 1. Перейди на вкладку **Advanced** 2. В поле **Custom Nginx Configuration** вставь: ```nginx proxy_ssl_verify off; proxy_ssl_server_name on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Security headers add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options SAMEORIGIN always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()" always; ``` ### Шаг 5: Ограничь доступ к админке (опционально, но рекомендуется) В том же поле **Custom Nginx Configuration**, **после** предыдущего блока, добавь: ```nginx # Ограничение доступа к админке /admin location ^~ /admin { allow 192.168.1.0/24; allow 188.73.191.202; allow 192.168.45.0/24; deny all; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options SAMEORIGIN always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()" always; proxy_pass https://192.168.1.212:443; proxy_ssl_verify off; proxy_ssl_server_name on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ``` > ⚠️ Если не добавляешь ограничение — просто пропусти этот блок. ### Шаг 6: Сохрани и проверь 1. Нажми **Save** внизу страницы 2. Подожди 10-20 секунд (пока NPM выпустит сертификат Let's Encrypt) 3. Открой в браузере: `https://mail.zailon.ru` 4. Если видишь страницу входа SOGo — всё работает ✅ --- ## 14. Создание почтового ящика ### Через веб-интерфейс Mailcow 1. Открой `https://mail.zailon.ru` в браузере 2. Нажми **«Войти»** (правый верхний угол) 3. Введи: - **Логин**: `admin` - **Пароль**: твой пароль администратора 4. В левом меню выбери: **Configuration** → **Mail Setup** → **Mailboxes** 5. Нажми зелёную кнопку **Add mailbox** 6. Заполни форму: | Поле | Что вписать | Пример | |------|------------|--------| | **Domain** | Выбери из списка | `zailon.ru` | | **Local part** | Часть до @ | `zevs` | | **Name** | Имя владельца | `Zevs` | | **Password** | Пароль ящика | `ТвойНадёжныйПароль123!` | | **Password (repeat)** | Повтори пароль | `ТвойНадёжныйПароль123!` | | **Quota** | Лимит места в МБ | `5120` (5 ГБ) | 7. Остальные поля не трогай 8. Нажми **Add mailbox** ✅ Ящик создан. Теперь можно: - Войти в почту: `https://mail.zailon.ru` → логин `zevs@zailon.ru` - Настроить клиент (см. раздел [Настройка клиентов](#9-настройка-почтовых-клиентов)) ## 🔍 Проверка после настройки ### 1. Проверь, что сертификат работает ```bash curl -I https://mail.zailon.ru ``` В ответе должна быть строка: ```text strict-transport-security: max-age=63072000; includeSubDomains; preload ``` ### 2. Проверь ограничение админки (если настраивал) - С ноутбука в локальной сети: `https://mail.zailon.ru/admin` → должна открыться форма входа - С телефона через мобильный интернет (без VPN): → должна быть ошибка `403 Forbidden` ### 3. Проверь почту - Открой `https://mail.zailon.ru` - Войди как `zevs@zailon.ru` - Отправь тестовое письмо самому себе → должно прийти мгновенно --- ## 🛠 Если что-то не работает | Проблема | Решение | |----------|---------| | `403 Forbidden` при входе в админку | Проверь, что твой IP есть в `allow` в блоке `location ^~ /admin` | | `502 Bad Gateway` | Убедись, что Mailcow запущен: `docker compose ps` в контейнере 212 | | Браузер ругается на сертификат | Подожди 1-2 минуты после сохранения в NPM, обнови страницу | | Не приходит письмо с внешнего ящика | Проверь проброс порта 25 на роутере и DNS-записи MX/SPF | Если не получается — посмотри логи NPM: в админке NPM → **Hosts** → **Proxy Hosts** → три точки у записи `mail.zailon.ru` → **Logs**. --- > **Примечание**: Все команды выполняются от имени root.