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

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

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

Приступим!


VPS:

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

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

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

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

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)

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


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

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

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

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

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

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

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

Указана цена €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 и пишем:

  • cd /opt/

  • git clone https://github.com/mailcow/mailcow-dockerized

  • cd mailcow-dockerized

  • ./generate_config.sh

Тут нужно быть внимательным⚠️
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. Остальное по умолчанию.

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

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

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

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

Через кнопку 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" '
Именно в двойных ковычках!

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

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


Теперь ждем, пока всё подтянется, но работать уже должно сейчас. Просто некоторая почта, такая как 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.

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

Комментарии (15)


  1. uuger
    04.04.2024 06:53
    +1

    а в чём преимущество докера для одинокой ВПС-ки, где ничего другого жить не будет? на мой взгляд, тогда проще купить услугу по хостингу контейнера или поднять олдскульный сервер


    1. dtkbrbq
      04.04.2024 06:53

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


  1. Tuvok
    04.04.2024 06:53

    Конечно моё ИМХО, но сейчас опасливо заводить сервера и оплату за границей. Хотелось бы увидеть гайд по развёртыванию личной почты на домашнем сервере с белым IP и без докера (Debian на bare-metal / Virtual Box), а ещё так чтобы самоподписанные сертификаты и без регистрации домена, ну или свой DNS поднять ещё. Ещё бы хотелось увидеть краткое описание предыдущих серий, то есть почему был выбран именно mailcow, а не что-то другое, его плюсы.


    1. M_AJ
      04.04.2024 06:53

      без регистрации домена

      Почта так не работает. В остальном, развертывание почты на домашний машине и на VPS не отличается. Только 25 порт у домашнего провайдера может быть закрыт. Если хотите bare metal, просто возьмите сборку под bare metal типа iRedmail


  1. Vcoderlab
    04.04.2024 06:53

    Правильно ли я понимаю, что поскольку MailCow сидит в докере, то на сервере могут крутиться и другие сервисы?

    И ещё вопрос:

    У меня TSLA в DNS Records это
    3 1 1 11fd336a61b96828825a06e3053ca95c5ad4227489647cf78efaa410f51ec42f

    Откуда брать длинную строку (которая сертификат)?


    1. 0Ziver Автор
      04.04.2024 06:53

      Да, у докера есть libnetwork.

      Он сам занимается мультиплексированием.

      По этому можно вешать несколько сервисов на 1 порт.

      TLSA должен выписывать сам mailcow. Он должен быть в окне DNS Records. Где-то на нижних строчках. Напишите если не найдёте эту запись.


  1. JastixXXX
    04.04.2024 06:53

    Для полных новичков в этом деле, таких как я, было бы неплохо, если бы автор объяснил, зачем добавляет те или иные записи. Понятно, что записи вроде А, АААА и МХ очевидны, но вот остальные не очень. Можно конечно попытаться нагуглить, но наличие объяснений в самой статье сильно бы подняло её ценность.


    1. 0Ziver Автор
      04.04.2024 06:53

      Можно, но я бы вынес это в отдельную статью, так как информации там много будет.


  1. Ego78
    04.04.2024 06:53

    Не увидел ptr записи в dns . Без нее все в спам.


  1. 0Ziver Автор
    04.04.2024 06:53

    PTR запись что для ip, что для ipv6 может долго подтягиваться хостером, стоит подождать сутки после установки. Когда все будет готово, в DNS Records в mailcow, в крайней правой колонке будет зелёная галочка. Тогда письма не будут попадать в спам.


    1. Ego78
      04.04.2024 06:53
      +2

      ptr не будет подтягиваться , нужно просить ,чтоб ее завели на хостере в реверсивной зоне. Плюс должен быть статический IP. Так же не настрренны политики spf, ну и дальше dmarc dkim . Без эти механизмов все в спам. Google по-моему по новым правилам вообще будет отклонять письма без этих механизмов.


      1. 0Ziver Автор
        04.04.2024 06:53

        Смотря кто хостер. Aeza даёт из консоли даёт настроить ptr, да и не только они. От провайдера зависит. Я сижу на финском tietokettu, у них вообще ptr платный, 25€.

        В статье указано, что нужен VPS, а там всегда будет статический ip. Не представляю кейс где кто-то будет ставить почту дома, покупать статический ip у провайдера и заниматься настройкой сервера вручную.

        У меня Gmail,iCloud,outlook, yahoo, mail.ru не кидают мои письма в спасибо, спокойно доходят. Dmark не настроен. dkmi ввёл выданный mailcow, висит зелёная галочка.

        P.S gmail и выше перечисленные почты, кроме mail.ru без ptr записей выкидывали мои писульки в спам.


      1. drlight17
        04.04.2024 06:53
        +2

        Подписываюсь под каждым словом. Пока не будет ptr, spf, dkim, dmarc - о нормально работающей почте говорить рано. За плечами n поднятых почтовых серверов, в том числе домашний и пара корпоративных на базе mailcow (для корпоративных прикручена еще ldap авторизация).