- Почтовый сервер для компании на базе Ubuntu 22.04LTS + Mailu
- Возможности продукта:
- Системные требования
- Регистрация домена у провайдера и проброс портов маршрутизатора
- Подготовка сервера
- Установка Docker compose
- Свой Mail Server на Docker за 10 минут
- Постановка задачи
- Описание проекта
- Приступим к настройке
- ШАГ 0
- ШАГ 1
- ШАГ 2
- ШАГ 3
- ШАГ 4
- ШАГ 5
- ШАГ 6
- ШАГ 7
- ШАГ 8
- ШАГ 9: Оно работает!
- Заключение
Почтовый сервер для компании на базе Ubuntu 22.04LTS + Mailu
Mailu — это бесплатный и полнофункциональный почтовый сервер, аналог IredMail, реализованный в виде набора образов Docker. Проект направлен на предоставление пользователям легко настраиваемого, легко поддерживаемого и полнофункционального почтового сервера, при этом не поставляя проприетарное программное обеспечение или несвязанные функции, которые часто встречаются в популярном групповом программном обеспечении.
Возможности продукта:
- Стандартный почтовый сервер, IMAP и IMAP+, SMTP и отправка
- Расширенные функции электронной почты, псевдонимы, псевдонимы доменов, настраиваемая маршрутизация
- Веб-доступ, несколько веб-почт и административный интерфейс
- Функции пользователя, псевдонимы, автоматический ответ, автоматическая переадресация, выбранная учетная запись
- Функции администратора, глобальные администраторы, объявления, делегирование для каждого домена, квоты
- Безопасность, принудительный TLS, Letsencrypt!, исходящий DKIM, антивирусный сканер
- Антиспам с функцией авто обучение, серые списки, DMARC и SPF
- Freedom, все компоненты FOSS, без трекера
Системные требования
Поддерживаемые операционные системы:
Так как почтовый сервер организован на базе контейнеров Docker, его можно запустить на любом дистрибутиве Linux с установленным пакетом Docker.
Минимальные системные требования:
- Процессор: 1-но ядерный от 1Ггц
- Оперативная память: от 1ГБ
- Жёсткий диск: от 10ГБ
Установленный почтовый сервер Mailu на Ubuntu в режиме простоя потребляет следующие ресурсы:
Системные требования для сервера на 100 сотрудников:
Эта машинка на timeweb стоит всего 188руб/месяц — советую для тестов и мелких проектов.
Регистрация домена у провайдера и проброс портов маршрутизатора
Советую Питерского регистратора доменных имён Nethouse.ru, очень быстрый и качественный сервис, с моментальным обновлением DNS записей и приемлемой стоимостью доменных имён, в зоне ru — 150руб.
После покупки прописываем в разделе управления доменом dns записи:
- Запись типа А со значением белого ip адреса нашего маршрутизатора или виртуальной машины на vds хостинге, как в моем случае.
- Запись типа А с именем mail и значением нашего белого ip адреса
- МХ запись типа — @ mx mail.tuning-admina.ru
Mailu использует AutoMX(Авто обнаружение и автонастройка используется десктопными и мобильными почтовыми клиентами) для реализации этой функции, необходимо в DNS добавить записи CNAME:
_submission._tcp.tuning-admina.ru. 600 IN SRV 1 1 587 tuning-admina.ru.
_imap._tcp.tuning-admina.ru. 600 IN SRV 1 1 143 tuning-admina.ru.
_pop3._tcp.tuning-admina.ru. 600 IN SRV 1 1 110 tuning-admina.ru.
_imaps._tcp.tuning-admina.ru. 600 IN SRV 1 1 993 tuning-admina.ru.
_pop3s._tcp.tuning-admina.ru. 600 IN SRV 1 1 995 tuning-admina.ru.
Все основные настройки прописываем у провайдера в редакторе управления DNS записями.
На маршрутизаторе необходимо пробросить порты в зависимости от их в дальнейшем использования:
- 80, 443 — доступ к сайтам и панели управления
- 25,110,143,465,587,993,995— порты для хождения почты
Подготовка сервера
Повышаем наши права в системе:
apt update && apt upgrade -y
Устанавливаем дополнительные компоненты:
apt install mc nano wget net-tools -y
Устанавливаем имя нашему серверу:
hostnamectl set-hostname mail.tuning-admina.ru
Устанавливаем временную зону:
timedatectl set-timezone Europe/Moscow
Устанавливаем службу синхронизации времени:
Добавляем службу в автозагрузку:
systemctl enable chrony
Добавляем разрешающее правило для доступа по SSH с компьютера администратора:
ufw allow ssh from ip_address_admin
Добавляем разрешающее правило для необходимых портов нашему почтовому серверу:
ufw allow proto tcp from any to any port 25,80,443,110,143,465,587,993,995
Добавим службу в автозагрузку и запустим ее:
systemctl enable ufw && systemctl start ufw
Перед тем как продолжить перезагрузим систему:
Установка Docker compose
В репозиториях ubuntu присутствует Docker, проверяем версию:
apt show docker-compose
Package: docker-compose
Version: 1.29.2-1
apt install docker-compose -y
Свой Mail Server на Docker за 10 минут
В Интернетах много разных очень крутых сервисов, которые позволяют сделать свой почтовый сервис с собственными адресами. Однако, захотелось приключений и появилась тяга к созданию чего-нибудь своего. Зачем что-то делать просто, если можно причудливо?
Предпосылки, что и зачем описал тут: статья
Постановка задачи
Захотелось сделать собственный почтовый сервис, чтобы письма отправлял/получал, рассылки делал и интегрировался с другими сервисами (чтобы клубная платформа Vas3k могла отправлять письма). Плюс имел бы веб-интерфейс для администрирования.
Описание проекта
В GitHub создал проект, с помощью которого можно создать собственный почтовый сервис за 10 минут, используя Docker. Посмотреть все исходники можно тут: MyDockerMailserver
Что же оно умеет:
- Поддержка POP3, IMAP, SMTP с авторизацией. А еще могут быть ящики, которые только отправляют письма, но не умеют получать.
- TLS enforced: использование SSL-сертификатов. Как самоподписанных (self-signed, так и кастомных).
- Веб-интерфейс для доступа в почту (Roundcube).
- Возможность задания правил фильтрации почты через веб-интерфейс (RSPAMD).
- Защита от спама и вирусов в почтовых сообщениях 🙂 Спам-фильтр сам тренируется при переносе сообщений в спам! А еще есть Real Time Black Hole Lists (RBL) для блокировки известных спамеров.
- Поддержка универсальных почтовых адресов (Aliasing).
- Поддержка квот на почтовые ящики пользователей. С уведомлениями о превышении.
- Поддержка DKIM подписи.
- Веб-интерфейс для администрирования всего этого добра.
- Поддержка отправки почты через RELAY HOST.
- и т. д.
Приступим к настройке
Итак, если вы хотите создать свой почтовый сервис, но не обладаете достаточными знаниями в администрировании различных систем, то дальнейшая информация будет крайне полезна.
Необходимые средства для развертывания почтового сервиса:
- Сервер с Ubuntu и установленным Docker. Например, можно развернуть в Yandex.cloud, AWS, Azure, Digital Ocean.
- Доменное имя. (далее, для примера, будет использоваться несуществующее доменное имя domain.my).
- Wildcard SSL-сертификат для домена, либо выделенные сертификаты для sub-домена.
В статье предполагается, что почтовый сервис будет доступен по адресу https://mail.domain.my. При этом, на основном адресе будет развернут основной веб-сайт.
Автор использует обратный прокси jwilder/nginx-proxy для маршрутизации запросов туды-сюды по тому или иному адресу.
ШАГ 0
Почтовый сервер должен отправлять почту. А это позволено лишь не всем. По умолчанию, свой почтовый сервер не сможет отправлять сообщения популярным почтовым серверам.
Чтобы обойти это недоразумение есть разные способы (наверное). Простой способ — это использовать Relay сервис по отправке сообщений. Автор остановился на сервисе SendInBlue, который на момент написания этих строк по бесплатному тарифу предлагает отправку 300 сообщений в день.
Настройка SendInBlue не должно быть какой-то проблемой. Важно это сделать для вашего домена. В итоге, на странице https://account.sendinblue.com/advanced/api будут доступным необходимые данные для настройки RelayHost.
ШАГ 1
Подключаемся на сервер через SSH любым удобным доступным способом.
На сервере нужен какой-нибудь редактор текстовых файликов. Т.к. автор не смог выйти из VIM, то он использует Nano.
ШАГ 2
mkdir mailserver cd mailserver
git clone https://github.com/TopTuK/docker-mailserver.git
ШАГ 3
Если будем использовать RelayHost, то обязательно указываем соответствующие поля. Иначе, оставляем пустым. В целом, название переменных говорят сами за себя.
MYSQL_DATABASE=mailserver # Название mysql базы. Оставляем как есть MYSQL_USER=mailserver # Имя пользователя. Оставляем как есть MYSQL_PASSWORD=changeme # Пароль от базы. Меняем на свой MYSQL_ROOT_PASSWORD=changeme # Пароль от базы. Меняем на свой MAILNAME=mail.domain.my # Меняем на свой домен, где доступен mailserver POSTMASTER=postmaster@domain.my # Меням постмастера RELAYHOST= # указываем relayhost. Если используется sendinblue, то '[smtp-relay.sendinblue.com]:587' RELAY_PASSWD_KEY= # В случае sendinblue, то будет что-то вида 'user@domain.my:QQQYYYZZZ' RELAY_OPTIONS=noanonymous # Для работы Relayhost HEADER_SIZE_LIMIT=4096000 # Для работы Relayhost FILTER_MIME=false FILTER_VIRUS=true ENABLE_IMAP=true ENABLE_POP3=true ENABLE_FTS=true CONTROLLER_PASSWORD=changeme # Меняем на свой для доступа в RSPADM WAITSTART_TIMEOUT=2m RECIPIENT_DELIMITER=- FTS_ARGS="partial=3 full=20 verbose=0 lowmemory=256" FTS_VSZ_LIMIT=256M
ШАГ 4
Настраиваем использование своих SSL сертификатов
- Переходим в директорию certs: cd certs
- Создаем файлы сертификатов. Например, путем копирования их содержимого
Примечание: я сделал путем копирования содержимого файлов сертификатов, т.е. через Ctrl-C -> Ctrl-V. Название файлов с сертификатами может быть произвольным.
rm domain.* touch mail.domain.my.crt touch mail.domain.my.key # Копируем содержимое сертификатов в созданные файлики. Например, через nano cd ..
ШАГ 5
Конфигурируем файлы docker-compose.*
# Либо комментируем, либо удаляем # ssl: # image: jeboehm/mailserver-ssl:latest # build: ./ssl # env_file: .env # volumes: # - data-tls:/media/tls:rw
. # - data-tls:/media/tls:ro # Uncomment lines below and change left part for using your own certificates - ./certs/mail.domain.my.crt:/media/tls/mailserver.crt:ro - ./certs/mail.domain.my.key:/media/tls/mailserver.key:ro .
. # For use with jwilder/nginx-proxy. Uncomment this if you are using jwilder/nginx-proxy environment: - VIRTUAL_HOST=mail.domain.my .
. volumes: data-db: data-dkim: . # Comment line below if you are using your own certificates # data-tls: data-filter: . .
ШАГ 6
На данном шаге требуется сделать последние шаги перед запуском почтового сервиса. Сконфигурировать production параметры. Редактируем параметры docker-compose.production.yml
. # Remove this block if you are using jwilder/nginx-proxy reverse proxy # web: # ports: # - "0.0.0.0:81:80" .
. # Uncomment next block if you use jwilder/nginx-proxy reverse proxy networks: default: # Set your network name name: mynetwork .
ШАГ 7
Конфигурирование сделано. Настало время запустить почтовый сервис и убедиться, что все работает.
./bin/production.sh pull ./bin/production.sh build ./bin/production.sh up -d
- Проверяем, что сервисы запущены и инициализированы. Выполняем команду docker ps. В результате, что-то должно быть похоже на:
ШАГ 8
На этом шаге требуется создать первого пользователя администратора
Выполняем команду ниже, а потом отвечаем на простые вопросы, следуя инструкции.
./bin/production.sh run --rm web setup.sh
ШАГ 9: Оно работает!
В результате выполнения всех шагов выше все сервисы должны заработать в PROD.
- Админка (при обращении к mail.domain.my -> потом авторизация администратора).
- Веб-интерфейс почтового клиента (mail.domain.my/webmail)
- Настройка спам-фильтра (mail.domain.my/rspadm). Пароль для доступа указывали в параметре CONTROLLER_PASSWORD.
Заключение
Вот так, с помощью нехитрых приобщений можно превратить буханку черного (или белого) хлеба в троллейбус построить свой почтовый сервер буквально за 5-10 минут, имея манипулятор типа мышь и клавиатуру.
Считается, что если начать утро с прочтения данной статьи, то день сложится удачно и без хитростей. В доме будет царить благополучие и любовь! Если остались вопросы, прошу в комменты.