Mailcow – почтовый сервер на основе Dovecot, Postfix, soGo и другого программного обеспечения с открытым исходным кодом, который обеспечивает современный веб-интерфейс для администрирования и использования электронной почты.
Введение
Mailcow – позволяет с адресом любого вашего домена, сделать собственный почтовый ящик. К примеру, если вы владелец домена вида mydomain.ru, то сможете легко настроить себе почту по адресу [email protected] или [email protected].
В общем, любое имя до знака @, плюс ваш домен. Весь стек почтового сервера состоит из 18-ти контейнеров, поэтому ставить будем через docker-compose, так как это проще и этот метод описан в официальной документации.
Подготовка
PTR-запись
В настоящее время в сети пытаются оградить пользователя от спама, сервера общаются друг с другом используя множество механизмов. Одним из таких является PTR-запись.
Если коротко, то PTR-запись (или, как ее еще называют, Pointer) — противоположность A-записи для DNS.
DNS (Domain Name System) — это система связи между доменными именами и IP-адресами, к которым они принадлежат. То есть это понятные названия для существующих в сети сайтов. Чтобы не запоминать IP-адреса, как номера телефонов, были придуманы простые названия вида: google.com или myunraid.ru.
A-запись показывает взаимосвязь между адресом и названием. Указывает на то, какой IP скрывается за доменном. PTR-запись нужна для обратного. Она показывает доменное имя для указанного ip адреса.
Анти-спам фильтры делают проверку через обратные DNS, и у почтового сервера могут возникнуть сложности, если отсутствует корректная PTR-запись. В таком случае, почтовый сервер блокирует письмо. Чтобы корректно работал почтовый сервер, и ваши письма не летели в спам, нужно иметь корректную PTR-запись. Для получения PTR-записи необходимо обращаться к провайдеру.
Чтоб проверить свою PTR-запись, достаточно пройти на myip.ru.
Вверху будет ваш ip, а снизу имя хоста, то есть имя вашего почтового сервера.
У нас домен myunraid.ru, поэтому имя хоста, он же адрес почтового сервера, будет “sample.myunraid.ru“.
Для примера, сделаем его таким:
mail.myunraid.ru
MX запись
Также, нам нужно сделать “MX” запись в DNS, к нашему домену. Это будет тот же адрес нашего почтового сервера, т.е. mail.myunraid.ru.
MX-запись вид DNS-записи, предназначенный для регистрации почтовых серверов с использованием протокола SMTP. Именно с ее помощью почтовый агент отправителя определяет сервер, на который и необходимо выполнить доставку электронного письма.
Делается это на странице администрирования, вашего домена, в записях DNS:
Открываем порты в роутере
Для работы почтового сервера, необходимо открыть порты на роутере, указанные ниже:
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
SIEVE_PORT=419
На примере Keenetic, это делается на вкладке “Переадресация“, подробнее на скриншоте:

Установка контейнера
Установка необходимых контейнеров с использованием docker compose и их настройка будет включать 3 больших шага:
- Генерируем и настраиваем конфигурационный файл
- Настраиваем пути директорий volumes
- Устанавливаем docker-compose mailcow
Генерируем и настраиваем конфигурационный файл
Необходимо создать директорию, где будет храниться mailcow.
Переходим в appdata:
cd /mnt/user/appdata/
Создаем папку:
mkdir -p mailcow
Переходим в созданную папку:
cd /mnt/user/appdata/mailcow
Клонируем сюда установочные файлы mailcow, как написано в официальной документации:
git clone https://github.com/mailcow/mailcow-dockerized
Смотрим, что у нас появилось:
ls
Видим:
mailcow-dockerized
Переходим в нее:
cd /mnt/user/appdata/mailcow/mailcow-dockerized
Далее, нам нужно сгенерировать конфиг и внести свои изменения в параметры установки:
./generate_config.sh
В первой строке, нам предлагают ввести наш host name, то есть адрес нашего почтового сервера(mail.myunraid.ru).
Во второй строке временную зону (Europe/Moscow).

Промежуточный итог:

Мы сгенерировали конфиг, теперь нужно зайти в него, и поменять порты, так как по умолчанию там:
HTTP_PORT=80
HTTP_PORT=443
Эти порты заняты, производим замену. Открываем конфиг файл:
nano mailcow.conf
И меняем на свободные:

Затем сохраняем CTRL+S и выходим CTRL+X.
Настраиваем пути для директорий volumes
По умолчанию в docker-compose.yml контейнера mailcow, системные файлы лежат по 2-м путям.
- ./data, то есть, в той директории, где лежит docker-compose.yml. На скриншоте ниже, этот путь будет отмечен на скриншоте как номер “1″.
- Путь с названием контейнера на скриншоте подчеркнут как номер “2″. Его мы должны изменить на свой, пример замены на скриншоте подчеркнут как номер “3“.

Открываем в nano:
nano docker-compose.yml
Делаем замену везде. Где есть, к примеру mysql-vol-1, мы меняем на:
/mnt/user/appdata/mailcow/data-vol/mysql-vol-1
Далее mysql-socket-vol-1, меняем на:
/mnt/user/appdata/mailcow/data-vol/mysql-socket-vol-1
И так во всем docker-compose.yml файле.
Затем, идем в конец, и удаляем все переменные volumes и саму “volumes”:

По итогу, сохраняем наши изменения CTRL+S и выходим CTRL+X.
Запускаем установку всех связанных контейнеров командой:
docker-compose up -d
Устанавливается не быстро, все таки там 18 контейнеров.
Главное, чтоб не было ошибок, и в конечном итоге, все они успешно установились.
Далее, переходим в веб панель, по адресу, который мы указали в docker-compose.yml файле. Ваш ip:port. У меня это 192.168.1.9:880:

Настройки панели управления mailcow
- Настройки аккаунта администратора
- Создание домена почты
- Создание почтового ящика
- Проверка работоспособности
Настройки аккаунта администратора
Для входа используем связку логин/пароль по умолчанию, как указано на официальной сайте проекта:
login:admin
password:moohoo
Вводим эти данные, нажимаем “Войти” и попадаем в панель управления.
Первым делом, необходимо сменить логин и пароль администратора.

Вверху, выбираем первую вкладку “Настройки доступа”
Далее:

Затем справа видим “Действия”, выбираем “Изменить”
Вводим желаемое “Имя пользователя” и “Пароль”, далее “Подтверждения пароля (повтор)”, а затем “Сохранить изменения”:

Создание домена почты
Вверху, в основных вкладках видим “Конфигурация“, нажимаем.

Во всплывающем окне выбираем “Настройка почты“
Далее:

На вкладке “Домены“
Затем:

В меню справа, нажимаем на “Добавить домен“
В появившемся окне заполняем основные параметры. Основное, это “Домен”, тот, что вы приобрели, в моем примере это myunraid.ru.
Все остальные параметры понятны по описанию, меняем по желанию и на свое усмотрение. Я лишь добавил “Описание“, остальное оставляю в стоковом виде.
Затем “Только добавить домен“.

Создание почтового ящика
Для начала:

Переходим во вкладку “Почтовые ящики“
Затем:

Жмем кнопку “Добавить почтовый аккаунт“
В появившемся окне, заполняем поле “Имя пользователя (часть адреса электронной почты слева)”, туда мы вписываем желаемое имя почтового ящика, то есть то, что идет до знака “@“, в название вашего почтового ящика.
В моем примере, в конечном итоге создастся почта [email protected]. Вводим свой “Пароль“, затем “Подтверждение“, все остальные поля, опять же, интуитивно понятны, все настройки на ваше усмотрение.
Затем жмем кнопку “Добавить“:

Проверяем результат
Мы создали почтовый домен mail.myunraid.ru, добавили свой домен в веб-панель myunraid.ru, также создали к нему почтовый ящик [email protected], теперь можно зайти во встроенный soGo почтовый клиент и отправить тестовое письмо.
Приступим:

В верхней вкладке нажимаем на “Приложение“. Во всплывающем окне “Webmail“
Мы попадаем на страницу почтового клиента soGo:

Вводим наш “Логин” и “Пароль“, от почтового ящика.

Кликаем на карандаш и выбираем “Создать новое сообщение“
Оформляем тестовое письмо:

Жмем отправку, ярлык самолетик-конверт
Проверяем у получателя. Скорее всего оно дошло, но попало в спам, чтобы это вылечить выполняем целый комплекс мероприятий ниже.
Настраиваем SSL сертификаты для почтового домена
Для, того чтоб комфортно работать с нашим почтовым ящиком, нам могут потребоваться различные IMAP-клиенты, клиент мобильных устройств, web клиент, на OS Windows, macOS и прочие.
Для того, чтоб мы могли спокойно авторизоваться через наш почтовый сервер, должен быть действующий SSL сертификат.
Наши действия:
- Вывести в веб наш почтовый домен mail.myunraid.ru
- Ищем SSL сертификаты в папке NPM
- Добавляем SSL сертификаты в папку mailcow
Выводим в веб почтовый домен mail.myunraid.ru
Для этого воспользуемся Nginx Proxy Manager. Переходим в NPM, добавляем почтовый домен и запрашиваем сертификаты.
Добавлять нужно три адреса:
- mail.myunraid.ru
- autoconfig.myunraid.ru
- autodiscover.myunraid.ru
Поиск SSL сертификата в папке NPM
Этот момент настройки отличается от стандартного из документации mailcow, поэтому немного нужно “извратиться”.
Мы вывели наш почтовый домен в веб, получили для него SSL сертификаты, но они лежат только в папке NPM, а нам нужно, чтоб они были продублированы в директории mailcow.
В NPM сертификаты названы “по-своему”, с типом 456897.conf, т.е. “цифра.conf” и нужно найти, какая цифра у нашего домена mail.myunraid.ru.
Итак, идем в директорию NPM. По пути:
/mnt/user/appdata/npm/data/nginx/proxy_host/
Теперь надо методом перебора найти наш *.conf файл относящийся к почтовому домену.
По логике, самый последний запрашиваемый нами сертификат – это самое большое число в названии +.conf.
Пример нужного сертификата:

Добавляем SSL сертификаты в папку mailcow
Теперь, когда мы нашли, под каким номером, нужный нам сертификат, переходим в его папку, по пути.
У меня он, под номером “3“.
/mnt/user/appdata/npm/letsencrypt/archive/npm-3/
Во втором окне файл менеджера, открываем директорию в mailcow.
/mnt/user/appdata/mailcow/mailcow-dockerized/data/assets/ssl/
Теперь нужно переместить и переименовать файлы fullchain1.pem и privkey1.pem, в директорию */ssl, с заменой на файлы cert.pem, key.pem.
Через терминал, выполним:
Команда 1
cp /mnt/user/appdata/npm/letsencrypt/archive/npm-3/fullchain1.pem /mnt/user/appdata/mailcow/mailcow-dockerized/data/assets/ssl/cert.pem
Команда 2
cp /mnt/user/appdata/npm/letsencrypt/archive/npm-3/privkey1.pem /mnt/user/appdata/mailcow/mailcow-dockerized/data/assets/ssl/key.pem
Перемещения будут выглядеть следующим образом:

Сертификаты действительны 3 месяца, поэтому лучше сделать скрипт и настроить их перемещение по крону.
Дополнительные записи DNS
Для того, чтоб письма наши не попадали в спам, нам нужно сделать дополнительные DNS записи.
Записи делаются на сайте вашего регистратора домена, в админ панели. Там же, где мы делали “MX” запись.
Из официально документации следует, что есть два типа настроек DNS, минимальные и полные.
Мы будем описывать полные настройки:

Записи в кабинете администрирования домена
Переходим в личный кабинет, и делаем все эти записи.
Приведу скриншот двух записей, остальные нужно сделать также, по аналогии.
Записи DKIM, SPF and DMARC
В документации, также указываются записи DKIM, SPF и DMARC, это также очень важные записи, и нам нужно их сделать обязательно.

Опять же, в настройках администрирования домена, вносим эти записи.
Первая запись, это SPF “v=spf1 a mx ip4:вашIP ~all”
Вторая запись DMARC “v=DMARC1; p=quarantine; sp=quarantine”.
И последняя запись DKIM:

Меню “Конфигурация“, в выпадающем списке “Настройка сервера“
Далее:

“Глобальные настройки“, “ARC/DKIM ключи“
В поле “Домен/ы” пишем наш домен, “Длина ключа“, выбираем 1024, и жмем “Добавить“:
Если у вас, все аналогично, то значит все сделано верно и будет работать. Если возникают ошибки в статусах, то необходимо снова проверить записи DNS.
На TLSA не обращаем внимание, так как очень мало регистраторов доменов, предоставляют возможность сделать TLSA запись. Но и без нее, все будет отлично.
Итог
Тестирование почты
Итак после всех манипуляций, мы можем посмотреть, насколько балов оценивается письмо с нашей почты.
Это можно сделать на специальном сервисе:

Копируем адрес почты, который нам выдали. Каждый раз он генерируется новый.
В примере – [email protected], отправляем туда письмо со своего почтового ящика.
Всего, на бесплатной основе, можно отправить 3 письма в день, дополнительные проверки за дополнительную плату.
Итак, мы отправили письмо, и теперь жмем “Then check your score“.

Итак, сервис оценивает наше письмо как 10 балов из 10 возможных, единственная желтая галочка, говорит о слишком малом количестве символов в письме, в остальном все отлично.
Результат оценки означает, что наши письма с вероятностью в 99,9 процента, будут доходить до любого почтового сервера, именно во Входящие, а не в Спам.
Когда Я увидел скрин с кинетик гига то почувствовал родство. Но тут же появился вопрос. Получается ты не пользуешься dynDNS от кинетика? Ты видимо просто у регистратора домена всё настраиваешь, а на кинетике только пробрасываешь порты в нджинкс прокси который как раз стоит на анрейде? Интересно просто поподробнее этот момент узнать.
И Я ещё сталкивался с таким кейсом. Вот например Мне нужно в докер компоуз конкретному сервису помимо портов указать ещё статический айпи из интерфейса br0, как такое сделать? Я пробовал просто указать что б использовался этот интерфейс. но что бы конкретный айпи, так не получилось.
Так и есть.
1) Не нравятся мне домен от Кинетик, купил домен на рег.ру, 200р на год.
2) В роутере сделал переадресацию 80 и 443 порта на порты Нджинкс, конкретно у меня установлен Nginx Proxy Manager. (тут есть тема про его установку)
3) По поводу br0 в компоузе, это надо смотреть документацию компоуза, я сам не пытался, бридж устраивает.
Бридж то может устраивать, но есть одно большое НО.
Rspamd не видит реального IP входящих из-за бриджа, отсюда вопрос: нет возможности нормально фильтровать входящую почту
Кто-нибудь в курсе как заставить Outlook 2013 взаимодействовать с MailCow? В инете нарыл только что нужно поменять /opt/ mailcow-dockerized/data/web/inc/vars.inc.php ‘userEASforOutlook’ => ‘no’ на ‘userEASforOutlook’ => ‘yes’ Но что-то это не помогло.
А потом вы выставляете этот сервис в инет, и получаете open relay. ПОтому как на дефолтных настройках эта штука разрешает слать через себя письма кому угодно
Полный сток, никаких релеев..все норм.
https://myunraid.ru/wp-content/uploads/2023/01/OpenRelayTEST.png
Не совсем понял, после подкидывания сертификатов из NPM веб-интерфейс почтового сервера так и будет открываться с дописыыанием порта или просто по https пойдет
На unraid 6.11.5 в Community Applications не завезли NerdPack. После установки Compose.Manager из APPS в ответ на команду docker-compose up -d вываливается service “rspamd-mailcow” refers to undefined volume rspamd-vol-1: invalid compose project и ничего не происходит. Я тупенький, с докером вообще первый раз дело имею, прошу подсказать – как победить это безобразие