Mailcow – это готовый почтовый сервер, собран на основе docker контейнеров, что позволяет быстро и без проблем с настройкой развернуть свое решение в организации. Он очень удобный в администрировании, с красивым современным веб-интерфейсом. В основе решения используется Postfix и Dovecot, в качестве почтового web клиента используется SOGo.
Содержание статьи
- Возможности решения
- Системные требования
- Задачи компании
- План мероприятий
- Настройка DNS у провайдера
- Настройка локальных DNS
- Проброс портов на маршрутизаторе
- Подготовка сервера
- Установка Docker
- Установка mailcow
- Настройка почтовика и демонстрация административного интерфейса
- Добавление домена
- DNS диагностика и добавление дополнительных DNS записей
- Сертификаты Let's Encrypt
- Создание почтовых ящиков
- Демонстрация пользовательского интерфейса
- Адресная книга
- Тестирование работоспособности
- Миграция почты с Mail.ru
- Миграция с сервера на сервер
- Заключение
Возможности решения
- Добавление и администрирование почтовых доменов
- Создание и редактирование почтовых ящиков
- Управление ключами DKIM
- Управление через API
- Fail2ban
- Управление квотами почтовых ящиков и писем
- Управление очередями писем
- Управление карантином
- Конфигурация и статистика Rspamd
- Почтовый роутинг
- Настройка системных оповещений
- Логирование всех выполняемых сервисов
- Настройка Алиасов
и многое другое
Системные требования
Минимальные системные требования:
Процессор: 1 ядро от 1ГГц
Оперативная память: от 3ГБ
Накопитель: от 10ГБ
Параметры виртуальной машины:
Потребление ресурсов в режиме простоя:
Задачи компании
Итак для компании со штатом сотрудников 150+ человек и почтовой базой 2ТБ+, потребовался собственный надежный почтовый сервер с низкими системными требованиями:
- Наличие web интерфейса для управления администраторам
- Наличие удобного web интерфейса для пользователей
- Работа на 4 ядрах и 8гб оперативной памяти
- Наличие антивируса и антиспама
- Перенос почты с Mail.ru
План мероприятий
- Всех пользователей извещаем о том, чтобы они создали пароли для внешний приложений в аккаунте на mail.ru и прислали вам
- Отправляем письмо интернет провайдеру с просьбой прописать PTR запись у себя в DNS
- Настраиваем DNS у хостинг провайдера и в локальной сети
- Делаем проброс портов на маршрутизаторе
- Поднимаем виртуальную машину с Ubuntu 24.04LTS на гипервизоре Proxmox
- Подготавливаем сервер и устанавливаем docker
- Запускаем и настраиваем решение
- Тестируем работоспособность, в том числе делаем проверки онлайн ресурсами
- Создаем почтовые ящики пользователей
- Выполняем миграцию почты с Mail.ru
Настройка DNS у провайдера
Прежде всего пишем письмо интернет провайдеру, в котором попросите прописать PTR запись у себя в DNS.
Проверить можно командой:
nslookup -type=PTR ip_адрес --- или --- dig -x ip_адрес
Если у вас нет домена, нужно приобрести советую nethouse.ru - работаю с ним не один год, всё DNS записи очень быстро обновляются.
Итак создаём записи:
- Запись типа А, где Имя это домен 3-го уровня, который ссылается на ip адрес вашего маршрутизатора или почтового сервера
- Запись типа MX, где Имя это ваш домен 2-го уровня как правило, который ссылается на запись типа А
Пример:
Настройка локальных DNS
На локальных DNS серверах рекомендую создать зону:
company.ru
В которой вы сможете прописывать записи ресурсов для локальных пользователей:
- Запись типа А --> mail --> IP_Address
- Запись типа MX --> mail.company.ru --> 10
Проброс портов на маршрутизаторе
На маршрутизаторе нужно создать правило DNAT трафик tcp порты:
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
SIEVE_PORT=419
Эти порты для хождения почты
443 - для доступа к web интерфейсу. Получатель ip адрес почтового сервера.
Подготовка сервера
Все действия в системе я произвожу под root:
sudo -s
Настраиваем сеть:
Удаляем дефолтные конфиги:
rm /etc/netplan/*.*
Создаем конфигурационный файл:
nano /etc/netplan/config.yaml
network:
ethernets:
ens18:
dhcp4: false
addresses: [192.168.1.200/24]
gateway4: 192.168.1.254
nameservers:
addresses: [192.168.1.201,192.168.1.202]
Сохраняем файл, выходим из редактора:
CTRL+O, CTRL+X
Применяем настройки:
netplan apply
Обновляем систему:
apt update -y && apt upgrade -y
Устанавливаем имя нашему серверу:
hostnamectl set-hostname mail.tuning-admina.ru
Устанавливаем временную зону:
timedatectl set-timezone Europe/Moscow
Устанавливаем дополнительные пакеты:
apt install mc net-tools git -y
Устанавливаем пакет для синхронизации времени:
apt install chrony -y
Проверяем статус службы:
systemctl status chrony
Перезагружаем систему:
reboot
Установка Docker
Добавим GPG key от репозитория Docker:
Устанавливаем права на директорию:
install -m 0755 -d /etc/apt/keyrings
Скачиваем ключ репозитория:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
Меняем права на файл ключа репозитория:
chmod a+r /etc/apt/keyrings/docker.asc
Добавим репозиторий Docker:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновим сведения о пакетах в репозиториях:
apt update
Устанавливаем Docker:
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Проверяем статус службы Docker:
systemctl status docker
Установка MailCow
Переходим в каталог:
cd /opt
Клонируем с github каталог с движком mailcow:
git clone https://github.com/mailcow/mailcow-dockerized
Переходим в каталог:
cd mailcow-dockerized
Запускаем конфигурационный скрипт:
./generate_config.sh
Отвечаем на вопросы конфигуратора:
- Указываем FQDN: mail.tuning-admina.ru
- Выбираем Time Zona: Europe/Moscow
- Выключить ClamAV, для экономии ресурсов: n - нет
- И выбираем ветвь обновлений: master
Скачиваем все связанные с Mailcow контейнеры:
docker compose pull
Запускаем контейнеры:
docker compose up -d
Проверяем статус контейнеров:
Все готово!!!
Настройка почтовика и демонстрация административного интерфейса
Открываем браузер и переходим по адресу:
https://mail.tuning-admina.ru
Учетная запись по дефолту:
- Логин: admin
- Пароль: moohoo
Первым делом после авторизации нам необходимо сменить пароль администратора, а еще лучше создать новую запись с уникальным именем и стойким с точки зрения безопасности паролем.
Это мы можем сделать в пункте Система -> Конфигурация:
Откроется группа вкладок, нам необходимо выбрать Настройки доступа и напротив учетной записи администратора нажимаем Изменить:
Переходим в консоль сервера и создаем файл редиректа запросов с http на https для nginx:
Создаем файл redirect для nginx:
nano /opt/mailcow-dockerized/data/conf/nginx/redirect.conf
server {
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;
}
}
Сохраняем файл, выходим из редактора:
CTRL+O, CTRL+X
Перезапускаем контейнер nginx:
docker compose restart nginx-mailcow
Добавление домена
Переходим в раздел E-mail --> Конфигурация:
На вкладке Домены нажимаем Добавить домен:
Откроется окно конфигурации вашего домена, где указываем количество почтовых ящиков - в моем случае 200штук, квота по умолчанию для почтовых ящиков - я выставил 10ГБ, а максимальную 30ГБ, при этом квота на весь домен установил в 3ТБ, после того как заполните форму необходимо нажать Добавить домен и перезапустить SOGO:
DNS диагностика и добавление дополнительных DNS записей
После того как мы добавили домен, нажимаем на значок @DNS, это диагностика и предписание вам для настройки своих DNS:
Зелеными галочками помечен статус ваших текущих правильных настроек, индекс 1 в статусе напоминает вам, что эта настройка очень важна для правильной работы почты, а индекс 2 это необязательное условие, а скорее рекомендация:
Открываем дополнительную вкладку в браузере и идем в панель администрирования DNS записями вашего Хостинг провайдера и сверяем значения, добавляем обязательную запись DKIM:
Сертификаты Let's Encrypt
В mailcow присутствует контейнер acme-mailcow, который в автоматическом режиме попытается получить, а также обновить SSL сертификат от Lets Encrypt для всех добавленных доменов, при этом mailcow должен быть доступен на 80-м порту.
Если вам необходимо принудительно продлить сертификат, необходимо выполнить следующее:
- Подключиться к серверу по ssh
- Перейти в каталог нашего почтового сервера:
cd /opt/mailcow-dockerized
- Создадим файл с именем force_renew:
touch data/assets/ssl/force_renew
- Перезапускаем контейнер acme-mailcow:
docker compose restart acme-mailcow
Создание почтовых ящиков
В меню выбираем E-Mail -- Конфигурация:
В открывшемся окне переходим на вкладку Почтовые ящики и нажимаем Добавить почтовый аккаунт:
Указываем имя пользователя, пароль, если вы не назначили квоту почтовому ящику, то она по умолчанию будет та что указана при добавлении домена, нажимаем Добавить:
Демонстрация пользовательского интерфейса
Пользовательская рабочая панель доступна по адресу: https://mail.tuning-admina.ru/sogo
Авторизовываемся в системе и нас встречает вполне интуитивно понятный пользовательский интерфейс c календарем и адресной книгой, в которую автоматически заносятся почтовые ящики домена с поиском по именам сотрудников.
Адресная книга
По просьбам трудящихся, демонстрирую, что есть в плане адресных книг.
У каждого пользователя есть личная адресная книга:
Которую можно импортировать и экспортировать, а также предоставлять в общий доступ другим пользователям:
Предоставление в общий доступ своей адресной книги:
А также есть глобальная адресная книга, в которую попадают все пользователи домена:
По поводу синхронизации контактов и календаря между SOGO и Outlook напишу чуть позже.
Тестирование работоспособности
Существует множество онлайн сервисов для проверки работоспособности вашего почтового сервера, а также присутствие всех нужных записей в DNS, один из таких ресурсов я вам продемонстрирую:
https://mail-tester.com
Заходим на сайт и видим предложение отправить письмо на сгенерированный специально для вас почтовый обработчик, копируем адрес и с вашего почтового ящика отправляем письмо:
После того как отправили письмо, возвращаемся на страницу ресурса и нажимаем Затем проверьте оценку и если вы все верно настроили, то у вас получиться тот же результат, что и у меня:
Если у вас отличаются показатели от моих, открываем E-Mail --> Конфигурация:
В разделе домены, напротив вашего есть значок @DNS, нажимаем на него, это диагностика и предписание вам для настройки своих DNS:
Зелеными галочками помечен статус ваших правильных настроек, индекс 1 в статусе напоминает вам, что эта настройка очень важна для правильной работы почты, а индекс 2 это необязательное условие, а скорее рекомендация.
Открываем дополнительную вкладку в браузере и идем в панель администрирования DNS записями вашего Хостинг провайдера и сверяем записи там:
!!! ВАЖНО !!!
Кстати, если планируете отсылать письма по gmail'ам не лишним будет добавить свой домен на специальную страницу:
https://postmaster.google.com
Указываем ваше доменное имя и нажимаем далее:
Нас просят создать TXT запись в DNS нашего хостинг провайдера, копируем значение:
Должно получиться так:
Возвращаемся на страницу Google и нажимаем подтвердить:
Нажимаем Готово, теперь у нас недолжно быть проблем при хождении писем между доменами.
Миграция почты с Mail.ru
В этом блоке статьи мы с вами рассмотрим 1 из 2 вариантов миграции почты:
- С помощью встроенного в решение контейнера imapsync и настройка процесса синхронизации в WEB панели администрирования
- Синхронизация с помощью Outlook
С помощью встроенного в решение контейнера imapsync и настройка процесса синхронизации в WEB панели администрирования
На панели управления выбираем E-Mail --> Конфигурация:
Нам нужна вкладка Задания синхронизации, нажимаем Создание нового задания синхронизации:
Запустится окно создания и конфигурирования правила синхронизации, где в самом верху указан почтовый ящик на нашем сервере куда мы будем перетаскивать почту, следом идут параметры подключения к ящику на mail.ru, но только пароль используется для внешний приложений, интервал установим 1 минуту и поставим галочку имитировать синхронизацию, для запуска после создания правила, после чего нажимаем Добавить:
Синхронизация прошла успешно:
*** Важно ***
При выполнении синхронизации переносятся только штатные папки
Миграция с сервера на сервер
Процесс миграции со старого сервера на новый достаточно простой процесс и выглядит следующим образом:
- Подготавливаем новый сервер, устанавливаем Docker и MailCow, после чего останавливаем Docker:
systemctl stop docker
- Разработчиками решения подготовлен скрипт для бэкапа и восстановления решения и находится он в папке /opt/mailcow-dockerized/helper-scripts, запускаем его:
/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh
- На старом сервере переходим в каталог /opt/mailcow-dockerized и останавливаем контейнеры вместе с Docker:
cd /opt/mailcow-dockerized
docker compose down
systemctl stop docker
- На старом сервере запускаем процесс синхронизации содержимого каталога между серверами:
rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@mail2.tuning-admina.ru:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@mail2.tuning-admina.ru:/var/lib/docker/volumes
- Запускаем Docker на новом сервере:
systemctl start docker
- Переходим в каталог /opt/mailcow-dockerized
cd /opt/mailcow-dockerized
- Подтягиваем Docker образы mailcow:
docker compose pull
Запускаем контейнеры mailcow:
docker compose up -d
При необходимости меняем настройки DNS.
Заключение
Безусловно это одно из лучших готовых решений в качестве почтового сервера для малого и среднего бизнеса. Решение попадает в мой список ТОП-5 лучших почтовых серверов. Функционал поражает своими возможностями и при этом ничего лишнего, это вам не многофункциональный комбайн.