Mailcow — почтовый сервер на основе Dovecot, Postfix, soGo и другого программного обеспечения с открытым исходным кодом, который обеспечивает современный веб-интерфейс для администрирования и использования электронной почты.

Введение

Mailcow — позволяет с адресом любого вашего домена, сделать собственный почтовый ящик. К примеру, если вы владелец домена вида mydomain.ru, то сможете легко настроить себе почту по адресу mail@mydomain.ru или info@mydomain.ru.

В общем, любое имя до знака @, плюс ваш домен. Весь стек почтового сервера состоит из 18-ти контейнеров, поэтому ставить будем через docker-compose, так как это проще и этот метод описан в официальной документации.

Для работы данного сервиса необходимо удостовериться в возможности провайдера выдать Вам PTR-запись, и наличии у него открытого порта 25

Подготовка

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:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 14
reg.ru «MX» запись

Открываем порты в роутере

Для работы почтового сервера, необходимо открыть порты на роутере, указанные ниже:

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, это делается на вкладке «Переадресация«, подробнее на скриншоте:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 15
Открываем порты на роутере «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).

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 16
Вводим адрес почтового сервера и временную зону

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

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 17
Результат успешной генерации конфига

Мы сгенерировали конфиг, теперь нужно зайти в него, и поменять порты, так как по умолчанию там:

HTTP_PORT=80
HTTP_PORT=443

Эти порты заняты, производим замену. Открываем конфиг файл:

nano mailcow.conf

И меняем на свободные:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 18
mailcow.conf

Затем сохраняем CTRL+S и выходим CTRL+X.

Ни в коем случае не используем порты 8081, 9081, 65510

Настраиваем пути для директорий volumes

По умолчанию в docker-compose.yml контейнера mailcow, системные файлы лежат по 2-м путям.

  • ./data, то есть, в той директории, где лежит docker-compose.yml. На скриншоте ниже, этот путь будет отмечен на скриншоте как номер «1″.
  • Путь с названием контейнера на скриншоте подчеркнут как номер «2″. Его мы должны изменить на свой, пример замены на скриншоте подчеркнут как номер «3«.
Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 19
docker-compose.yml

Открываем в 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»:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 20
Удаляем все переменные в подвале docker-compose.yml файла

По итогу, сохраняем наши изменения CTRL+S и выходим CTRL+X.

Устанавливаем docker-compose mailcow

Запускаем установку всех связанных контейнеров командой:

docker-compose up -d

Устанавливается не быстро, все таки там 18 контейнеров.
Главное, чтоб не было ошибок, и в конечном итоге, все они успешно установились.

Далее, переходим в веб панель, по адресу, который мы указали в docker-compose.yml файле. Ваш ip:port. У меня это 192.168.1.9:880:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 21
Веб-панель mailcow, страница входа

Настройки панели управления mailcow

  • Настройки аккаунта администратора
  • Создание домена почты
  • Создание почтового ящика
  • Проверка работоспособности

Настройки аккаунта администратора

Для входа используем связку логин/пароль по умолчанию, как указано на официальной сайте проекта:

login:admin
password:moohoo

Вводим эти данные, нажимаем «Войти» и попадаем в панель управления.

Первым делом, необходимо сменить логин и пароль администратора.

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 22

Вверху, выбираем первую вкладку «Настройки доступа»

Далее:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 23

Затем справа видим «Действия», выбираем «Изменить»

Вводим желаемое «Имя пользователя» и «Пароль», далее «Подтверждения пароля (повтор)», а затем «Сохранить изменения»:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 24
Смена стандартных данных входа в панели Mailcow

Создание домена почты

Вверху, в основных вкладках видим «Конфигурация«, нажимаем.

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 25

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

Далее:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 26

На вкладке «Домены«

Затем:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 27

В меню справа, нажимаем на «Добавить домен«

В появившемся окне заполняем основные параметры. Основное, это «Домен», тот, что вы приобрели, в моем примере это myunraid.ru.

Все остальные параметры понятны по описанию, меняем по желанию и на свое усмотрение. Я лишь добавил «Описание«, остальное оставляю в стоковом виде.

Затем «Только добавить домен«.

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 28
Добавляем домен в Mailcow

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

Для начала:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 29

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

Затем:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 30

Жмем кнопку «Добавить почтовый аккаунт«

В появившемся окне, заполняем поле «Имя пользователя (часть адреса электронной почты слева)», туда мы вписываем желаемое имя почтового ящика, то есть то, что идет до знака «@«, в название вашего почтового ящика.

В моем примере, в конечном итоге создастся почта infomail@myunraid.ru. Вводим свой «Пароль«, затем «Подтверждение«, все остальные поля, опять же, интуитивно понятны, все настройки на ваше усмотрение.

Затем жмем кнопку «Добавить«:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 31
Создаем почтовый ящик

Проверяем результат

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

Приступим:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 32

В верхней вкладке нажимаем на «Приложение«. Во всплывающем окне «Webmail«

Мы попадаем на страницу почтового клиента soGo:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 33
Почтовый клиент soGo

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

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 34

Кликаем на карандаш и выбираем «Создать новое сообщение«

Оформляем тестовое письмо:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 35
Тестовое письмо почтового клиента soGo

Жмем отправку, ярлык самолетик-конверт Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 36

Проверяем у получателя. Скорее всего оно дошло, но попало в спам, чтобы это вылечить выполняем целый комплекс мероприятий ниже.

Настраиваем 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.

Пример нужного сертификата:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 39
Нужный нам файл сертификата

Добавляем 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

Перемещения будут выглядеть следующим образом:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 40
Окно файлового менеджера

Сертификаты действительны 3 месяца, поэтому лучше сделать скрипт и настроить их перемещение по крону.

Дополнительные записи DNS

Для того, чтоб письма наши не попадали в спам, нам нужно сделать дополнительные DNS записи.

Записи делаются на сайте вашего регистратора домена, в админ панели. Там же, где мы делали «MX» запись.

Из официально документации следует, что есть два типа настроек DNS, минимальные и полные.

Мы будем описывать полные настройки:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 41
Дополнительные записи DNS

Записи в кабинете администрирования домена

Переходим в личный кабинет, и делаем все эти записи.
Приведу скриншот двух записей, остальные нужно сделать также, по аналогии.

Записи DKIM, SPF and DMARC

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

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 44
Официальная документация, записи DKIM, SPF and DMARC

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

И последняя запись DKIM:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 47

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

Далее:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 48

«Глобальные настройки«, «ARC/DKIM ключи«

В поле «Домен/ы» пишем наш домен, «Длина ключа«, выбираем 1024, и жмем «Добавить«:

Если у вас, все аналогично, то значит все сделано верно и будет работать. Если возникают ошибки в статусах, то необходимо снова проверить записи DNS.

На TLSA не обращаем внимание, так как очень мало регистраторов доменов, предоставляют возможность сделать TLSA запись. Но и без нее, все будет отлично.

DNS записи включаются не сразу, для этого нужно время, в среднем это от 1 часа до 8 часов

Итог

Тестирование почты

Итак после всех манипуляций, мы можем посмотреть, насколько балов оценивается письмо с нашей почты.

Это можно сделать на специальном сервисе:

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 51
Тестирование почты

Копируем адрес почты, который нам выдали. Каждый раз он генерируется новый.
В примере — test-lho0gipfo@srv1.mail-tester.com, отправляем туда письмо со своего почтового ящика.

Всего, на бесплатной основе, можно отправить 3 письма в день, дополнительные проверки за дополнительную плату.

Итак, мы отправили письмо, и теперь жмем «Then check your score«.

Mailcow - поднимаем свой почтовый сервер на Unraid 6.8.3 52
Оценка проверки

Итак, сервис оценивает наше письмо как 10 балов из 10 возможных, единственная желтая галочка, говорит о слишком малом количестве символов в письме, в остальном все отлично.

Результат оценки означает, что наши письма с вероятностью в 99,9 процента, будут доходить до любого почтового сервера, именно во Входящие, а не в Спам.