Найти в Дзене
Тюнинг Админа

Почтовый сервер для компании на Ubuntu 24.04LTS + MailCow

Mailcow – это готовый почтовый сервер, собран на основе docker контейнеров, что позволяет быстро и без проблем с настройкой развернуть свое решение в организации. Он очень удобный в администрировании, с красивым современным веб-интерфейсом. В основе решения используется Postfix и Dovecot, в качестве почтового web клиента используется SOGo. и многое другое Минимальные системные требования: Процессор: 1 ядро от 1ГГц Оперативная память: от 3ГБ Накопитель: от 10ГБ Параметры виртуальной машины: Потребление ресурсов в режиме простоя: Итак для компании со штатом сотрудников 150+ человек и почтовой базой 2ТБ+, потребовался собственный надежный почтовый сервер с низкими системными требованиями: Прежде всего пишем письмо интернет провайдеру, в котором попросите прописать PTR запись у себя в DNS. Проверить можно командой: nslookup -type=PTR ip_адрес --- или --- dig -x ip_адрес Если у вас нет домена, нужно приобрести советую nethouse.ru - работаю с ним не один год, всё DNS записи очень быстро о
Оглавление

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ГБ

Параметры виртуальной машины:

-2

Потребление ресурсов в режиме простоя:

-3

Задачи компании

Итак для компании со штатом сотрудников 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-го уровня как правило, который ссылается на запись типа А

Пример:

-4

Настройка локальных DNS

На локальных DNS серверах рекомендую создать зону:

company.ru

В которой вы сможете прописывать записи ресурсов для локальных пользователей:

  • Запись типа А --> mail --> IP_Address
  • Запись типа MX --> mail.company.ru --> 10
-5

Проброс портов на маршрутизаторе

На маршрутизаторе нужно создать правило 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

-6

Перезагружаем систему:

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

-7

Установка MailCow

Переходим в каталог:

cd /opt

Клонируем с github каталог с движком mailcow:

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

-8

Переходим в каталог:

cd mailcow-dockerized

Запускаем конфигурационный скрипт:

./generate_config.sh

Отвечаем на вопросы конфигуратора:

  • Указываем FQDN: mail.tuning-admina.ru
  • Выбираем Time Zona: Europe/Moscow
  • Выключить ClamAV, для экономии ресурсов: n - нет
  • И выбираем ветвь обновлений: master

Скачиваем все связанные с Mailcow контейнеры:

docker compose pull

-9

Запускаем контейнеры:

docker compose up -d

-10

Проверяем статус контейнеров:

-11

Все готово!!!

Настройка почтовика и демонстрация административного интерфейса

Открываем браузер и переходим по адресу:

https://mail.tuning-admina.ru

Учетная запись по дефолту:

  • Логин: admin
  • Пароль: moohoo
-12

Первым делом после авторизации нам необходимо сменить пароль администратора, а еще лучше создать новую запись с уникальным именем и стойким с точки зрения безопасности паролем.

Это мы можем сделать в пункте Система -> Конфигурация:

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

Откроется группа вкладок, нам необходимо выбрать Настройки доступа и напротив учетной записи администратора нажимаем Изменить:

-14

Переходим в консоль сервера и создаем файл редиректа запросов с 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 --> Конфигурация:

-15

На вкладке Домены нажимаем Добавить домен:

-16

Откроется окно конфигурации вашего домена, где указываем количество почтовых ящиков - в моем случае 200штук, квота по умолчанию для почтовых ящиков - я выставил 10ГБ, а максимальную 30ГБ, при этом квота на весь домен установил в 3ТБ, после того как заполните форму необходимо нажать Добавить домен и перезапустить SOGO:

-17

DNS диагностика и добавление дополнительных DNS записей

После того как мы добавили домен, нажимаем на значок @DNS, это диагностика и предписание вам для настройки своих DNS:

-18

Зелеными галочками помечен статус ваших текущих правильных настроек, индекс 1 в статусе напоминает вам, что эта настройка очень важна для правильной работы почты, а индекс 2 это необязательное условие, а скорее рекомендация:

-19

Открываем дополнительную вкладку в браузере и идем в панель администрирования DNS записями вашего Хостинг провайдера и сверяем значения, добавляем обязательную запись DKIM:

-20

Сертификаты 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 -- Конфигурация:

-21

В открывшемся окне переходим на вкладку Почтовые ящики и нажимаем Добавить почтовый аккаунт:

-22

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

-23

Демонстрация пользовательского интерфейса

Пользовательская рабочая панель доступна по адресу: https://mail.tuning-admina.ru/sogo

-24

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

-25

Адресная книга

По просьбам трудящихся, демонстрирую, что есть в плане адресных книг.

У каждого пользователя есть личная адресная книга:

-26

Которую можно импортировать и экспортировать, а также предоставлять в общий доступ другим пользователям:

-27

Предоставление в общий доступ своей адресной книги:

-28

А также есть глобальная адресная книга, в которую попадают все пользователи домена:

-29

По поводу синхронизации контактов и календаря между SOGO и Outlook напишу чуть позже.

Тестирование работоспособности

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

https://mail-tester.com

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

-30

После того как отправили письмо, возвращаемся на страницу ресурса и нажимаем Затем проверьте оценку и если вы все верно настроили, то у вас получиться тот же результат, что и у меня:

-31

Если у вас отличаются показатели от моих, открываем E-Mail --> Конфигурация:

-32

В разделе домены, напротив вашего есть значок @DNS, нажимаем на него, это диагностика и предписание вам для настройки своих DNS:

-33

Зелеными галочками помечен статус ваших правильных настроек, индекс 1 в статусе напоминает вам, что эта настройка очень важна для правильной работы почты, а индекс 2 это необязательное условие, а скорее рекомендация.

-34

Открываем дополнительную вкладку в браузере и идем в панель администрирования DNS записями вашего Хостинг провайдера и сверяем записи там:

-35

!!! ВАЖНО !!!

Кстати, если планируете отсылать письма по gmail'ам не лишним будет добавить свой домен на специальную страницу:

https://postmaster.google.com

Указываем ваше доменное имя и нажимаем далее:

-36

Нас просят создать TXT запись в DNS нашего хостинг провайдера, копируем значение:

-37

Должно получиться так:

-38

Возвращаемся на страницу Google и нажимаем подтвердить:

-39

Нажимаем Готово, теперь у нас недолжно быть проблем при хождении писем между доменами.

Миграция почты с Mail.ru

В этом блоке статьи мы с вами рассмотрим 1 из 2 вариантов миграции почты:

  • С помощью встроенного в решение контейнера imapsync и настройка процесса синхронизации в WEB панели администрирования
  • Синхронизация с помощью Outlook

С помощью встроенного в решение контейнера imapsync и настройка процесса синхронизации в WEB панели администрирования

На панели управления выбираем E-Mail --> Конфигурация:

-40

Нам нужна вкладка Задания синхронизации, нажимаем Создание нового задания синхронизации:

-41

Запустится окно создания и конфигурирования правила синхронизации, где в самом верху указан почтовый ящик на нашем сервере куда мы будем перетаскивать почту, следом идут параметры подключения к ящику на mail.ru, но только пароль используется для внешний приложений, интервал установим 1 минуту и поставим галочку имитировать синхронизацию, для запуска после создания правила, после чего нажимаем Добавить:

-42

Синхронизация прошла успешно:

-43

*** Важно ***

При выполнении синхронизации переносятся только штатные папки

Миграция с сервера на сервер

Процесс миграции со старого сервера на новый достаточно простой процесс и выглядит следующим образом:

  • Подготавливаем новый сервер, устанавливаем 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 лучших почтовых серверов. Функционал поражает своими возможностями и при этом ничего лишнего, это вам не многофункциональный комбайн.