Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- На хостинге должна быть предусмотрена возможность менять PTR запись для своего домена
- Доменное имя. Можно бесплатный домен или поддомен
- Установленный Docker + Docker-Compose
- 30 - 60 минут времени
В двух словах про Mailcow
Mailcow обладает каким то невообразимым количеством настроек, в которых с непривычки можно легко заблудиться. В качестве основных настроек тут есть: добавление и администрирование почтовых доменов, создание и редактирование почтовых ящиков, управление ключами DKIM и другими.
Дополнительно присутствуют такие вещи как: управление через API, настройка входа 2fa, конфигурация мини-фаервола fail2ban, управление квотами / очередями и каратнином. Конфигурация и статистика Rspamd. Роутинг. Настройки для системных оповещений. Логи всех выполняемых сервисов. Алиасы и Catch-All фильтры. Система напоминающая создание cron заданий. Фильтры. Перезапись адресов. Политики TLS.
Одним словом настроек очень много и все их влепить в 1 мануал явно не получится. Однако базовую настройку с нуля до инбокса в Gmail, мы все таки сделаем, с небольшими бонусами по типу настройки Catch-All фильтра.
Стоит так же обязательно напомнить что Mailcow является OpenSource проектом, в том виде в котором его принято видеть, без каких либо скрытых возможностей, которые приобретаются за деньги. Всё прозрачно и бесплатно, для всех!
Особенности почтового сервера
Установка почтового сервера предусматривает что Вы будете добавлять PTR запись, что в свою очередь приведёт к деанону ip адреса сервера из за специфики работы почтовых протоколов. Настоятельно рекомендуется ставить почтовый сервер на отдельной впске или сервере.
Основы электронной почты
MTA (Mail Transfer Agent) - агент пересылки почты.
MDA (Mail Delivery Agent) - агент доставки почты.
MUA (Mail User Agent) - почтовый клиент.
SMTP (Simple Mail Transfer Protocol) - основной протокол обмена эл.почты. Стандартный порт 25
POP3 - протокол для приёма сообщений электронной почты.
IMAP - протокол для приёма сообщений электронной почты.
Предварительная настройка (PTR, DNS, ETC)
Первым делом нам понадобиться поменять PTR запись для домена, на котором мы планируем держать Mailcow. Это делается в интерфейсе вашего хостинга. В каждом хостинге это делается по разному, покажу как это сделано у меня.
В настройках сервера вписываем желаемый домен, для которого будет установлена PTR запись.
PTR запись может обновляться долгое время, зависит от хостинга и DNS. Проверить что она установилась корректно можно несколькими способами
Первый способ nslookup
Второй способ dig
Также обязательно стоит внести необходимые изменения в DNS зону вашего домена, если это ещё не сделано.
Я все свои домены леплю на cloudflare, поэтому на его примере и буду показывать
Желательно установить hostname для Вашего сервера. Впишите свой домен
Дополнительно добавим наш домен в /etc/hostname
Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём необходимые директории для mailcow
Переходим в созданную директорию
Сделаем нашего пользователя (не root !) владельцем этой директории
Загружаем последнюю версию Mailcow с github
На этом предварительная настройка завершена
Установка Mailcow
Переходим в созданную на предыдущем шаге директорию
Теперь необходимо сгенерировать конфигурацию под свой домен. Для этого выполняем команду
После чего последовательно отвечаем на поступающие вопросы:
Указываем FQDN(домен) я указал mail.mymailcow.cf
Выбираем таймзону
По желанию можно отключить ClamAV
И выбираем ветвь обновлений, я выбрал master
Если мы хотим вручную посмотреть или отредактировать конфигурационные фаил
Например на сервере с достаточным количеством оперативной памяти вопрос про отключение антивируса ClamAV могут и не задать, поэтому мы можем вручную ограничить это в этом фаиле, изменив строку на SKIP_CLAMD=y
Наконец запускаем всю эту красоту
Мне посчастливилось наткнуться на мини-баг, в результате которого в конфиг не была занесена информация на каком ip запускаться контейнеру nginx.
После того как я вручную внёс HTTP_BIND=0.0.0.0 и HTTPS_BIND=0.0.0.0 в фаил mailcow.conf всё успешно завелось.
После того как контейнеры поднялись можем сразу идти на наш домен, который мы указали на этапе генерации конфига, у меня это mail.mymailcow.cf
Но дело в том что по стандарту там будет работать протокол http, который небезопасен. Исправим это
Настроим автоматический редирект HTTP на HTTPS
Как следует из официальной документации, находясь в главной папке mailcow создадим новый фаил
С таким содержанием
root /web;
listen 80 default_server;
listen [::]:80 default_server;
include /etc/nginx/conf.d/server_name.active;
if ( $request_uri ~* "%0A|%0D" ) { return 403; }
location ^~ /.well-known/acme-challenge/ {
allow all;
default_type "text/plain";
}
location / {
return 301 https://$host$uri$is_args$args;
}
}
После этого изменения необходимо перезапустить контейнеры
Теперь вводя наш домен мы будем автоматически переадресованы на https протокол. Сертификат генерируется самоподписной поэтому в некоторых браузерах понадобиться подтвердить риск его использования, тут нет ничего такого, это наш сертификат и мы ему доверяем. Наконец мы увидим страницу авторизации
Вводим стандартные данные для авторизации
Login: admin
Password: moohoo
Для того чтобы мануал получился более универсальным я выберу язык EN
Залогинившись сразу меняем пароль для администратора. Нажимаем кнопку Edit
Теперь, пожалуй, посмотрим состояние сервера. В верхней навигационной панельке выбираем пункт Configuration > System Information
В этом разделе мы можем посмотреть свободное место на диске, логи, состояние всех контейнеров. Также предусмотрена возможность перезагрузки контейнера, если нажать на кнопку Restart.
Настройка Mailcow
Пришло время настроить Mailcow, отправляемся в раздел Configuration > Mail Setup.
Добавление домена
Для того чтобы работать с почтой мы должны сначала добавить домен. Самих доменов может быть несколько, но мы пока добавим 1. Желательно чтобы это был покупной домен, хотя для тестов можно воспользоваться бесплатным фриномовским доменом. В моём случае домен будет mymailcow.cf
Для того чтобы добавить домен нажимаем кнопку + Add domain
Заполняем поля
- Domain: желаемый домен
- Description: описане (по желанию)
- Tags: теги (по желанию)
- Алиасы и квоты: можно оставить по умолчанию
- Max. possible mailboxes: максимальное количество почтовых ящиков
- DKIM key length (bits): желательно выбрать 1024 (т.к. не все днс умеют работать с 2048)
Наконец нажимаем Add domain and restart SOGo
Спустя какое то время увидим как добавился наш домен
Посмотрим конфигурацию DNS добавленного домена. Для этого в разделе Action нажимаем кнопку DNS
Добавление дополнительных DNS записей для домена
Теперь нужно добавить все необходимые записи DNS. Как я уже неоднократно писал, свои домены я леплю на cloudflare именно поэтому я и буду показывать на его примере. Если у Вас не cloudflare ищите как добавить все записи конкретно для Вашего случая.
Я буду показывать сразу на конкретном примере для домена mail.mymailcow.cf Вы же замените на свои данные. Итак, начнём по порядку:
MX запись
MX (Mail Exchanger) - тип DNS записи. Определяет HOST, на который будут отправлены сообщения.
- Type: MX
- Name: @
- Mail server: mail.mymailcow.cf
- TTL: Auto
- Priority: 10
CNAME запись
CNAME это тип записи DNS, которая привязывает псевдоним к действительному (каноническому) доменному имени. Записи CNAME обычно используются для привязки субдомена, такого как www или mail к домену, в котором размещен контент этого субдомена.
- Type: CNAME
- Name: autodiscover.mymailcow.cf
- Target: mail.mymailcow.cf
И ещё одну запись
- Type: CNAME
- Name: autoconfig.mymailcow.cf
- Target: mail.mymailcow.cf
SPF запись
SPF (Sender Policy Framework) - текстовая запись в TXT-записи DNS домена. Позволяет указать кто имеет право отправлять письма от имени домена.
- Type: TXT
- Name: @
- TTL: Auto
- Content: v=spf1 ip4:185.104.114.103 include:mail.mymailcow.cf ~all
Замените ipv4 адрес и домен на свои. Либо можно воспользоваться мастером добавления SPF записи в cloudflare, для этого в настройках DNS надо нажать Use wizard to add an SPF record и ввести свои данные. Подробнее про разновидность написания SPF записи можно посмотреть тут.
DMARC запись
DMARC (Domain-based Message Authentication, Reportingand Conformance) - набор правил для писем от вашего имени, которые не прошли аутентификацию по SPF и DKIM.
Для того чтобы сгенерировать правильную DMARC запись воспользуемся специальным сервисом.
Вводим домен в соответствующее поле. Далее указываем что мы хотим делать с письмами не прошедшими проверку SPF. Я выбирал quarantine в обоих полях Requested policy type и Subdomain Policy: Defaults to same as domain. После чего нажимаем Get DMARC Record и получившуюся запись добавляем в DNS в качестве TXT записи.
- Type: TXT
- Name: _dmarc.mymailcow.cf
- TTL: Auto
- Priority: v=DMARC1; p=quarantine; sp=quarantine
DKIM запись
DKIM (DomainKeys Identified Mail) - метод E-mail аутентификации. Предназначен для антифишинга и антиспама. Уберегает содержимое сообщения при передаче между почтовыми серверами.
Сам ключ указан в свойствах DNS для домена в Mailcow. В более старых версиях необходимо было вручную создать этот ключ зайдя на главную страницу Configuration & Details и выбрав там Configuration > ARC/DKIM keys. В этом же разделе мы можем перегенерировать, экспортировать и импортировать ключи.
- Type: TXT
- Name: dkim._domainkey
- TTL: Auto
- Priority: v=DKIM1; k=rsa; p=...
TLSA запись
TLSA является необязательной записью. Она используется для связывания сертификата сервера TLS или открытого ключа с доменным именем, в котором находится запись. С записью TLSA вы можете хранить отпечаток сертификата TLS/SSL в DNS вашего домена.
- Type: TLSA
- Name: _25._tcp.mail
- TTL: Auto
- Usage: 1 число из настроек днс TLSA mailcow
- Selector: 2 число из настроек днс TLSA mailcow
- Matching type: 3 число из настроек днс TLSA mailcow
- Certificate (hexadecimal): 4 число из настроек днс TLSA mailcow
Числа указаны в свойствах домена в mailcow
А вот так необходимо внести в cloudflare
В конечном итоге при проверке DNS записей вашего домена в mailcow у Вас должно получиться вот так
Я не стал заполнять SRV запись потому что она является не обязательной
А вот так это выглядит в cloudflare
На этом настройка DNS завершена.
Создание почтовых ящиков
Переходим в раздел Configuration > Mail Setup > Mailboxes и нажимаем кнопку + Add mailbox
И заполняем поля своими данными
- Username: имя пользователя (то что идёт перед символом @)
- Domain: домен
- Full name: полное имя (по желанию)
- Quota: квота места на диске, занимаемое почтовым ящиком (0 = безлимит)
- Password: пароль, минимально 6 символов, я советую от 20
- статус: active
И нажимаем кнопку Add.
Наш почтовый ящик успешно добавлен. Можно добавить сколько угодно почтовых ящиков. Если Вы превысили лимит например 10 / 10 - зайдите в свойства домена и увеличьте на необходимое значение. 10 это дефолтное значение для всех новых доменов.
После добавления каждого почтового ящика необходимо нажать кнопку в верхнем навигационном меню Restart SOGo.
Проверяем работу
Для того чтобы проверить работу воспользуемся встроенным почтовым веб клиентом SoGo.
Для этого в верхней навигационной панели нажимаем Apps > Webmail. Далее вводим логин и пароль от только что созданного почтового ящика.
И мы попадаем в web интерфейс
Чтобы убедиться что мы настроили всё правильно, воспользуемся специальным сервисом mail-tester.com. Этот сайт позволит нам делать 3 проверки в день так что используйте эти попытки экономно.
Попав на сайт нам сразу же будет предоставлена временная почта, на которую мы должны отправить тестовое письмо. Копируем эту почту и переходим обратно в SoGo.
Создаём новое сообщение и вставляем адрес почты, полученный с меилтестера. И нажимаем отправить.
Переходим обратно в Mail-Tester и смотрим результат. Как видим мы получили максимально возможное количество баллов
Ну и напоследок проверяем инбокс в Gmail
Кстати, если планируете отсылать письма по gmail'ам не лишним будет добавить свой домен на специальную страницу https://postmaster.google.com
Добавляем Catch-All filter
Создадим ещё один ящик. Для примера я назову его catchall@mymailcow.cf На этот ящик будет перенаправляться вся почта которую прислали на несуществующие почтовые ящики нашего домена (info).
Переходим в раздел Configuration > Mail Setup > Aliases > Aliases и нажимаем кнопку + Add alias
В секцию Alias address/es вписываем наш домен в таком виде @mymailcow.cf
А в секцию Goto addresses вписываем почтовый ящик на который будут перенаправлены письма, я вписываю catchall@mymailcow.cf
И нажимаем кнопку Add
Таким образом мы создадим наше перенаправление
Теперь если отправить письмо на существующий почтовый ящик, то это письмо попадёт по адресу. А если отправить письмо на несуществующий адрес, то оно попадёт на catchall@mymailcow.cf
Полезные ссылки
Официальный сайт Mailcow
Официальная документация Mailcow
Официальный GitHub
Mission Completed!
Здравствуйте, столкнулся со следующей проблемой, после выполнения sudo docker-compose up -d
ОтветитьУдалитьBind for 0.0.0.0:443 failed: port is already allocated
но порт занят самим доекром. как быть?
Остановить контейнер, который занимает 443 порт.
УдалитьСам по себе докер не занимает 443 порт.
чтобы определить что использует 443 порт попробуйте выполнить
sudo apt install net-tools
sudo netstat -ltnp | grep -w ':443'
дело в том, что на нём висит nginx, настроенный по вашей же инструкции)
ОтветитьУдалитьВ начале поста есть параграф про "Особенности почтового сервера". Категорически не рекомендуется совмещать остальные сервисы с почтовым сервером, т.к. для правильной работы SMTP и чтобы был инбокс, необходимо настраивать такие вещи как PTR, DMARC и другие, что незамедлительно приведёт к раскрытию реального ip адреса почтового сервера, т.к. это нужно для коректной работы вышеперечисленных протоколов. Я рекомендую размещать почтовый сервер на отдельном сервере, т.к. он является потенциальной мишенью для злоумышленников.
Удалитьну я это делаю в основном для себя, для опыта, на vps крутиться vpn сервер с парой сервисов. И, вот, почту решил попробовать прикрутить, в целом не так страшно для меня раскрыть ip, тем более, что сервер будет использоваться для рассылок сервисных сообщений себе, от своих же сервисов)
ОтветитьУдалитьОтветы можно поискать тут:
Удалитьhttps://docs.mailcow.email/post_installation/firststeps-rp/
И всё же я настоятельно не рекомендую так делать!
Привет! никто не подскажет как заставить sogo отправлять письма в фоне? А то секунд по 5 висит это зелёное окошко что отправляется
ОтветитьУдалитьЯ использую Thunderbird вместо sogo, поэтому не подскажу, в настройках этого нигде нет?
УдалитьЗдравствуйте, не понятно, как настроить сертификаты. Переодически на клиентах их нужно подтверждать. Как я понял из документации, они должны как то сами подтягиваться, но почему то не работает.
ОтветитьУдалитьПриветствую. Ответ на этот вопрос в конце поста в полезных ссылках в ссылке Advanced SSL configuration
УдалитьОтправить комментарий