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

Как настроить Mailcow в Yandex Cloud

· 7 мин. чтения

Mailcow с Postbox в Yandex Cloud

В Облаке 25 порт закрыт для исходящих соединений, однако, входящие соединения на 25 порт разрешены. Поэтому для того, чтобы настроить почтовый сервер в Yandex Cloud, нам нужно решить эту проблему. Для этого мы будем использовать Postbox в качестве relay для отправки почты. В этом туториале я расскажу, как настроить Mailcow с помощью Postbox в Yandex Cloud.

Подготовка виртуальной машины

Для начала нам нужно создать виртуальную машину в Yandex Cloud. Я создал виртуальную машину с Ubuntu 24.04 LTS с 4vCPU и 4GB RAM. После создания виртуальной машины, подключаемся к ней по SSH. Для начала нам нужно установить необходимые пакеты и Docker.

Следующие команды нужно выполнить от имени привилегированного пользователя:

sudo -s

Теперь установим необходимые пакеты:

sudo apt update
sudo apt install -y git openssl curl gawk coreutils grep jq

Далее установим Docker. Для этого воспользуемся официальным скриптом установки Docker, чтобы установить последнюю стабильную версию Docker.

warning

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

sudo -s
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker

mailcow требует Docker Compose версии >= 2.0.

apt update
apt install docker-compose-plugin

Создание DNS-записей

Для того чтобы почтовый сервер работал корректно, нам нужно создать несколько DNS-записей для нашего домена. Я буду использовать домен nikolaymatrosov.ru в качестве примера.

Для начала нам нужно создать A-запись для нашего почтового сервера. Я создал A-запись mailcow.nikolaymatrosov.ru, которая указывает на IP-адрес нашей виртуальной машины.

A-запись

Далее нам нужно создать MX-запись для нашего домена. Я создал MX-запись для домена nikolaymatrosov.ru, которая указывает на FQDN нашего почтового сервера mailcow.nikolaymatrosov.ru с приоритетом 10.

MX-запись

Установка mailcow

Теперь, когда у нас есть все необходимые пакеты и Docker, мы можем приступить к установке mailcow. Для этого нам нужно клонировать репозиторий mailcow-dockerized.

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

И запустить скрипт генерации конфигурации.

./generate_config.sh

Скрипт задаст несколько вопросов для настройки mailcow. Укажем хостнейм нашего почтового сервера mailcow.nikolaymatrosov.ru, часовой пояс Europe/Moscow и выберем ветку master для стабильных обновлений. Скрипт также проверит, не находится ли наш IP-адрес в черных списках Spamhaus, и сгенерирует самоподписанный сертификат для нашего почтового сервера. Вот пример вывода скрипта:

Detecting if your IP is listed on Spamhaus Bad ASN List...
Check completed! Your IP is clean
Press enter to confirm the detected value '[value]' where applicable or enter a custom value.
Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: mailcow.nikolaymatrosov.ru
Timezone [Etc/UTC]: Europe/Moscow
Which branch of mailcow do you want to use?

Available Branches:
- master branch (stable updates) | default, recommended [1]
- nightly branch (unstable updates, testing) | not-production ready [2]
- legacy branch (supported until February 2026) | deprecated, security updates only [3]
Choose the Branch with it's number [1/2/3] 1
Already on 'master'
Your branch is up to date with 'origin/master'.
Only link-local IPv6 addresses found – testing external IPv6 connectivity...
Only link-local IPv6 present and no external connectivity – disabling IPv6 support.
Skipping Docker IPv6 configuration because host does not support IPv6.
Make sure to check if your docker daemon.json does not include "enable_ipv6": true if you do not want IPv6.
IPv6 configuration complete: ENABLE_IPV6=false
Generating snake-oil certificate...
..............+.+...+..+...+...+...+.+......+.....+.........+....+..+.......+......+.........+.....+.+.....+.+...+.....+.......+......+.....+....+...+.....+...+....+.....+......+.......+...+..+.+...........+....+.....+.+...+...+..............+.....................+...+.+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*....+...+....+......+........+......+...+.+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..............+....+...+..+...+.......+..........................+.+...+...+..+...............+......+....+.....+...+...+.+.....+.+..................+..+....+.....+....+......+.........+.........+............+........+......+......+...+.............+...+.....+....+...+.....+.........+.........+.......+..+...+.........+...+..............................+......+.+...+........+..........+........................+...+......+...............+...........+...+..........+..+................+.....+...+......+...+.......+...+..+...+..........+...........+.......+..............+.+..+.......+...............+...+..+....+..+...+................+.........+.........+......+.....+....+..+...............+.+..............+......+...+....+....................+...+.......+..+......+...+.+.....................+..+.+.....+......+.+...+...........+.+..+..........+..+.........+......+.+...+.................+....+......+..+.......+...+...........+.....................+..........+......+.....+.......+............+...........+..........+........+................+......+...+.....+.+........+..........+..+.+........+................+..........................+...........................+.+.....+.+...+..+.+........+......+......+.......+............+.........+..............+.+..+.......+...+..+.+.....+.+.....+....+.....+.......+.....+...+......+......+.......+........+....+.........+..+...+....+...+...+.....+......+....+...........+.........+.+...............+.........+..............+.+......+...+..+......+.......+...+...............+..+.............+...+.........+..+.....................+...+.........+.+...........+....+.........+......+.....+.+......+.........+.....+.+........+.+.....................+..............+..........+...+.....+...+....+......+..+.............+.........+........+...+.........+...................+..........................+...+.+..............+...+....+...+..+.+..+......+................+........+...+...+.+...+...+...+.........+..+.+...+..+.........................+..............+...+.......+.....+.+...+...........+.+............+........+........................+......+.......+...........+.+.........+......+......+...+..+.........+...+..........+..+.+............+...+...+...........+..........+...+......+..+...+.+.....+...+.......+......+..+.+..+...+....+..+.+..+.......+...+...............+...+..............+......+..................+......+.+..+......+.+...............+.....+.+..+.......+...+..+.+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
....+..+....+...+...............+...+........+....+...+...+.........+......+.....+.+.........+......+...+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.......+.+......+...+..+...+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+...........+....+.....+.......+...+................................+...+....+..+...+.+..............+......+........................+............+.+..............+..........+...+...+........+......+...+.......+...+..+.........+.+.........+......+...+.......................+.........+...+...+.......+...............+........+............+...+.........................+...+.............................+......+.......+...+.........+..+.+...........................+...+..............+.........+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
Copying snake-oil certificate...
cp: warning: behavior of -n is non-portable and may change in future; use --update=none instead

После генерации конфигурации, вы можете открыть файл mailcow.conf и внести дополнительные изменения, если это необходимо. Например, вы можете изменить имя хоста, указать другие порты или настроить другие параметры.

nano mailcow.conf

После того как вы внесли все необходимые изменения, вы можете запустить mailcow.

docker compose pull
docker compose up -d

Настройка Postbox

Теперь, когда mailcow запущен, нам нужно настроить Postbox для отправки почты. Для этого в интерфейсе Postbox нам нужно создать домен для отправки почты. В этом примере мы используем домен nikolaymatrosov.ru для отправки почты.

Подробную инструкцию по настройке Postbox можно найти в официальной документации, после этого вам нужно будет подтвердить владение доменом, добавив TXT-запись в DNS вашего домена.

Еще нам нужно будет создать сервисный аккаунт для Postbox и выдать ему роль postbox.sender. После этого мы можем создать API-ключ для этого сервисного аккаунта, который нам понадобится для настройки Postbox. Api-ключ

Настройка Mailcow для использования Postbox

Создание правила маршрутизации почты через Postbox

Теперь нам нужно настроить mailcow для использования Postbox в качестве релея для отправки почты. Для этого нам нужно зайти в интерфейс администрирования mailcow для этого перейдите по адресу http://mailcow.nikolaymatrosov.ru/admin и войдите в систему, используя учетные данные, по умолчанию это admin и пароль moohoo. После входа в систему, обязательно смените пароль администратора на более надежный.

Далее перейдите в раздел Система -> Конфигурация -> Маршрутизация

Маршрутизация

И заполните поля следующим образом:

ПолеЗначение
Хостpostbox.cloud.yandex.net:587
Имя пользователяидентификатор API-ключа, который вы создали для Postbox
Парольсекретный ключ, который вы получили при создании API-ключа

Настройка маршрутизации

Теперь можно проверить отправку почты через Postbox. Для этого можно создать тестовое письмо и отправить его на любой внешний адрес, например, на ваш личный email. Если все настроено правильно, письмо должно успешно отправиться через Postbox.

Проверка отправки почты

Если все настроено правильно, вы должны увидеть лог отправки письма в интерфейсе mailcow, и письмо должно успешно доставиться на указанный адрес.

Лог отправки письма

Настройка домена

Перейдите в раздел E-mail -> Конфигурация.

Конфигурация домена

Нажмите кнопку Добавить домен и заполните поля следующим образом:

Кнопка добавления домена

В открывшемся окне заполните поля следующим образом:

Добавление домена

ПолеЗначение
Доменваш домен

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

Выбор маршрутизации для домена

Когда вы отправляете письмо с этого домена, оно будет отправляться через Postbox. Теперь можно перейти на вкладку Почтовые ящики и создать почтовый ящик для этого домена, чтобы проверить отправку почты.

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

В этом примере я создал почтовый ящик mail для домена nikolaymatrosov.ru. В этой форме вы можете указать имя почтового ящика, пароль и другие параметры. Если вам лень придумывать пароль, вы можете сгенерировать его с помощью встроенного генератора паролей, который предлагает mailcow.

Также стоит выбрать опции Принудительное шифрование для входящих и исходящих соединений.

Почтовый ящик

Нажав на кнопку Login вы автоматически войдете в веб-интерфейс почтового ящика. На странице почтового ящика вы можете скачать профиль для настройки почтового клиента.

Профиль для почтового клиента

Скачав профиль, вы найдете его в настройках системы.

Профиль для почтового клиента

Кликнув на профиль, вы можете импортировать его в почтовый клиент.

Импорт профиля в почтовый клиент

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

Импорт профиля в почтовый клиент

Пароль от почтового ящика

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

Профиль успешно импортирован

А также, получать письма, отправленные на этот почтовый ящик.

Inbox

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

Профиль успешно импортирован в Thunderbird

Заключение

В этом туториале мы рассмотрели, как настроить Mailcow с помощью Postbox в Yandex Cloud. Мы создали виртуальную машину, установили необходимые пакеты и Docker, настроили DNS-записи для нашего домена, установили mailcow, настроили адрес в Postbox и настроили mailcow для использования Postbox в качестве релея для отправки почты.

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