Docs/docs/services/lxc212-mail/mailcow.md

406 lines
14 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.

# 📧 Почтовый сервер 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.