- Информация о продукте
- Задачи компании
- Установка Ubuntu 22.04LTS
- Настройка после установки
- Регистрация записей в DNS
- Проброс портов на маршрутизаторе
- Установка mailcow
- Настройка почтовика
- Демонстрация административного интерфейса
- Демонстрация пользовательского интерфейса
- Миграция
- Вывод
Информация о продукте
Если вы хотите хороший качественный почтовый сервер со всем необходимым фаршем для организации эта статья то, что вам нужно.
Mailcow – это как раз готовый почтовый сервер на основе Postfix, Dovecot и другого не менее важного программного обеспечения, удобство администрирования которого обеспечивается отличным, современным веб-интерфейсом. В качестве почтового web клиента используется SOGo.
Mailcow это решение основанное на docker контейнерах и его можно использовать для быстрого развертывания полнофункционального почтового сервера в небольших организациях. По простоте и функционалу он спокойно превосходит популярный iRedMail.
Что есть в Mailcow:
- добавление и администрирование почтовых доменов
- создание и редактирование почтовых ящиков
- управление ключами DKIM
- управление через API
- fail2ban
- управление квотами почтовых ящиков и писем
- управление очередями писем
- Управление каратнином
- Конфигурация и статистика Rspamd
- Почтовый роутинг
- Настройка системных оповещений
- Логирование всех выполняемых сервисов
- Настройка Алиасов
и многое другое
Задачи компании
Итак для компании со штатом сотрудников 40 человек, потребовался собственный почтовый сервер с низкими системными требованиями:
- Наличие web интерфейса для управления администратору
- Наличие удобного web интерфейса для пользователей
- Работа на 2 ядрах и 2гб оперативной памяти
- Наличие антивируса и антиспама
Установка Ubuntu 22.04LTS
Тестовую установку я проводил на vds хостинге firstvds.ru
Интерфейс VMnanager для управления виртуальной машиной:
Я уже перезалил виртуальную машину тремя щелчками мышки.
Параметры тестовой виртуальной машины
Всем советую эта машинка стоит всего 291руб/месяц
Настройка после установки
Повышаем наши права в системе:
sudo -s
Обновите пакетный список репозитория:
apt update
Обновляем пакеты дистрибутива:
apt upgrade -y
Установим nano, mc, git, curl:
apt install -y nano mc git curl
Устанавливаем имя нашему серверу:
hostnamectl set-hostname mail.company.ru
Регистрация записей в DNS
Прежде всего напишите вашему интернет провайдеру письмо, в котором попросите прописать PTR запись о вашем почтовике у себя в DNS.
Проверить можно командой:
nslookup -type=PTR ip_адрес --- или ---
dig -x ip_адрес
Если у вас нет домена, нужно приобрести советую nethouse.ru - работаю с ним не один год, всё DNS записи очень быстро обновляются.
Итак создаём запись типа А и MX:
mail.company.ru ip_адрес
MX 10 mail.company.ru
Проброс портов на маршрутизаторе
На маршрутизаторе нужно создать правило 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 адрес почтового сервера.
Установка mailcow
Запускаем скрипт установки Docker с официального канала:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
Включаем службу Docker:
systemctl enable --now docker
Переходим в каталог:
cd /opt
Клонируем с github каталог с движком mailcow:
git clone https://github.com/mailcow/mailcow-dockerized -- размер 36МБ
Переходим в каталог:
cd mailcow-dockerized
Запускаем конфигурационный скрипт
./generate_config.sh
Отвечаем на вопросы конфигуратора:
- Указываем FQDN: mail.company.ru
- Выбираем Time Zona: нажимаем Enter, так как автоматом подцепится системная зона
- Можно включить ClamAV
- И выбираем ветвь обновлений: master
Докачиваем все связанные с Mailcow контейнеры:
docker compose pull
Запускаем все контейнеры командой:
docker compose up -d
Все готово!!!
Отправляемся по адресу: https://mail.company.ru --- Дефолтный логин: admin и Пароль: moohoo
Настройка почтовика
Настроим автоматический redirect запросов с http на https:
Создаем файл 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;
}
}
Перезапускаем контейнер nginx:
docker compose restart nginx-mailcowdocker
Как видим Redirect работает.
В административной консоли первым делом измените пароль администратора, а лучше создайте другого как рекомендует система и добавьте администратора домена:
Далее в разделе Конфигурация выбираем Настройка почты
Добавляем домены и почтовые ящики
При добавлении домена обратите внимание на следующие пункты касаемые квот:
из основных настроек наверное все.
Сертификат Let's Encrypt
В mailcow контейнер "acme-mailcow" попытается получить сертификат для каждого добавляемого домена. Для каждого удаляемого домена сертификат будет перемещен и будет запрошен новый сертификат.
Запомните mailcow должен быть доступен на порту 80 для работы acme-клиента. Вы также можете использовать любой внешний клиент ACME (например, certbot) для получения сертификатов, но вам нужно будет убедиться, что они скопированы в правильное место.
Для повторного перезапуска клиента acme-mailcow используйте команду:
docker compose restart acme-mailcowdocker compose logs --tail=200 -f acme-mailcow.
Чтобы принудительно продлить сертификат, необходимо:
Перейти в каталог:
cd /opt/mailcow-dockerized
создать файл с именем force_renew:
touch data/assets/ssl/force_renew
перезапустить контейнер acme-mailcow:
docker compose restart acme-mailcow
Демонстрация административного интерфейса
Настройка сервера
Состояние сервера
Настройка почты
Есть возможность перезапускать контейнеры Mailcow и отслеживать занятость дискового пространства.
Просмотр журналов логирования служб
Демонстрация пользовательского интерфейса
Панель авторизации пользователей доступна по адресу: https://mail.company.ru/sogo
Пользовательский Вэб интерфейс c календарем и адресной книгой в которую автоматически заносятся почтовые ящики домена.
Миграция
Описываю процесс миграции со старого сервера на новый, при этом используем сценарий для создания полной резервной копии на исходном сервере и развертывании на новом, для этого используется скрипт:
/helper-scripts/backup_and_restore.shmailcow.conf
Выполняем действия по порядку:
1. Делаем бэкап исходного сервера.
2. Подготавливаем новый сервер по инструкции.
3. Останавливаем Docker:
systemctl stop docker.service
systemctl status docker.service
4. Останавливаем mailcow и Docker на старом сервере.
cd /opt/mailcow-dockerized
docker compose down
systemctl stop docker.service
5. Синхронизируем каталоги между серверами:
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
6. На новом сервере запускаем Docker:
systemctl start docker.service
7. Подтягиваем Docker образы mailcow:
cd /opt/mailcow-dockerized
docker compose pull
8. Запускаем контейнеры mailcow:
docker compose up -d
9. При необходимости меняем настройки DNS.
Вывод
Это безусловно один из лучших вариантов сборки почтового сервера, что я видел. Функционал поражает своими возможностями и при этом ничего лишнего, это вам не многофункциональный комбайн.
Нагрузка с точки зрения использования системных ресурсов в момент простоя почтовика:
Кстати, если планируете отсылать письма по gmail'ам не лишним будет добавить свой домен на специальную страницу: