Как поднять почтовый сервер mailcow

Приветствую Вас, дорогой читатель. Сегодня речь пойдет о поднятии личного почтового сервера Mailcow.

Сразу оговорюсь — я не гуру в этой сфере, но на просторах интернета довольно мало информации по поднятию Mailcow, поэтому эта статья и вышла.

Нам понадобится:
VPS (Virtual Private Server)
Домен
CloudFlare
Немного времени

Приступим!

VPS:

Начнем с VPS.
Лично я пользуюсь услугами Tietokettu

Сервера находятся в Финляндии, гигабитный канал и хорошие цены, высокий аптайм и достаточно много трафика. Не подумайте, что я рекламирую — мне за это никто не платит, просто мне понравился этот сервис

Показывать я буду на примере aeza.net
Регистрируемся на сайте и логинимся.
Нажимаем на большую надпись aeza.
Выбираем Virtual server и нажимаем Order.

auldy4mtgy5bk-gy_4dr8vstjle.png

На момент написания статьи был такой промо в Стокгольме.

ubnpf-48kwf93x59tiwgel0fbme.png

Name введите какой хотите, например mailcow-server
Теперь нужно выбрать OS. Я предпочтиаю Debian 12
Так же если не нужно, убери галочку с Enable backups.
Оплачиваем и ждем создания.
Сервер будет доступен тут.

Обновление VPS и установка Docker:

Теперь обновим и установим нужные программы.
Цепляемся через ssh.
Открываем PowerShell и пишем (замените ip на свой. Он есть в панели пользователя):
ssh root@ip

Обновим систему:
apt update && apt upgrade

Теперь будем ставить Docker (на debian):
Команды для установки:

  • apt install apt-transport-https ca-certificates curl software-properties-common

  • curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

  • add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

  • apt update

  • apt install docker-ce

На всякий случай включим автозапуск если не включился сам.

  • systemctl enable docker

Проверить статус можно командой

  • systemctl status docker

Должен быть подобный вывод.

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-03-29 04:38:52 EDT; 6min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 135217 (dockerd)
      Tasks: 27
     Memory: 46.3M
        CPU: 396ms
     CGroup: /system.slice/docker.service
             ├─135217 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             ├─135353 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 1688 -container-ip 172.17.0.2 -container-port 1688
             └─135359 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 1688 -container-ip 172.17.0.2 -container-port 1688

Главное это Active: active (running)

Если все ок, движемся дальше.

Покупка домена

Вот так выглядит домен

tvkmhmgkvjuokmaaiypbeevitqs.png

Я использую GoDaddy.Мне сервис очень нравится, цены приятные и удобный личный кабинет. Однако для оплаты требуется карта заграничного банка.

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

Я покажу на примере GoDaddy, так как процесс регистрации везде примерно одинаковый. Здесь страница для регистрации.

После регистрации идем сюда
Тут вводим интересующее имя.

hsdetg6pxfwo7wb0blsczxbvwq8.png

Допустим домен это mytopdomain.world, тогда домен будет выглядеть так.

ld5xuu501aqhyalu1qmzyxi8t68.png

Указана цена €1.84 без НДС вместо €46.17. Также там указано for first year, это означает, что на первый год пользования цена будет €1.84, а затем €46.17 в год.

Далее нажимаем Make It Yours и переходим в корзину. Там в разделе Protect your domain выбираем No Domain Protection.

Также убираем галочку с Start your website for FREE.

Не меняем пункт Build credibility with a custom email address и оставляем No Professional Email.

Оплачиваем…

И… Поздравляю! У Вас есть свой домен!

Установка Mailcow

Mailcow

Цепляемся по ssh и пишем:

Тут нужно быть внимательным⚠️
1 шагом предложено выбрать hostname
Он должен быть как mail.example.com
Например:

  • mail.mytopdomain.world

Будет предложено выбрать таймзону.
Нажимаем Enter что бы оставить предложенную, не меняем ее.
Отличная таймзона от локации vps может повлять на спам фильтры у других почтовых сервисов.
Далее вводим 1, что бы выбрать стабильную ветку и ждем установки.

Как закончится установка, идем в браузер и вводим ip адрес своего сервера.

Заходим в панель по паре:
Логин admin
Пароль moohoo

Сразу идем в System => Configuration и меняем там логин и пароль для входа в панель.

Теперь идем в E-mail и нажимаем на зеленую кнопку Add domain

В поле Domain вводим mytopdomain.world (замените на свой)
Все остальное можно оставить по умолчанию.
Нажимаем Add domain and restart SOGo

Настройка CloudFlare

Теперь нам нужен CloudFlare. Идем сюда и регистрируемся.
После регистрации логинимся и нажимаем Add site. Там нужно будет ввести ваш домен и нажать Continue. Выбираем Free план и нажимаем Continue.

CloudFlare просканирует DNS и покажет все DNS записи, которые нашел. Можно их все удалить. Нажимаем Continue и в появившемся окне нажимаем Confirm.

Важно⚠️

Ищем пункт 3 с именем Update your nameservers.
Идем в панель к своему регистратору и ищем там записи DNS.
Меняем стандартные NS (Nameserver) на те, которые выдал CloudFlare.
Не закрываем вкладку CloudFlare. После смены DNS ждем ~15 минут, а после переходим обратно на вкладку с CloudFlare и нажимаем Check nameservers now.
Далее будет Quick Start Guide. В Improve security включаем Always Use HTTPS. Остальное по умолчанию.

Теперь будем ждать такой надписи.

xqhxmtfivy-xmbjwf649nxsfegy.png

Как она появится, можно приступать к настройке.
Обычно у меня это занимает примерно 30 минут.

Теперь можно идти во вкладку DNS/Records.

Это самая долгая часть. Сверяемся с DNS Records из панели mailcow.

ffys9xyjksc1hvxp0msl0eh70dc.png

Через кнопку Add record создаем записи.

  • Type 'A' | Name 'mail' | IPv4 address 'ip адрес вашего VPS' | Proxy status 'DNS only' | TTL 'Auto'

  • Type 'AAAA' | Name 'mail' | IPv6 address 'ip6 адрес вашего VPS' | Proxy status 'DNS only' | TTL 'Auto'

  • Type 'CNAME' | Name 'autoconfig' | Target 'mail.example.com' | Proxy status 'DNS only' | TTL 'Auto'-

  • Type 'CNAME' | Name 'autodiscover' | Target 'mail.example.com' | Proxy status 'DNS only' | TTL 'Auto'

  • Type 'MX' | Name '@' | Mail Server 'mail.example.com' | TTL 'Auto' | Priority '1'

  • Type 'SRV' | Name '_autodiscover._tcp' | Priority '0' | Weight '1' | TTL 'Auto' | Port '443' | Target 'mail.example.com'

У меня TSLA в DNS Records это
3 1 1 11fd336a61b96828825a06e3053ca95c5ad4227489647cf78efaa410f51ec42f
где
3 => Usage
1 => Selector
1 => Matching type
Длинная строка это Certificate.

У меня это имело бы вид
Type 'TSLA' | Name '_25._tcp.mail' | TTL 'Auto' | Usage '3' | Selector '1' | Matching type'1' | Certificate '11fd336a61b96828825a06e3053ca95c5ad4227489647cf78efaa410f51ec42f'

А Вы укажите свои.

Идем дальше.

Type 'TXT' | Name 'dkim._domainkey' | TTL 'Auto' | Content 'указан в DNS Records последней строчкой, длинная строка'

Type 'TXT' | Name '@' | TTL 'Auto' | Content ' "v=spf1 mx -all" '
Именно в двойных ковычках!

Примерно так должно получиться

_r7pxmd9xsgoq1froyygwza5qjm.png

Это всё, тут закончили.

Теперь ждем, пока всё подтянется, но работать уже должно сейчас. Просто некоторая почта, такая как Gmail, скажет про подозрительный трафик, если вы отправите туда письмо.

Теперь в панели mailcow идем по E-Mail → Configuration → Mailboxes и нажимаем зеленую кнопку ** + Add mailbox**. Создаем Username. Какой хотите, например что-то такое:

  • info@example.com

  • support@example.com

Генерируем пароль или задаем собственный.

Quarantine notification category ставим в Junk folder.

Можно включить принудительный TLS.

Как клиентом, можно воспользоваться встроенным WebMail. Из десктопа есть бесплатный Mozilla Thunderbird. Также можно пользоваться клиентом Outlook.

И все, Ваш личный почтовый клиент готов. Можно, конечно, еще проводить дополнительную настройку, но это в другой статье! Спасибо за прочтение! Буду рад услышать замечания в комментариях!

© Habrahabr.ru