Почтовый сервер на Debian / ALT / Astra / RedOS — опыт портирования Ansible Playbook

от автора

История начинается в 2017-м году — когда мне потребовался самодельный почтовый сервер на связке Postfix + Dovecot + Roundcube + LDAP-каталог (AD на тот момент). Сказано — сделано — времени ушло прилично (делалось для FreeBSD), но зато много в чем получилось досконально разобраться. И естественно была составлена приличная статья-портянка в личной DokuWiki.

В 2021-м году адаптировали под Debian 11. В 2022-м был написан Ansible Playbook, который все делал автоматически, экономя пару часов времени ))) и нервов тоже изрядно экономил.

И вот наконец, неделю назад, была поставлена задача попробовать адаптировать данный Playbook к отечественным ОС (к 3-м самым распространенным, как видно из темы).
Если не хочется читать и погружаться в детали — все результаты выложены по ссылке (текущая версия Wiki + 4 архива Ansible Playbook).

LDAP-каталог

Первоначально все создавалось и тестировалось на Active Directory. В процессе адаптации на этой неделе все тестировалось на ALT Linux Domain (Samba). Основное отличие в том, что по умолчанию требует LDAPS. Для того, чтобы не сильно тратить время, на этапе портирования было принято решение это отключить в Samba (параметр ldap server require strong auth = no в файле /etc/samba/smb.conf). Просьба не ругаться, понятно, что лучше адаптировать к TLS (припрет — сделаю — но пока так).

Общая структура Ansible Playbook во всех вариантах

[egorhomelinux Ansible]# tree . ├── ansible.cfg ├── hosts ├── id_rsa ├── postfix.yml └── Templates     ├── Dovecot     │   ├── conf.d     │   │   ├── 10-auth.conf.template     │   │   ├── 10-logging.conf.template     │   │   ├── 10-mail.conf.template     │   │   ├── 10-master.conf.template     │   │   ├── 10-ssl.conf.template     │   │   ├── 20-imap.conf.template     │   │   ├── 90-quota.conf.template     │   │   └── auth-ldap.conf.ext.template     │   └── dovecot-ldap.conf.ext.template     ├── mailserver.test.ru.pem     ├── Postfix     │   ├── aliases.cf.template     │   ├── main.cf.template     │   ├── transport.cf.template     │   └── users.cf.template     ├── Roundcube     │   ├── composer.json     │   ├── config.inc.php.template     │   ├── LDAP3.php     │   ├── paths-ldap3.txt     │   └── Result.php     └── synsol.pem

Главный файл понятно postfix.yml — посмотрим на его начало во всех 4-х вариантах:

- hosts: debian    vars:     apt_env:       DEBIAN_FRONTEND: noninteractive                   # Устанавливать пакеты с автоответом на вопросы     postfix_uid: 103                                    # User ID     postfix_gid: 111                                    # Group ID     myhostname: mail.domain.alt                         # Имя почтового сервера (FQDN)     mydomain: domain.alt                                # Имя почтового домена @test.ru     mynetworks: 127.0.0.0/8                             # Открытый Relay для SMTP сервера Postfix     virtual_mailbox_base: /mbx                          # Расположение писам в формате Maildir     domain_controller_ip: 10.200.118.10                 # IP-адрес доменного контроллера     search_base: DC=domain,DC=alt                       # Контейнер, где находятся учетные записи с атрибутами mail     bind_dn: CN=Administrator,CN=Users,DC=domain,DC=alt # Сервисная учетная запись для LDAP запросов от Postfix/Dovecot/RoundCube     bind_pw: XXXXXXXXXXXXX                              # пароль     sslpem: mailserver.test.ru.pem                      # SSL-сертификат для Postfix/Dovecot/Apache2     imap_quota_ldap_attribute: st                       # Аттрибут для хранения значения IMAP4-квоты в байтах    tasks:     - name: Install MailServer Software       apt:         pkg:           - htop                        # Диспетчер процессов           - dstat                       # Анализ производительности сети и дисков           - net-tools                   # сетевые утилиты ifconfig и route           - dnsutils                    # DNS-утилиты nslookup и dig

В принципе все параметры говорят сами за себя. Проблемы были с UID/GID от Postfix — везде параметры разные от системы к системе (Dovecot у меня лезет в ящики тоже с этими ID-никами — на Astra сразу возникли с этим проблемы (Parsec), на RedOS тоже (SELinux). В Playbook-ах это учтено чуток. В Wiki это описано в подразделах. Понимаю, что можно было заморочиться и сразу после установки Postfix узнать текущие UID/GID (из файлов /etc/passwd и /etc/group) — далее это все в переменные и потом уже их использовать для подстановки в Template. Не сделал, чтобы не перегружать Playbook (но я так умею, да да!).

В каталоге Template лежат настроенные конфиги от Postfix/Dovecot/Roundcube — и прописанными в нужных местах {{ variable }} переменными. С ними кстати практически не было особых проблем при портировании.

Первый task в Playbook естественно установка пакетов. В описанных вариантах у меня apt, apt_rpm и dnf. 4 Linux, 3 варианта. Это Linux, че Вы хотели ))) Тут у всех свой набор, свои тараканы. В Astra вообще нет Roundcube, поэтому установка крайней версии их архива.

Особенности адаптации к ALT Linux Server 10.1

  • в самом начале в секции apt нужно указать apt_rpm, так как в ALT немного другой APT

  • из каталога /etc/control.d/facilities нужно убрать все файлы, которые контролируют службы Postfix/Dovecot

  • в файле main.cf службы Postfix (SMTP) нужно добавить: compatibility_level = 3.6 и virtual_minimum_uid = 1

  • в файле master.cf службы Postfix (SMTP) нужно раскомментировать строчку smtp inet n — y — — smtpd

  • В настройки Ansible в файле ansible.cfg нужно явно указать версию Python 3.x: interpreter_python = /usr/bin/python3

  • Настройки WEB-сайта с RoundCube находятся по другому пути: /etc/httpd2/conf/extra-available/roundcube.conf

  • uid и gid от Postfix в ALT Server не совпадают с Debian (а они в множестве файлов используются). Исправляем

  • Если у нас LDAP-сервер не Active Directory — а, например, ALT Linux Domain на Samba — отключите LDAPS в /etc/samba/smb.conf (параметр ldap server require strong auth = no).

Механизм control кстати сильно напряг — не сталкивался ранее с ним, хотя что-то на ALT поднимал и не раз. Но вот именно на Postfix он для меня стал неким препятствием )))

Особенности адаптации к Astra Linux

Главное — мы ходим юзером и через sudo повышаем свои привилегии:

root@astra:~/Ansible# cat ansible.cfg [defaults] inventory = /root/Ansible/hosts remote_user = user private_key_file = /root/Ansible/id_rsa host_key_checking = False  [privilege_escalation] become                  = true become_method           = sudo become_user             = root become_ask_pass         = false default_become          = true

Остальное смотрите в WiKi. Вообще даже в версии Орел была ругань на MAC и смену UID-ов. Мне не понравилось ))) Но работает.

Особенности адаптации к RedOS

  • Отключить SELinux (в Playbook есть)

  • Пакетный менеджер — dnf (не apt и не apt_rpm)

Для RedOS делал последним адаптацию — и честно говоря уже на Roundcube я подустал — поэтому не дописал. Но если Вы прочитаете WiKi — легко сделаете сами. Я в Вас верю, дорогие читатели!

Что в итоге

Получили 4 набора Ansible, которые позволят по быстрому поднять почтарь (SMTP/POP3/IMAP4) с интеграцией в LDAP (AD/Samba), WEB-интерфейсом (Roundcube) и адресной книгой в LDAP (уже донастроен Roundcube). Тыц тыц и в продакшн, как иначе.
Ну и конечно если все внимательно прочитать и попробовать — хорошее понимание, как работают Postfix/Dovecot и их интеграцию с чем либо (LDAP/SQL/etc).

А еще по моему личному мнению мы получим работающий вариант отечественного почтового сервера (понятно, что без ФСТЭК-сертификатов и без нахождения в реестре отечественного ПО). Но это спорный вопрос аля курицы и яйца. Если мы купили отечественную ОС и поставили софт на нее из отечественного репозитория — является ли полученное решение отечественным (импортозамещенным). Я считаю что да, кто то считает что нет. Но правильно обратиться к юристам и создать прецедент. Тоже самое про СУБД из отечественных репозиториев и т.д. Рано или поздно должна быть ясность в этих вопросах, я так считаю. Пока же все мнения — лишь мнения, окончательную точку нужно ставить юридически правильно (ладно, все это лишь повод поспорить — но у меня реально иногда пригорает от не проработанности этого вопроса — является ли весь софт из отечественного репозитория кашерным. Например внутри RuPost сидят Postfix/Dovecot — и все, мы тоже так хотим. Но не покупая RuPost).

В конце статьи маленький опрос — каким почтовым сервером Вы пользуетесь в настоящее время. Всем спасибо за потраченное время и мнения!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Каким почтовым сервером Вы пользуетесь в настоящее время

21.43% MS Exchange21
6.12% Kerio Connect6
9.18% Zimbra9
10.2% iRedMail10
27.55% Самосбор27
2.04% hMailServer2
0% Communigate0
14.29% RuPost14
20.41% Yandex/VK/Mail — российские облачные с админкой20

Проголосовали 98 пользователей. Воздержались 17 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/771598/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *