Добавить docs/services/lxc212-mail/mailcow.md

This commit is contained in:
zailon 2026-04-16 11:23:38 +05:00
parent 754f4d3a5a
commit 39447cbf6e

View File

@ -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.