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:

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

Открываем порты на роутере “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

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

mailcow.conf

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

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

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

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

  • ./data, то есть, в той директории, где лежит docker-compose.yml. На скриншоте ниже, этот путь будет отмечен на скриншоте как номер “1″.
  • Путь с названием контейнера на скриншоте подчеркнут как номер “2″. Его мы должны изменить на свой, пример замены на скриншоте подчеркнут как номер “3“.
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”:

Удаляем все переменные в подвале 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, страница входа

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

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

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

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

login:admin
password:moohoo

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

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

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

Далее:

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

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

Смена стандартных данных входа в панели Mailcow

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

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

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

Далее:

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

Затем:

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

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

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

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

Добавляем домен в Mailcow

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

Для начала:

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

Затем:

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

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

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

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

Создаем почтовый ящик

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

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

Приступим:

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

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

Почтовый клиент soGo

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

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

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

Тестовое письмо почтового клиента 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, минимальные и полные.

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

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

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

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

Записи DKIM, SPF and DMARC

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

Официальная документация, записи DKIM, SPF and DMARC

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

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

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

Далее:

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

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

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

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

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

Итог

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

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

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

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

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

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

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

Оценка проверки

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

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