Почтовый сервер Postfix+Dowecot+Сервер групповой работы Sogo + авторизация в домене Samba

Материал из mediawiki.73-r.ru
Перейти к навигации Перейти к поиску

Почтовый сервер

Задача. Импортозамещение почтового сервера 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 .
  • Разрешение пользователям
  1. управлять фильтрации писем
  2. распределять письма по разным папкам
  3. перенаправлять письма
  4. отправлять уведомления об отсутствии на рабочем месте
  5. общие почтовые папки
  6. общие календари
  7. общие адресные книги
  8. веб-интерфейс, аналогичный Outlook Web Access
  9. поддержка протоколов 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=- . Параметр Postfix recipient_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
  1. В поле Selector: mail
  2. В поле Domain name: example.org
  3. Нажмите - Check
  • Для доступа к серверу RSPAMD откройте страницу https://mail.example.org/rspamd/ Введите пароль для доступа на станицу.
  • Перейдите на вкладку Сonfiguration.
  • Настройки:
  1. Greylist 4
  2. Probably Spam 6
  3. Rewrite subject 7
  4. Spam 150 (Письма гарантированно пройдут и попадут в папку "Спам")
  • Сохраните изменения. 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.