Проект

Общее

Профиль

2. Инструкция по установке почтового сервера Tegu

Мы написали для вас качественный код, а также написали эту инструкцию чтобы облегчить вам работу.
Пожалуйста прочтите эту документацию перед началом работ с Tegu.

Преамбула

Сервер написан на языке Golang и представляет собой один единственный исполняемый файл, который вы скачиваете для выбранной аппаратной архитектуры. Лицензия не ограничивает вас в выборе или смене аппаратной архитектуры.

Допускается использование Tegu на любом Линукс дистрибутиве, версия библиотеки GLIBC которого не ниже 2.28. В сложившейся ситуации приоритет разумеется отдается использованию отечественных ОС.

  1. Перед началом работ обратите внимание на настройку DNS-зоны. Правильно настроенная зона - это важнейшая половина работы. При этом настроить надо не только MX-запись, но и записи SPF и DKIM. Мы рекомендуем проводить тестирование каждого выполненного этапа работ. На страницах нашего сайта и в интернете вы можете найти массу сервисов и утилит для проверки настройки DNS-зон. Тестирование зон сэкономит ваше время на следующих этапах.
  2. Второе, что необходимо выполнить предварительно, подготовить сертификат будущего сервера, который используется для шифрования протоколов. Использование самоподписанных сертификатов вызовет ошибку.
  3. Некоторые дистрибутивы операционных систем содержат и по умолчанию запускают собственный почтовый сервер. К примеру на борту Alt Server уже установлен сервер postfix. Во избежание конфликта сетевых портов необходимо предварительно остановить или удалить ненужный сервер.
  4. Установка Tegu представляет собой по сути простое копирование исполняемого файла в заданную вами директорию. Чтобы программа могла выполняться и слушать заданные порты необходимо выполнять команду setcap (setcap необходимо также выполнять при обновлении дистрибутива).
    Этого достаточно чтобы выполнить запуск сервера системой systemd.
  5. При первом запуске сервер сформирует конфигурационный файл tegu.conf, в котором вы найдете сгенерированный административный пароль, с помощью которого сможете войти в веб-интерфейс настройки сервера. Все дальнейшие настройки можно выполнить в удобном GUI-интерфейсе.
  6. Контролируйте работу сервера с помощью команды journalctl -f -u tegu -n 100
  7. Итак, вы выполнили подготовительные этапы и запустили сервер (команда systemctl status tegu.service возвращает вам успешный статус). Самое время перейти к настройке. Ваш сервер может обслуживать любое количество интернет-доменов, но при этом надо соблюдать правило. Для каждого интернет домена необходимо создать хранилище почты (одно для каждого интернет-домена). Количество хранилищ не ограничено, каждое из них может быть двух типов: локальное в формате maildir, централизованное в СУБД Postgress. Источник Postgress роли не играет (ванильная, либо отечественная PosgresPro), версия - не ниже 13.
  8. Создав хранилище, необходимо выполнить создание провайдеров базы данных пользователей. Сервер может использовать любое количество собственных баз пользователей, а также подключения к любому количеству серверов каталогов любого типа (Windows AD, Samba4, FreeIPA etc). Другими словами, пользователи одного интернет-домена могут находиться на разных серверах каталогов, а также в локальной базе данных Tegu.
  9. Финальным этапом является подключение интивирусных/антиспамовых систем, либо DLP-систем, для чего Tegu оборудован протоколом Milter.

Более подробно о каждом этапе читайте в ниже следующей документации.

Вы также можете обратиться в техническую поддержку здесь Обратите внимание, что общаться с техподдержкой могут только зарегистрированные пользователи. Для получения аккаунта заполните форму

2.1. Настройка доменной зоны

Для корректной работы сервера необходимо правильно сконфигурить доменую зону.
Пожалуйста обратите внимание, что правильная настройка включает в себя не только создание записи типа MX, но и настройку SPF, DMARC и DKIM, а также обратной зоны, для чего вам придется обратиться к провайдеру канала интернет, на котором установлен сервер.

Рассмотрим эти записи не примере:

Хост

mail.test.tegu.online.          A     95.163.87.32
test.tegu.online.            MX     10    mail.test.tegu.online.

Sender Policy Framework (SPF)

test.tegu.online.            TXT     v=spf1 mx -all

Технология DomainKeys Identified Mail (DKIM)

Ключ DKIM создаётся в Панели управления почтовым сервером после его установки и запуска сервиса (tegu.service).
Запись для зоны DNS будет отображена после создания ключа.

Технология Domain-based Message Authentication, Reporting and Conformance (DMARC)

_dmarc.test.tegu.online.        TXT     v=DMARC1; p=quarantine; rua=mailto:abuse@test.tegu.online

Сразу же отправляем запрос владельцам внешнего адреса IP для настройки обратной записи DNS:

MAIL FROM: Кальметов Игорь <ikalmetov@mbk-lab.ru>
RCPT TO: <адрес владельца>

Прошу прописать следующую запись PTR в системе DNS:

95.163.87.32 -> mail.test.tegu.online.

Спасибо.

2.2. Установка сервера

Мы компилируем все редакции почтового сервера для двух аппаратных платформ x86_64 и AArch64 (ARM64) под управлением всех типов Linux, включая отечественные операционные системы ALT Linux, RedOS, AstraLinux, Rosa Linux и Calculate Linux.

При выборе дистрибутива критическим является не тип операционной системы, а версия GLIBC, которая в ней установлена. GLIBC — это библиотека GNU C (т.е. реализация стандартной библотеки C от GNU, которая является критичным компонентом инструментария GNU, используемым вместе с binutils и компилятором для сборки бинарных файлов). Очевидно, что разные версии одной и той же ОС имеют разные версии библиотеки GLIBC.

Принимая во внимание специфику сборки и сертификации отчественных ОС Linux, нужно понимать, что их версии GLIBC не всегда являются самыми свежими. Для обеспечения совместимости мы специально используем несколько более старую версию библиотеки при компиляции.

Таким образом, при выборе дистрибутива вам необходимо проверить, чтобы версия библиотеки вашей ОС была новее, чем версия, с которой скомпилирован Tegu.

Вы можете узнать версию вашей GLIBC с помощью команды:

$ldd --version

ldd (Ubuntu GLIBC 2.31-0ubuntu9.7) 2.31

Перед установкой обратите внимание, что все работы необходимо выполнять от имени root.
Для того, чтобы вы это не забыли мы выполним все команды с опцией sudo.

Распаковываем архив:

$ tar -xvf tegu-free-v1.17.20-x86_64.tar.gz 

tegu-free-v1.17.20-x86_64/
tegu-free-v1.17.20-x86_64/sbin/
tegu-free-v1.17.20-x86_64/sbin/tegu

Создаем структуру каталогов для сервера:

$ mkdir /opt/tegu
$ mkdir /opt/tegu/{bin,sbin,data,certs}

Копируем исполняемый файл в рабочий каталог:

$ cp tegu-free-v1.17.20-x86_64/sbin/* /opt/tegu/sbin/
$ cp tegu-free-v1.17.20-x86_64/bin/* /opt/tegu/bin/

Назначаем пользователя и права:

$ chown -R mail. /opt/tegu/{data,certs}
$ chgrp -R mail /opt/tegu/{bin,sbin}
$ chmod 750 /opt/tegu/{data,certs}
$ chmod -R 750 /opt/tegu/sbin
$ chmod -R 750 /opt/tegu/bin

Проверяем правильность создания каталогов и файлов, а также их прав:

$ ls -l /opt/tegu

Должно быть примерно так:

$ ls -l /opt/tegu
/opt/tegu:
итого 16
drwxr-x--- 2 root mail 4096 апр 11 14:32 bin
drwxr-x--- 2 mail mail 4096 апр 11 14:32 certs
drwxr-x--- 2 mail mail 4096 апр 11 14:32 data
drwxr-x--- 2 root mail 4096 апр 11 14:33 sbin

Настраиваем механизм запуска и управления:

$ nano /etc/systemd/system/tegu.service

Содержимое файла /etc/systemd/system/tegu.service должно быть таким:


[Unit]
Description=Tegu. MBK-Lab Mail Server

[Service]
ExecStart=/opt/tegu/sbin/tegu
User=mail
Group=mail
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

Разрешаем запуск сервера от имени непривелегированного пользователя

$ setcap CAP_NET_BIND_SERVICE=+eip /opt/tegu/sbin/tegu

Необходимо создать конфигурационный файл в /etc/tegu.conf со следующим содержанием:

$ nano /etc/tegu.conf

[global]
dataDir = /opt/tegu/data

[Log]
debug = true

[WEB]
adminPassword = admin
httpPort = 8888
httpsPort = 9999
ctlPort = 8899

И сменить права:

chown root.mail /etc/tegu.conf
chmod 640 /etc/tegu.conf

Во время первого запуска сервер будет искать свой файл конфигурации в следующем порядке:

  • /etc/tegu.conf
  • ~/tegu.conf (например, /var/mail/tegu.conf)

Если файл не был найден, то он будет создан по пути ~/tegu.conf

Для подробного логирования работы сервера измените значение параметра

debug = true

Значение параметра adminPassword используйте для регистрации в административном веб-интерфейсе (с логином admin). Читайте об этом подробнее в разделе "Настройка"

Разрешаем автозапуск сервера во время загрузки ОС

$ systemctl enable tegu.service

Эта команда создает символическую ссылку на копию файла сервиса в /etc/systemd/system/tegu.service в точке на диске, где systemd ищет файлы для автозапуска, а также обновляет конфигурацию systemd. Помните, что вы должны обновлять конфигурацию systemd всякий раз, когда меняете конфигурацию в файле /etc/systemd/system/tegu.service. Обновление выполняется командой sudo systemctl reload tegu.service

Запускаем сервер (вручную)

$ systemctl start tegu.service

Контролируем запуск сервиса (статус сервиса):

$ systemctl status tegu.service

Правильно работающий сервер возвращает примерно такое:

● tegu.service - Tegu. MBK-Lab Mail Server
     Loaded: loaded (/etc/systemd/system/tegu.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-04-11 13:58:09 MSK; 50min ago
   Main PID: 88519 (tegu)
      Tasks: 9 (limit: 9357)
     Memory: 3.3M
     CGroup: /system.slice/tegu.service
             └─88519 /opt/tegu/sbin/tegu

апр 11 13:58:09 systemd[1]: Started Tegu. MBK-Lab Mail Server.

Контролируем с помощью лога:

journalctl -f -u tegu -n 100

Если вы захотите остановить сервер используйте команду:

$ systemctl stop tegu.service

Проверить занимаемые программой порты можно командой:

netstat -tulpn | grep tegu

2.3. Настройка параметров сервера

Если все предыдущие шаги выполнены правильно, то вам становится доступной веб-панель администрирования сервером, в которой производятся все остальные настройки.

С помощью браузера зайдите на порт 8888 сервера (например, http://127.0.0.1:8888) и авторизуйтесь под администратором (логин admin) с паролем, указанным в конфиге в параметре adminPassword.

При первом запуске административного интерфейса вам будет предложено выбрать место хранения конфигурации:

  • Вы можете выбрать SQLite setings database для версии FreeWare или Professional (локальная база);
  • Либо PosgresSQL для версии Enterprise.

или

Сохраните введенные данные и сохраните параметры.

Сервер создаст файл конфигурации по указанному вами пути. Отредактируйте эти настройки или нажмите Назад для выхода в корневое меню.

Вы вошли в корневое меню управления сервером.

Взаимосвязь объектов сервера и последовательность настройки вам поможет понять следующая условная диаграмма.

2.3.1. Создание почтового хранилища Maildir

Приступаем к созданию хранилищ почты. Для этого выбираем пункт меню Хранилища почты

На данном этапе необходимо выбрать тип хранилища

или

Выбрав "Maildir storage" вы можете создать локальное хранилище.

Обратите внимание, что при создании хранилища maildir соответствующий каталог должен быть предварительно создан с правами RW для пользователя mail.

Права на катологи должны быть такими:

drwxr-x---

Выполним это с помощью команд:

$ mkdir /var/mail/test2
$ find /var/mail/test2 -type d -exec chmod 750 {} \;

Права на файлы должны быть такими:

-rw-r-----

которые устанавливаются командой

find /var/mail/test2 -type f -exec chmod 640 {} \;

Владелец и группа должны быть те, от которых запускается сервис tegu.
Например, mail.mail, которые устанавливаются командой

chown -R mail.mail /var/mail/test2

Для создания хранилища укажите:

  • Local mail domain name - интернет-домен, для которого создается хранилище
  • Root directory path of mail - каталог для хранения почты выбранного домена.

Завершив настройку, нажмите кнопку Добавить

Хранилище будет создано и вы попадете в диалог добавления нового хранилища.

2.3.2. Создание почтового хранилища СУБД

Как было сказано выше, если вы используете редакцию Tegu Enterprise, то вы можете создать хранилище почты в СУБД. С Tegu совместима любая версия от отечественного вендора PosgresPro , либо свободная версия от PostgeSQL . (версия - не ниже 13)

Создаем пользователя:

createuser -d -S -E -P postgres

Создаем 3 базы данных.

tegu_queue -база данных очередей
tegu_mailboxes - база данных почтового хранилища
tegu_settings - база данных настроек почтового сервера

createdb -E UTF-8 -O postgres tegu_queue
createdb -E UTF-8 -O postgres tegu_mailboxes
createdb -E UTF-8 -O postgres tegu_settings

Прописываем доступы с подсетей.

nano /var/lib/pgsql/data/pg_hba.conf

Смотрим какие базы данных у нас есть.

psql -U postgres -c "\l+" 

Удалить базы данных.

psql    
DROP DATABASE tegu_mailboxes;

Для создания хранилища в корневом меню выбираем Хранилища почты

Очевидно, что целесообразно разместить почтовый сервер Tegu и СУБД на различных вычислительных нодах (виртуальных или физических).
Установка сервера БД производится согласно официальной документации Postgre . По окончании установки вам необходимо создать пользователя с правами создания баз, которым будет пользоваться сервер Tegu, а также необходимо создать две базы
  • для хранения почты
  • для хранения конфигурации.

и, если необходимо

  • для очереди сообщений SMTP

Для всех БД пользователь этих БД должен иметь в них право CREATE.

Оптимизация БД, а также сборка отказоустойчивого решения БД, выходит за рамки установки почтового сервера и рассматривается в каждом конкретном случае по запросу. Интерес также представляет создание отказоустойчивой конфигурации базы данных, рассмотренное в данной статье .

2.3.3. Создание/подключение баз данных пользователей

Итак, для понимания структуры давайте еще раз взглянем на картинку архитектуры объектов сервера

Как видно, каждый интернет-домен обслуживается одним хранилищем почты (которое может быть любого из двух типов: maildir или СУБД). Количество интернет-доменов не ограничено.

При этом каждый интернет-домен может обслуживать пользователей из различных баз данных. Базы данных могут быть локальными, либо LDAP3 (куда входит в т.ч. и Windows Active Directory).
Можно предположить, что найдутся более одной базы, которые будут содержать данные одного и того же пользователя. Эту коллизию, необходимо разрешить организационными мероприятиями, но сервер разрешит ее следующим образом: обслужен будет пользователь, описанный в конфигурации первым, все остальные будут проигнорированы.

Для создания базы пользователей в корневом меню выберем пункт Провайдеры БД пользователей
Добавим базу данных кнопкой Добавить провайдер БД пользователей

В данном диалоге мы можем выбрать локальную базу пользователей пунктом JSON File User DB, либо подключиться к одному из серверов каталогов LDAP User DB

или

Далее заполняем либо имя и каталог размещения локальной базы данных, которая будет создана в формате JSON

После создания локальной базы пользователей в интерфейсе рядом с созданной базой появится кнопка "Панель управления", нажав на которую вы попадаете в интерфейс создания групп, пользователей и правил данной локальной базы.

Второй вариант базы пользователей - подключение к LDAP-серверу каталогов.

Обратите внимание! Почтовый сервер Tegu не синхронизирует данные ваших серверов каталогов. Это сделано специально для того, чтобы ни в каком случае не иметь возможности скомпрометировать учетные данные ваших пользователей. В момент, когда необходимо выполнить аутентификацию, сервер выполняет запрос к серверу каталогов в отношение одного пользователя, а выполнив аутентификацию очищает эти данные в памяти. По этой причине, осуществив подключение Tegu к LDAP-серверу, не ждите от него активности, ее не будет. Сервер обратится к LDAP только в момент аутентификации.

2.3.4. Загрузка лицензии

Для работы коммерческой редакции сервера вам потребуется загрузить файл лицензии. Это выполняется в пункте меню Система
Выберите кнопку Панель управления

Прочтите лицензионное соглашение

И нажмите кнопку Принять. Если вы не принимаете соглашение, загрузка лицензии невозможно и работа сервера будет остановлена.
В любой момент вы также можете прочесть Лицензионное соглашение к конечным пользователем на сайте компании.

Выберите опцию Загрузить файл лицензии

Выберите файл лицензии и нажмите Загрузить файл

Загрузка лицензии завершена.

2.4. Обновление почтового сервера

Останавливаем на всех нодах почтовый сервис.

systemctl stop tegu.service

переходим в папку opt

cd /opt

Скачиваем дистрибутив tegu

Распаковываем.

tar xvzf tegu-ent-v1.19.44-x86_64.tar.gz

h3.Переходим в распакованную папку

cd /opt/tegu-ent-v1.19.44-x86_64

Копируем содержимое папки bin

cp bin/* /opt/tegu/bin/

Консоль спросит: перезаписать содержимое, отвечаем да (y)

Копируем содержимое sbin

cp sbin/* /opt/tegu/sbin/

Чтобы можно было запускать от непривилегированного пользователя, необходимо выполнить:

setcap CAP_NET_BIND_SERVICE=+eip /opt/tegu/sbin/tegu

/opt/tegu/sbin/tegu – путь до исполняемого файла.

Запускаем почтовый сервер.

systemctl start tegu.service

Проверяем статус запущенной службы.

systemctl status tegu.service
● tegu.service - Tegu. MBK-Lab Mail Server
   Loaded: loaded (/etc/systemd/system/tegu.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-07-08 14:13:28 +07; 20s ago
 Main PID: 16047 (tegu)
    Tasks: 8 (limit: 2362)
   Memory: 23.7M
   CGroup: /system.slice/tegu.service
           └─16047 /opt/tegu/sbin/tegu

Обновление завершено

2.5. Более точные настройки сервера

Более точные настройки сервера смотрите в п. 6. Инструкция по эксплуатации

2.6. Проверка настроек сервера

Проверить все выполненные настройки сервера можно с помощью утилиты teguctl (идуще в комплекте дистрибутива)

Команда

# /opt/tegu/bin/teguctl dump

выведет всю конфигурацию сервера в тестовом формате.

Утилита teguctl поставляется с дистрибутивом (вы найдете ее в каталоге bin).

2.7. Установка и генерация сертификатов Letsencrypt.

Проверяем обновления пакетов

apt update

Устанавливаем Letsencrypt

apt install certbot

Получаем сертификат на свой почтовый домен

certbot certonly --standalone -m ваша_почта@yandex.ru -d mail.вашдомен.рф

Проверяем что сертификаты получены

cd /etc/letsencrypt/live/mail.вашдомен.рф/

ls

должны увидеть следующие файлы:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Нас интересуют fullchain.pem privkey.pem

Автоматизируем обновление сертификатов скриптами:

создаем папку work в папке root она нам чуть позже пригодится

mkdir work

Создаем в папке Letsencrypt hook со следующим содержанием:

nano /etc/letsencrypt/renewal-hooks/deploy/hook01

#!/bin/sh
do
        if [ "$domain" = mail.вашдомен.рф ]
        then
                /root/work/tegu_certs
                /bin/systemctl restart tegu
        fi
done

Делаем его исполняемым

chmod +x /etc/letsencrypt/renewal-hooks/deploy/hook01

Далее создаем еще один скрипт

nano /root/work/tegu_certs
и прописываем в нем следующие строки
#!/bin/bash
cat /etc/letsencrypt/live/mail.вашдомен.рф/fullchain.pem > /opt/tegu/certs/cert.pem
cat /etc/letsencrypt/live/mail.вашдомен.рф/privkey.pem > /opt/tegu/certs/key.pem
chgrp mail /opt/tegu/certs/*
chmod 640 /opt/tegu/certs/*

Делаем скрипт исполняемым

chmod +x /root/work/tegu_certs

Меняем группу владельцев

chgrp root /etc/letsencrypt/archive/mail.вашдомен.рф/*

Запускаем скрипт

/root/work/tegu_certs

Проверяем результат отрабатывания скрипта

ls -lh /opt/tegu/certs/

В этой папке должны появится сертификаты

cert.pem key.pem

Соответственно в основных настройках почтового сервера мы указываем следующие пути к сертификатам.

/opt/tegu/certs/cert.pem
/opt/tegu/certs/key.pem

Должно получиться так.

После того как сертификаты сгенерированы и прописаны на почтовом сервере, в основных настройках необходимо включить опцию "Требовать шифрования TLS/SSL для авторизации"

Перезапустим почтовый сервер:

systemctl restart tegu

После того как все настройки выполнены только теперь можно проверять какие порты слушает почтовый сервер.

netstat -lnp

2.8 Интеграция с Active Directory и OpenLDAP.

Пример настроек для подключения к Active Directory.

Пример настроек для подключения к OpenLDAP.