Почтовый сервер Postfix+Dowecot+Сервер групповой работы Sogo + авторизация в домене Samba
Почтовый сервер
Задача. Импортозамещение почтового сервера
Microsoft Exchange.Docker mail server ldap- это полнофункциональный почтовый сервер, представляющий собой набор образовDocker.
- Решение основано на использовании
Dockerконтейнеров образовAltLinux server 10.1. - Пользователи расположены в домене
Active Directory, расположенном на контроллере сSamba DC. SOGo— сервер групповой работы, аналогичныйMicrosoft Exchange.
Основные возможности:
- Получение писем
- Фильтрация спама и вредоносных программ
- Отправка писем
- Шифрование всех соединений (по возможности)
- Добавление
DKIMподписи к отправляемым письмам - Хранение писем на диске сервера
- Использование квот (ограничение размера почтовых ящиков) пользователей.
- В связи с тем, что информация о пользователях хранится в LDAP AD, для всех пользователей установлена единая квота 2Gb на ящик + еще 100Mb на корзину.
- Сейчас квота жестко зашита в файле
docker-mail-server-ldap/dovecot/rootfs/etc/dovecot/conf.d/90-quota.conf.
- Разрешение пользователям
- управлять фильтрации писем
- распределять письма по разным папкам
- перенаправлять письма
- отправлять уведомления об отсутствии на рабочем месте
- общие почтовые папки
- общие календари
- общие адресные книги
- веб-интерфейс, аналогичный Outlook Web Access
- поддержка протоколов CalDAV, CardDAV, GroupDAV, IMAP и SMTP
Отдельные контейнеры, используемые в проекте
| Контейнер | Описание | Источник | Порты |
|---|---|---|---|
| postgres | База данных для SOGO | В проекте используется сборка на основе AltServer 10.1 | port 5432 (снаружи недоступно) |
| sogo | сервер групповой работы | В проекте используется сборка на основе AltServer 10.1 | port 443, https://mail.example.org |
| nginx | Прокси сервер с поддержкой получения сертификатов LetsEncript(отключается в .env.dist, переменная LETSENCRYPT=false), прокси для SOGO, прокси для web интерфейса RSPAMD (доступ ограничен по IP) | В проекте используется сборка на основе AltServer 10.1 | port 80 для подтверждения домена LetsEncript, port 443 прокси к сервисам SOGO, RSPAMD |
| postfix | smtp сервер | В проекте используется сборка на основе AltServer 10.1 | SMTP 25 порт, submission 587(STARTTLS) |
| dovecot | IMAP, POP3, LMTP, Sieve сервер | В проекте используется сборка на основе AltServer 10.1 | imap 110, imaps 143(STARTTLS), imaps 993(SSL), pop3s 995, lmtp port 2003 (снаружи недоступно), sasl port 2004 (снаружи недоступно), managesieve 4190 (STARTTLS) |
| filter | Сервер Rspamd | В проекте используется сборка на основе AltServer 10.1 | port 11332 для общения с Postfix(снаружи недоступно), Web сервер статистики port 11334, снаружи https://mail.example.org/rspamd/ |
| redis | Сервер БД redis для Rspamd | В проекте используется сборка на основе AltServer 10.1 | port 6379, снаружи недоступно |
| virus | Сервер антивирус Clamav | В проекте используется сборка на основе AltServer 10.1 | port 3310 для общения с Rspamd(снаружи недоступно) |
Предварительная настройка
Директория для сообщений пользователей
В данной сборке пользовательские письма хранятся в директории /mail сервера в формате Maildir. Если не настроить, то при запуске ./setup.sh в дальнейшем, будет предпринята попытка создания папки.
sudo mkdir /mail
chmod 777 /mailНастройка Samba DC
- Необходимо предварительно развернуть сервер
Samba AD DC - Создать в домене отдельного пользователя
Samba userс паролемSamba user_pass(при запросе дважды ввести пароль)Далее при запуске скрипта ./setup.sh Вас попросят ввести эти данные
Please enter Samba user: (введите имя пользователя Samba, созданного выше)Please enter Samba user_pass: (введите пароль пользователя Samba)
- На сервере Samba
- Следует в файл
/etc/openldap/ldap.confдобавить опциюTLS_REQCERT allow- Перезапустить службу
samba:# systemctl restart samba
- Перезапустить службу
- Следует в файл
- Проверить доступность контроллера домена по доменному имени командой, например:
ping DC.SAMBA.LAN.
Настройка DNS
Прежде чем начать установку почтового сервера, необходимо настроить DNS для почтового домена.
Имя хоста почтового сервера.
Почтовый сервер должен иметь уникальное имя хоста. Это имя является полным доменным именем и указывает на IP адрес вашего сервера. Например, если ваш почтовый домен называется example.org, то имя хоста почтового сервера может называться mail.example.org.
Убедитесь что в DNS есть запись для вашего имени хоста
mail.example.org. IN A x.x.x.x
где x.x.x.x это IP адрес внешнего интерфейса вашего сервера. Исключением является сервер в DMZ. В этом случае вы должны использовать перенаправление портов с публичного IP адреса на ваш сервер.
MX запись.
Для каждого вашего почтового домена в DNS должна быть MX запись. С помощью этой записи другие почтовые сервера определяют имя хоста вашего почтового сервера. А потом имя хоста разрешается в IP адрес с помощью записи A в DNS.
Для домена example.org MX запись будет выглядеть так
example.org. IN MX 10 mail.example.org.
Для другого вашего домена mydomen1.com MX будет выглядеть так
mydomen1.com IN MX 10 mail.example.org.
Запись в обратной зоне DNS.
Для почтового сервера настоятельно рекомендуется настроить запись в обратной зоне DNS. Если ваше DNS имя mail.example.org разрешается в IP x.x.x.x, то и ваш IP x.x.x.x должен разрешаться в DNS имя mail.example.org
Проверить это можно командой nslookup x.x.x.x
Запись в обратной зоне доступна к изменению владельцу IP адреса, обычно это ваш провайдер. Если не настроить правильно обратную зону, большинство почтовых серверов будут отмечать ваши письма как SPAM.
DKIM, SPF, DMARC записи.
DKIM запись для доменов будет создана в процессе установки. Посмотреть ее можно командой cat filter/dkim/mail.pub
mail._domainkey IN TXT "v=DKIM1; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72iwPIqgo7Q91GEgNPafzwavpIYW0pm5Lm6T7Z65AcRS6R/acAZUaCLJiqZp8LpUwiUnjsCo0r2rOwMEGO83BQoe3kXdGUdgnngOYvS+AiQP5QOd9vZfYkhgAMrR9KAdl9dMaq1cd9PkxV4aQRwu2xiuXJfDZIMtSCn/25MaaiCUROw7VZmi/J/As/z1ya1lfXGS6Iy2yC0zbrO8G""wMoeM4YqyabONDJx4CpkynQ7WOexu27SClalNv0tIme7xSyKK2KDBf4ZmbUyWaZzz4/dDKUFJs3JAolFFoo/JGr7rI7d/JSO0ruUJyPM2pwv0NcO6E+0D28VVbAnWK3X7uQMQIDAQAB"
SPF запись может выглядеть так
@ IN TXT "v=spf1 a mx ip4:x.x.x.x ~all"
DMARC запись
_dmarc IN TXT "v=DMARC1;p=none"
Установка
- Запустите
git clone https://gitlab.com/argo-uln/docker-mail-server-ldap.git - Перейдите в директорию
cd docker-mail-server-ldap - Перед установкой можно изменить переменные в файле .env.dist. Они описаны в таблице ниже. Часть из переменных заполняется после запуска файла предварительной настройки
./ setup.sh(описан ниже по тексту).
| Переменная | Описание |
|---|---|
| CONTROLLER_PASSWORD=_RSPAMD_ | # Значение RSPAMD web access password из ./setup.sh
|
| DOMAIN=_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| MAILNAME=_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| POSTMASTER=admin@_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| RELAYHOST=false | # false - не использовать, укажите имя smtp сервера, если необходимо пересылать все письма на удаленный хост
|
| FILTER_MIME=false | # Включить/Отключить проверку типов файлов на уровне Postfix. Дополнительно Отредактируйте файл docker-mail-server/postfix/rootfs/etc/postfix/mime_header_checks
|
| FILTER_VIRUS=false | # Включить/Отключить проверку на вирусы |
| ENABLE_IMAP=true | # Включить/Отключить IMAP
|
| ENABLE_POP3=true | # Включить/Отключить POP3
|
| CONTROLLER_SECURE_NETWORK=172.16.0.0/12 | |
| RECIPIENT_DELIMITER=- | # Параметр Postfix recipient_delimiter. Он позволяет вам отправлять письма снаружи на user-всечтоугодно@example.com. Письмо будет доставлено в ящик user@example.com.
|
| TZ=Europe/Moscow | # Timezone, if set will be written to container's /etc/timezone
|
| LETSENCRYPT=false | # Включить/Отключить автоматическое получение и обновление сертификата |
| LE_EMAIL=admin@_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| LE_FQDN=_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| IP_ALLOW=_IPALLOW_ | # IP для доступа к WEB RSPAMD из ./setup.sh
|
| SAMBA_HOST=_SAMBAHOST_ | # Значение Samba host из ./setup.sh
|
| SAMBA_DOMAIN=_SAMBADOMAIN_ | # Значение ДОМЕН Samba из ./setup.sh
|
| SAMBA_USER=_SAMBAUSER_ | # Значение Samba user из ./setup.sh
|
| SAMBA_PASS=_SAMBAPASS_ | # Значение Samba user_pass из ./setup.sh
|
| POSTGRES_PASSWORD=_POSTGRESPASS_ | # Значение postgres admin password из ./setup.sh
|
| SOGO_PASS=_SOGOPASS_ | # Значение sogo user password из ./setup.sh
|
- Параметр
RELAYHOST=false. Есть возможность отправлять всю исходящую почту на другой сервер. По умолчаниюfalse- не использовать. Укажите имяsmtpсервера, если необходимо пересылать все письма на удаленный хост - Параметр
FILTER_MIME=false. Включить/Отключить проверку типов файлов на уровнеPostfix. После включения отредактируйте файлdocker-mail-server/postfix/rootfs/etc/postfix/mime_header_checks. По умолчанию отбрасываются вложения с расширениями bat, com, exe, dll, vbs,docm, doc, dzip.
/name=[^>]*\.(bat|com|exe|dll|vbs|docm|doc|dzip)/ REJECT- Параметр
FILTER_VIRUS=false. Включить/Отключить проверку на вирусы - Параметр
ENABLE_IMAP=trueВключить/Отключить протоколIMAP - Параметр
ENABLE_POP3=trueВключить/ОтключитьPOP3 - Параметр
CONTROLLER_SECURE_NETWORK. Описывает подсеть внутри Docker для работы RSPAMD с postfix.
- Параметр
RECIPIENT_DELIMITER=-. Параметр Postfixrecipient_delimiter. Он позволяет вам отправлять письма снаружи наuser-всечтоугодно@example.com. Письмо будет доставлено в ящикuser@example.com. Обратите внимание на этот параметр при создании адресов почтовых ящиков. В нашем случае в почтовом адресе пользователя до "собаки" не должно быть дефиса, он зарезервирован в параметреRECIPIENT_DELIMITER - Параметр
TZ=Europe/Moscow. Используется вNginxдля корректной установки timezone. Доработать во все контейнеры!!! - Параметр
LETSENCRYPT=false. Включить/Отключить автоматическое получение и обновление сертификата
- В файле
docker-compose.ymlжестко зафиксирована подсеть, которая будет использована контейнерами Docker- subnet: 172.16.238.0/24При необходимости ее можно исправить. Также придется поправить переменнуюMYNETWORKS=127.0.0.0/8\ 172.16.238.0/24в файлеpostfix/rootfs/usr/local/bin/entrypoint.shЕсть еще переменнаяCONTROLLER_SECURE_NETWORK=172.16.0.0/12в файле .env.dist она используется в файлеfilter/rootfs/usr/local/bin/entrypoint.shРАЗОБРАТЬСЯ, объединить в одну переменную!!!!!!
- Сертификаты
- Если мы используем свои сертификаты, то необходимо отключить получение сертификата
Letsencrypt - В файле
.env.distустановить значение переменнойLETSENCRYPT=false - Скопировать сертификат в директорию
docker-mail-server/nginx/ssl - Файлы сертификатов должны называться
le-crt.pem- файл сертификата с цепочкой сертификатов СЦle-key.pem- закрытый ключ (права на файл 0600, владелец root:root )le-chain-crt.pem- цепочка сертификатов СЦ
- Если мы используем свои сертификаты, то необходимо отключить получение сертификата
- Права на папку docker-mail-server-ldap/filter/dkim . Если не настроить, то при запуске ./setup.sh в дальнейшем, будет предпринята попытка изменения прав.
chown 0777 filter/dkim- Запустите файл предварительной настройки
./setup.sh. Please enter FQDN hostname:(введите полное имя хоста, пример mail.example.org)Please enter mail domain: (введите имя вашего домена, пример example.org)Please enter Samba host: (введите полное имя сервера контроллера домена Samba)Please enter Samba domain: (введите имя Samba домена)Please enter Samba user: (введите имя пользователя Samba, созданного выше)Please enter Samba user_pass: (введите пароль пользователя Samba)Please enter postgres admin password for user postgres: (введите пароль для администратора базы данных Postgres)Please enter sogo user password for postgres: (введите пароль пользователя sogo базы данных Postgres)Please enter RSPAMD web access password: (введите пароль для вебинтерфейса RSPAMD)Please enter the ip addresses separated by a space to access the service rspamd. Default, access to them is closed: (введите ip адреса через пробел с которых будет предоставлен доступ к rspamd)- Далее будет предложено
You can start the build and run with the command: docker-compose up -d(запустите команду для установки и настройки сервиса почтового сервера) - Запустите команду
docker compose upи подождите, пока контейнеры соберутся и запустятся. - Откройте web интерфейс почты
https://mail.example.org. - Пропишите
dkimзапись вdnsзону вашего домена. Для получения ключа запустите командуcat filter/dkim/mail.pub
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=ваш-dkim-ключ" );- Вы можете проверить ваш ключ на сервисе https://dkimcore.org/tools/keycheck.html
- В поле
Selector: mail - В поле
Domain name: example.org - Нажмите -
Check
- Для доступа к серверу
RSPAMDоткройте страницу https://mail.example.org/rspamd/ Введите пароль для доступа на станицу. - Перейдите на вкладку
Сonfiguration. - Настройки:
Greylist4Probably Spam6Rewrite subject7Spam150 (Письма гарантированно пройдут и попадут в папку "Спам")
- Сохраните изменения.
Save action,Save cluster. - Протестируйте ваши письма на спам на сайте https://www.mail-tester.com/
Обратите внимание: В случае обнаружения вируса в письме, оно будет отброшено.
Вот так выглядит веб интерфейс почтового ящика.
Разное
Как создать групповой почтовый адрес
Чтобы создать групповой почтовый адрес (алиас) необходимо в домене Samba создать группу, например all_users. В эту группу добавить пользователей, например user1@domain.com и user2@domain.com. Группе назначить имя "Все пользователи", а так же почтовый адрес, например all_users@domain.com. Почтовый адрес группы отразится в "Общей адресной книге".
При отправке сообщения на этот групповой адрес, сообщения получат пользователи user1@domain.com и user2@domain.com.




