<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vovan</id>
	<title>wiki.nntc.nnov.ru - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vovan"/>
	<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Vovan"/>
	<updated>2026-10-15T21:51:39Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11469</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11469"/>
		<updated>2026-09-16T18:10:26Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт получения адресных книг из аккаунтов zimbra */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Оставляем в доверенных сетях только локальную петлю и устанавливаем параметр non_smtpd_milters в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'mynetworks = 127.0.0.0/8' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
===Скрипт получения адресных книг из аккаунтов zimbra===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; export_all_contacts.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Проверяем, запущен ли скрипт от пользователя zimbra&lt;br /&gt;
if [ &amp;quot;$(whoami)&amp;quot; != &amp;quot;zimbra&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: этот скрипт должен запускаться от имени пользователя zimbra.&amp;quot;&lt;br /&gt;
    echo &amp;quot;Выполните: su - zimbra&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
OUTPUT_DIR=&amp;quot;/tmp/zimbra_all_contacts&amp;quot;&lt;br /&gt;
FINAL_FILE=&amp;quot;/tmp/zimbra_all_contacts_combined.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Создаем рабочую директорию: $OUTPUT_DIR&amp;quot;&lt;br /&gt;
rm -rf &amp;quot;$OUTPUT_DIR&amp;quot;&lt;br /&gt;
mkdir -p &amp;quot;$OUTPUT_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Получаем список активных почтовых ящиков...&amp;quot;&lt;br /&gt;
ACCOUNTS=$(zmprov -l gaa)&lt;br /&gt;
&lt;br /&gt;
if [ -z &amp;quot;$ACCOUNTS&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: не найдено ни одного аккаунта.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
COUNT=0&lt;br /&gt;
SUCCESS=0&lt;br /&gt;
&lt;br /&gt;
for account in $ACCOUNTS; do&lt;br /&gt;
    COUNT=$((COUNT + 1))&lt;br /&gt;
    # Убираем недопустимые символы для имени файла, если такие вдруг будут&lt;br /&gt;
    safe_name=$(echo &amp;quot;$account&amp;quot; | tr '/' '_')&lt;br /&gt;
    file_path=&amp;quot;$OUTPUT_DIR/${safe_name}.csv&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Экспортируем контакты конкретного ящика&lt;br /&gt;
    zmmailbox -z -m &amp;quot;$account&amp;quot; getRestURL &amp;quot;/Contacts?fmt=csv&amp;quot; &amp;gt; &amp;quot;$file_path&amp;quot; 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # Проверяем, скачался ли непустой файл (минимальный CSV содержит хотя бы заголовки)&lt;br /&gt;
    if [ -s &amp;quot;$file_path&amp;quot; ]; then&lt;br /&gt;
        SUCCESS=$((SUCCESS + 1))&lt;br /&gt;
    else&lt;br /&gt;
        # Удаляем пустые файлы, чтобы они не мешали&lt;br /&gt;
        rm -f &amp;quot;$file_path&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Экспорт завершен. Успешно выгружено ящиков с контактами: $SUCCESS из $COUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Объединяем файлы в один&lt;br /&gt;
if [ $SUCCESS -gt 0 ]; then&lt;br /&gt;
    echo &amp;quot;==&amp;gt; Объединяем файлы в один общий: $FINAL_FILE&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Берем заголовки из самого первого попавшегося файла&lt;br /&gt;
    FIRST_FILE=$(ls &amp;quot;$OUTPUT_DIR&amp;quot;/*.csv | head -n 1)&lt;br /&gt;
    head -n 1 &amp;quot;$FIRST_FILE&amp;quot; &amp;gt; &amp;quot;$FINAL_FILE&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Склеиваем содержимое всех файлов, пропуская первую строку (заголовки)&lt;br /&gt;
    for f in &amp;quot;$OUTPUT_DIR&amp;quot;/*.csv; do&lt;br /&gt;
        tail -n +2 &amp;quot;$f&amp;quot; &amp;gt;&amp;gt; &amp;quot;$FINAL_FILE&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;==&amp;gt; Готово! Общий файл сохранен как: $FINAL_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;    Размер файла: $(du -h &amp;quot;$FINAL_FILE&amp;quot; | cut -f1)&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;==&amp;gt; Внимание: ни у одного аккаунта не найдено контактов для экспорта.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod +x export_all_contacts.sh&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11468</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11468"/>
		<updated>2026-09-16T18:08:06Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипты и автоматизация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Оставляем в доверенных сетях только локальную петлю и устанавливаем параметр non_smtpd_milters в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'mynetworks = 127.0.0.0/8' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
===Скрипт получения адресных книг из аккаунтов zimbra===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; export_all_contacts.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Проверяем, запущен ли скрипт от пользователя zimbra&lt;br /&gt;
if [ &amp;quot;$(whoami)&amp;quot; != &amp;quot;zimbra&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: этот скрипт должен запускаться от имени пользователя zimbra.&amp;quot;&lt;br /&gt;
    echo &amp;quot;Выполните: su - zimbra&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
OUTPUT_DIR=&amp;quot;/tmp/zimbra_all_contacts&amp;quot;&lt;br /&gt;
FINAL_FILE=&amp;quot;/tmp/zimbra_all_contacts_combined.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Создаем рабочую директорию: $OUTPUT_DIR&amp;quot;&lt;br /&gt;
rm -rf &amp;quot;$OUTPUT_DIR&amp;quot;&lt;br /&gt;
mkdir -p &amp;quot;$OUTPUT_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Получаем список активных почтовых ящиков...&amp;quot;&lt;br /&gt;
ACCOUNTS=$(zmprov -l gaa)&lt;br /&gt;
&lt;br /&gt;
if [ -z &amp;quot;$ACCOUNTS&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: не найдено ни одного аккаунта.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
COUNT=0&lt;br /&gt;
SUCCESS=0&lt;br /&gt;
&lt;br /&gt;
for account in $ACCOUNTS; do&lt;br /&gt;
    COUNT=$((COUNT + 1))&lt;br /&gt;
    # Убираем недопустимые символы для имени файла, если такие вдруг будут&lt;br /&gt;
    safe_name=$(echo &amp;quot;$account&amp;quot; | tr '/' '_')&lt;br /&gt;
    file_path=&amp;quot;$OUTPUT_DIR/${safe_name}.csv&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Экспортируем контакты конкретного ящика&lt;br /&gt;
    zmmailbox -z -m &amp;quot;$account&amp;quot; getRestURL &amp;quot;/Contacts?fmt=csv&amp;quot; &amp;gt; &amp;quot;$file_path&amp;quot; 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # Проверяем, скачался ли непустой файл (минимальный CSV содержит хотя бы заголовки)&lt;br /&gt;
    if [ -s &amp;quot;$file_path&amp;quot; ]; then&lt;br /&gt;
        SUCCESS=$((SUCCESS + 1))&lt;br /&gt;
    else&lt;br /&gt;
        # Удаляем пустые файлы, чтобы они не мешали&lt;br /&gt;
        rm -f &amp;quot;$file_path&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;==&amp;gt; Экспорт завершен. Успешно выгружено ящиков с контактами: $SUCCESS из $COUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Объединяем файлы в один&lt;br /&gt;
if [ $SUCCESS -gt 0 ]; then&lt;br /&gt;
    echo &amp;quot;==&amp;gt; Объединяем файлы в один общий: $FINAL_FILE&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Берем заголовки из самого первого попавшегося файла&lt;br /&gt;
    FIRST_FILE=$(ls &amp;quot;$OUTPUT_DIR&amp;quot;/*.csv | head -n 1)&lt;br /&gt;
    head -n 1 &amp;quot;$FIRST_FILE&amp;quot; &amp;gt; &amp;quot;$FINAL_FILE&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Склеиваем содержимое всех файлов, пропуская первую строку (заголовки)&lt;br /&gt;
    for f in &amp;quot;$OUTPUT_DIR&amp;quot;/*.csv; do&lt;br /&gt;
        tail -n +2 &amp;quot;$f&amp;quot; &amp;gt;&amp;gt; &amp;quot;$FINAL_FILE&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;==&amp;gt; Готово! Общий файл сохранен как: $FINAL_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;    Размер файла: $(du -h &amp;quot;$FINAL_FILE&amp;quot; | cut -f1)&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;==&amp;gt; Внимание: ни у одного аккаунта не найдено контактов для экспорта.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x export_all_contacts.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11467</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11467"/>
		<updated>2026-09-02T09:34:49Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Оставляем в доверенных сетях только локальную петлю и устанавливаем параметр non_smtpd_milters в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'mynetworks = 127.0.0.0/8' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11466</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11466"/>
		<updated>2026-08-31T17:05:56Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт переноса всех ящиков из Zimbra в Grommunio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11465</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11465"/>
		<updated>2026-08-29T23:07:19Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Важный момент при настройке почтового сервера на доменах третьего уровня */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11464</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11464"/>
		<updated>2026-08-29T23:06:43Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Важный момент при настройке почтового сервера на доменах третьего уровня */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда (это часть письма в сыром виде):&lt;br /&gt;
&lt;br /&gt;
 ...DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679;...&lt;br /&gt;
&lt;br /&gt;
В случае с доменом третьего уровня, например, unit.myorg.net, значение должно быть&lt;br /&gt;
&lt;br /&gt;
 d=unit.myorg.net&lt;br /&gt;
&lt;br /&gt;
, а без этих параметров оно:&lt;br /&gt;
&lt;br /&gt;
 d=myorg.net&lt;br /&gt;
&lt;br /&gt;
Следовательно, принимающие сервера пытаются прочитать ключ для проверки подписи с домена myorg.net, а не с домена unit.myorg.net и не могут её проверить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11463</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11463"/>
		<updated>2026-08-29T23:01:57Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
====Важный момент при настройке почтового сервера на доменах третьего уровня====&lt;br /&gt;
&lt;br /&gt;
Общая суть в том, что понадобятся параметры&lt;br /&gt;
&lt;br /&gt;
 use_esld = false;&lt;br /&gt;
 use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
в файле &lt;br /&gt;
&lt;br /&gt;
 /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
&lt;br /&gt;
Иначе сервер будет схлопывать домен до первого уровня и подставлять это в тело письма вот сюда:&lt;br /&gt;
&lt;br /&gt;
 ???&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочего конфига для домена третьего уровня&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# КРИТИЧЕСКИ ВАЖНО: Выключаем нормализацию eSLD, которая схлопывает домен unit.myorg.net до myorg.net&lt;br /&gt;
use_esld = false;&lt;br /&gt;
use_effective_domain = false;&lt;br /&gt;
&lt;br /&gt;
selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
path = &amp;quot;/var/lib/grommunio-antispam/dkim/unit.myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11462</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11462"/>
		<updated>2026-08-29T20:45:04Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
use_domain_sign_local = &amp;quot;full&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11461</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11461"/>
		<updated>2026-08-29T20:15:53Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
А если и это не помогло, то смотрим что в логах&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/grommunio-antispam/rspamd.log&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11460</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11460"/>
		<updated>2026-08-25T18:42:39Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Переиндексация SQLite баз данных ящиков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index.service&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11459</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11459"/>
		<updated>2026-08-25T18:41:58Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Переиндексация SQLite баз данных ящиков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index&lt;br /&gt;
&lt;br /&gt;
Эта команда на перезапуск сервис не отдаст приглашение, видимо, пока не закончит процедуру. Поэтому её лучше запускать внутри утилиты&lt;br /&gt;
&lt;br /&gt;
 screen&lt;br /&gt;
&lt;br /&gt;
, или убрать в фон&lt;br /&gt;
&lt;br /&gt;
 Ctrl+z&lt;br /&gt;
&lt;br /&gt;
затем&lt;br /&gt;
&lt;br /&gt;
 bg&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;br /&gt;
&lt;br /&gt;
====Перенастройка таймера переиндексации====&lt;br /&gt;
&lt;br /&gt;
По умолчанию таймер настроен на запуск раз в 15 минут.&lt;br /&gt;
&lt;br /&gt;
Перенастроить на запуск каждую ночь можно так:&lt;br /&gt;
&lt;br /&gt;
 systemctl edit grommunio-index.timer&lt;br /&gt;
&lt;br /&gt;
В открывшемся файле внимательно читаем предостережения сверху и в нужное место вставляем новые параметры&lt;br /&gt;
&lt;br /&gt;
 [Timer]&lt;br /&gt;
 OnCalendar=&lt;br /&gt;
 OnCalendar=*-*-* 03:00:00&lt;br /&gt;
&lt;br /&gt;
, затем сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Проверяем&lt;br /&gt;
&lt;br /&gt;
 systemctl cat grommunio-index.timer&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11458</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11458"/>
		<updated>2026-08-25T18:27:38Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;br /&gt;
&lt;br /&gt;
===Переиндексация SQLite баз данных ящиков===&lt;br /&gt;
&lt;br /&gt;
Есть гипотеза, что это поможет ускорить поиск по письмам в веб интерфейсе почты, если ящик содержит десятки тысяч писем.&lt;br /&gt;
&lt;br /&gt;
Гипотеза пока не проверена до конца.&lt;br /&gt;
&lt;br /&gt;
Индексы лежат здесь&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index/&lt;br /&gt;
&lt;br /&gt;
Внутри находятся каталоги, имена которых соответствуют именам ящиков. Внутри этих каталогов лежат файлы&lt;br /&gt;
&lt;br /&gt;
 index.sqlite3&lt;br /&gt;
&lt;br /&gt;
Удаляем все индексы&lt;br /&gt;
&lt;br /&gt;
 rm -rf /var/lib/grommunio-web/sqlite-index/*&lt;br /&gt;
&lt;br /&gt;
Перезапускаем сервис&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-index&lt;br /&gt;
&lt;br /&gt;
Эта команда на перезапуск сервис не отдаст приглашение, видимо, пока не закончит процедуру. Поэтому её лучше запускать внутри утилиты&lt;br /&gt;
&lt;br /&gt;
 screen&lt;br /&gt;
&lt;br /&gt;
, или убрать в фон&lt;br /&gt;
&lt;br /&gt;
 Ctrl+z&lt;br /&gt;
&lt;br /&gt;
затем&lt;br /&gt;
&lt;br /&gt;
 bg&lt;br /&gt;
&lt;br /&gt;
За работой сервиса можно проследить так&lt;br /&gt;
&lt;br /&gt;
 journalctl -f -u grommunio-index&lt;br /&gt;
&lt;br /&gt;
, либо наблюдать за появлением в каталоге&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-web/sqlite-index&lt;br /&gt;
&lt;br /&gt;
новых каталогов с названиями, идентичными ящикам и файлами внутри них...&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11457</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11457"/>
		<updated>2026-08-13T11:01:57Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Ставим его в планировщик */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Если grommunio изначально был установлен в режиме получения сертификата LetsEncrypt...====&lt;br /&gt;
&lt;br /&gt;
, а потом появилась необходимость поставить перед ним реверс-прокси, который решает проблемы обновления сертификата, то:&lt;br /&gt;
&lt;br /&gt;
Убираем из базы данных сертификатов certbot сертификат&lt;br /&gt;
&lt;br /&gt;
 certbot delete --non-interactive --cert-name mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
Посмотреть список сертификатов в базе данных можно так:&lt;br /&gt;
&lt;br /&gt;
 certbot certificates&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11456</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11456"/>
		<updated>2026-08-12T10:34:20Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт переноса одного ящика из Zimbra в Grommunio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noflags \&lt;br /&gt;
  --errorsmax 500000 \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11455</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11455"/>
		<updated>2026-08-12T08:28:29Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Добавляем важный параметр в файл конфигурации postfix&lt;br /&gt;
&lt;br /&gt;
 echo 'non_smtpd_milters = inet:localhost:11332' &amp;gt;&amp;gt; /etc/postfix/main.cf&lt;br /&gt;
&lt;br /&gt;
6. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11454</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11454"/>
		<updated>2026-08-12T08:11:49Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh и настройки конфигов на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11453</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11453"/>
		<updated>2026-08-12T08:10:59Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Нюанс */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/dkim.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11452</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11452"/>
		<updated>2026-08-12T07:49:50Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настроить подпись писем через DKIM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh и настройки конфигов на сервере===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
Перезапуска этих сервисов для полноценной работы механизма подписи емэйлов может быть недостаточно. Тогда перезагружаем сервер полностью&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11451</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11451"/>
		<updated>2026-08-12T07:30:38Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11450</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11450"/>
		<updated>2026-08-12T07:30:20Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка сервера по ssh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.dkim.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11449</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11449"/>
		<updated>2026-08-12T07:29:57Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Действия мышкой в админке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.dkim.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11448</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11448"/>
		<updated>2026-08-11T21:37:10Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипты и автоматизация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Автоматизация обновления ssl сертификатов, если веб-интерфейс стоит за реверс-прокси nginx, работающим на базе vestacp===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Создаём скрипт====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# === НАСТРОЙКИ ===&lt;br /&gt;
# предполагается что доступ без пароля на $VESTA_HOST настроен в файле /root/.ssh/config&lt;br /&gt;
VESTA_HOST=&amp;quot;vesta&amp;quot;&lt;br /&gt;
VESTA_USER=&amp;quot;root&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам на VestaCP&lt;br /&gt;
REMOTE_CERT=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.pem&amp;quot;&lt;br /&gt;
REMOTE_KEY=&amp;quot;/home/admin/conf/web/ssl.mail.myorg.net.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Пути к сертификатам в Grommunio&lt;br /&gt;
# (При необходимости скорректируйте пути под вашу конфигурацию Nginx/Postfix/Grommunio)&lt;br /&gt;
LOCAL_CERT=&amp;quot;/etc/grommunio-common/ssl/server-bundle.pem&amp;quot;&lt;br /&gt;
LOCAL_KEY=&amp;quot;/etc/grommunio-common/ssl/server.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TMP_DIR=&amp;quot;/tmp/vesta_ssl_sync&amp;quot;&lt;br /&gt;
UPDATED=0&lt;br /&gt;
&lt;br /&gt;
# === ЛОГИКА ===&lt;br /&gt;
mkdir -p &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
chmod 700 &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Функция очистки при завершении&lt;br /&gt;
cleanup() {&lt;br /&gt;
    rm -rf &amp;quot;$TMP_DIR&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
trap cleanup EXIT&lt;br /&gt;
&lt;br /&gt;
# 1. Скачивание файлов с VestaCP&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_CERT&amp;quot; &amp;quot;$TMP_DIR/remote.pem&amp;quot;&lt;br /&gt;
scp -q &amp;quot;$VESTA_USER@$VESTA_HOST:$REMOTE_KEY&amp;quot; &amp;quot;$TMP_DIR/remote.key&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2. Сравнение сертификата&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_CERT&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый SSL-сертификат. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.pem&amp;quot; &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    chmod 644 &amp;quot;$LOCAL_CERT&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 3. Сравнение приватного ключа&lt;br /&gt;
if [ ! -f &amp;quot;$LOCAL_KEY&amp;quot; ] || ! cmp -s &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;$(date): Обнаружен новый приватный ключ. Обновляем...&amp;quot;&lt;br /&gt;
    cp &amp;quot;$TMP_DIR/remote.key&amp;quot; &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    chmod 600 &amp;quot;$LOCAL_KEY&amp;quot;&lt;br /&gt;
    UPDATED=1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. Перезапуск сервисов Grommunio при обновлении&lt;br /&gt;
if [ &amp;quot;$UPDATED&amp;quot; -eq 1 ]; then&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты обновлены. Перезапуск почтовых сервисов...&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Перезапуск веб-сервера и системных служб Grommunio&lt;br /&gt;
    systemctl restart nginx || true&lt;br /&gt;
    systemctl restart postfix || true&lt;br /&gt;
    systemctl restart &amp;quot;gromox-*&amp;quot; || true&lt;br /&gt;
    systemctl restart grommunio-admin-api || true&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;$(date): Перезапуск успешно завершен.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;$(date): Сертификаты не изменились.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
chmod +x /usr/local/bin/sync-vesta-certs.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ставим его в планировщик====&lt;br /&gt;
&lt;br /&gt;
 (crontab -l 2&amp;gt;/dev/null | grep -Fv &amp;quot;/usr/local/bin/sync-vesta-certs.sh&amp;quot;; echo &amp;quot;30 3 * * * /usr/local/bin/sync-vesta-certs.sh &amp;gt;&amp;gt; /var/log/vesta-cert-sync.log 2&amp;gt;&amp;amp;1&amp;quot;) | crontab -&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Postgres&amp;diff=11447</id>
		<title>Postgres</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Postgres&amp;diff=11447"/>
		<updated>2026-08-04T07:10:11Z</updated>

		<summary type="html">&lt;p&gt;Vovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Полезное=&lt;br /&gt;
&lt;br /&gt;
==Сделать копию базы данных на сервере==&lt;br /&gt;
&lt;br /&gt;
Прервать все текущие сеансы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT pg_terminate_backend(pid) &lt;br /&gt;
FROM pg_stat_activity &lt;br /&gt;
WHERE datname = 'vacs' AND pid &amp;lt;&amp;gt; pg_backend_pid();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скопировать&lt;br /&gt;
&lt;br /&gt;
 CREATE DATABASE mydb_copy WITH TEMPLATE mydb;&lt;br /&gt;
&lt;br /&gt;
=Развёртываем 30 контейнеров на Альт Рабочая станция 10=&lt;br /&gt;
&lt;br /&gt;
==Обновим систему и установим docker==&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
&lt;br /&gt;
 apt-get dist-upgrade&lt;br /&gt;
&lt;br /&gt;
 update-kernel&lt;br /&gt;
&lt;br /&gt;
 apt-get install docker-engine&lt;br /&gt;
 systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
==Включим ssh сервер==&lt;br /&gt;
&lt;br /&gt;
 systemctl enable sshd&lt;br /&gt;
 systemctl start sshd&lt;br /&gt;
&lt;br /&gt;
==Создадим 30 пользователей в формате userX==&lt;br /&gt;
&lt;br /&gt;
 for i in `seq 1 30`; do adduser user$i; echo &amp;quot;user$i&amp;quot; | passwd --stdin user$i; done&lt;br /&gt;
&lt;br /&gt;
==Создадим скрипты развёртывания и уничтожения==&lt;br /&gt;
&lt;br /&gt;
 cat /opt/create-x30-containers.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
rm /tmp/cred&lt;br /&gt;
port=54320&lt;br /&gt;
&lt;br /&gt;
for i in `seq -w 1 30`; do&lt;br /&gt;
&lt;br /&gt;
port=$((port+1))&lt;br /&gt;
&lt;br /&gt;
docker run \&lt;br /&gt;
--name postgres-srv-$i \&lt;br /&gt;
--restart always \&lt;br /&gt;
-e POSTGRES_USER=&amp;quot;dbuser${i}&amp;quot; \&lt;br /&gt;
-e POSTGRES_PASSWORD=&amp;quot;dbpass${i}&amp;quot; \&lt;br /&gt;
-e POSTGRES_DB=&amp;quot;database${i}&amp;quot; \&lt;br /&gt;
-p $port:5432 \&lt;br /&gt;
-d \&lt;br /&gt;
postgres:11&lt;br /&gt;
echo &amp;quot;psql -h localhost -p ${port} -U dbuser${i} database${i} # password=dbpass${i}&amp;quot; &amp;gt;&amp;gt; /tmp/cred&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Credentials: &amp;quot;&lt;br /&gt;
echo &amp;quot;-----&amp;quot;&lt;br /&gt;
cat /tmp/cred&lt;br /&gt;
echo &amp;quot;-----&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#install postgresql 14 client on alt workstation 10&lt;br /&gt;
#apt-get install postgresql14&lt;br /&gt;
&lt;br /&gt;
#connect example from dockerhost&lt;br /&gt;
#psql -h localhost -p 54321 -U dbuser01 database01&lt;br /&gt;
&lt;br /&gt;
#connect example from some host (where 172.16.228.138 -- remote address of dockerhost)&lt;br /&gt;
#psql -h 172.16.228.138 -p 54321 -U dbuser01 database01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 cat /opt/destroy-x30-containers.sh &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
for i in `seq -w 1 30`; do&lt;br /&gt;
docker stop postgres-srv-$i&lt;br /&gt;
docker rm postgres-srv-$i&lt;br /&gt;
done&lt;br /&gt;
docker volume prune -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Развёртывание и уничтожение=&lt;br /&gt;
&lt;br /&gt;
==Создать 30 контейнеров==&lt;br /&gt;
&lt;br /&gt;
Войти на докерхост и выполнить команду&lt;br /&gt;
&lt;br /&gt;
 /opt/create-x30-containers.sh&lt;br /&gt;
&lt;br /&gt;
В результате поднимутся 30 контейнеров с postgres сервером 14 версии. В файле /tmp/cred будут примеры команды для подключения для всех 30 штук (см. ниже раздел &amp;quot;Список из 30 хостов&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Сломать все контейнеры (полное уничтожение)==&lt;br /&gt;
&lt;br /&gt;
Войти на докерхост и выполнить команду (осторожно, она сразу сделает то, что вы хотели!)&lt;br /&gt;
&lt;br /&gt;
 /opt/destroy-x30-containers.sh&lt;br /&gt;
&lt;br /&gt;
В результате все 30 контейнеров будут уничтожены. Вместе с данными обучающихся :-))))))&lt;br /&gt;
&lt;br /&gt;
=Примеры=&lt;br /&gt;
&lt;br /&gt;
==Установить только клиент для postgresql 14 для Альт Рабочая станция 10 (или любого дистрибутива на базе P10)==&lt;br /&gt;
&lt;br /&gt;
 apt-get install postgresql14&lt;br /&gt;
&lt;br /&gt;
==Пример подключения к базе данных непосредственно с docker хоста==&lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -p 54321 -U dbuser01 database01&lt;br /&gt;
&lt;br /&gt;
далее нужно будет ввести пароль&lt;br /&gt;
&lt;br /&gt;
==Пример подключения к базе данных с любого хоста==&lt;br /&gt;
&lt;br /&gt;
Представим, что наш докерхост имеет ip адрес 172.16.228.138, тогда на машине, с которой мы собираемся подключаться, для подключения к базе данных команда будет такая:&lt;br /&gt;
&lt;br /&gt;
 psql -h 172.16.228.138 -p 54321 -U dbuser01 database01&lt;br /&gt;
&lt;br /&gt;
далее нужно будет ввести пароль&lt;br /&gt;
&lt;br /&gt;
==pg_dump==&lt;br /&gt;
&lt;br /&gt;
=Список из 30 хостов=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
psql -h localhost -p 54321 -U dbuser01 database01 # password=dbpass01&lt;br /&gt;
psql -h localhost -p 54322 -U dbuser02 database02 # password=dbpass02&lt;br /&gt;
psql -h localhost -p 54323 -U dbuser03 database03 # password=dbpass03&lt;br /&gt;
psql -h localhost -p 54324 -U dbuser04 database04 # password=dbpass04&lt;br /&gt;
psql -h localhost -p 54325 -U dbuser05 database05 # password=dbpass05&lt;br /&gt;
psql -h localhost -p 54326 -U dbuser06 database06 # password=dbpass06&lt;br /&gt;
psql -h localhost -p 54327 -U dbuser07 database07 # password=dbpass07&lt;br /&gt;
psql -h localhost -p 54328 -U dbuser08 database08 # password=dbpass08&lt;br /&gt;
psql -h localhost -p 54329 -U dbuser09 database09 # password=dbpass09&lt;br /&gt;
psql -h localhost -p 54330 -U dbuser10 database10 # password=dbpass10&lt;br /&gt;
psql -h localhost -p 54331 -U dbuser11 database11 # password=dbpass11&lt;br /&gt;
psql -h localhost -p 54332 -U dbuser12 database12 # password=dbpass12&lt;br /&gt;
psql -h localhost -p 54333 -U dbuser13 database13 # password=dbpass13&lt;br /&gt;
psql -h localhost -p 54334 -U dbuser14 database14 # password=dbpass14&lt;br /&gt;
psql -h localhost -p 54335 -U dbuser15 database15 # password=dbpass15&lt;br /&gt;
psql -h localhost -p 54336 -U dbuser16 database16 # password=dbpass16&lt;br /&gt;
psql -h localhost -p 54337 -U dbuser17 database17 # password=dbpass17&lt;br /&gt;
psql -h localhost -p 54338 -U dbuser18 database18 # password=dbpass18&lt;br /&gt;
psql -h localhost -p 54339 -U dbuser19 database19 # password=dbpass19&lt;br /&gt;
psql -h localhost -p 54340 -U dbuser20 database20 # password=dbpass20&lt;br /&gt;
psql -h localhost -p 54341 -U dbuser21 database21 # password=dbpass21&lt;br /&gt;
psql -h localhost -p 54342 -U dbuser22 database22 # password=dbpass22&lt;br /&gt;
psql -h localhost -p 54343 -U dbuser23 database23 # password=dbpass23&lt;br /&gt;
psql -h localhost -p 54344 -U dbuser24 database24 # password=dbpass24&lt;br /&gt;
psql -h localhost -p 54345 -U dbuser25 database25 # password=dbpass25&lt;br /&gt;
psql -h localhost -p 54346 -U dbuser26 database26 # password=dbpass26&lt;br /&gt;
psql -h localhost -p 54347 -U dbuser27 database27 # password=dbpass27&lt;br /&gt;
psql -h localhost -p 54348 -U dbuser28 database28 # password=dbpass28&lt;br /&gt;
psql -h localhost -p 54349 -U dbuser29 database29 # password=dbpass29&lt;br /&gt;
psql -h localhost -p 54350 -U dbuser30 database30 # password=dbpass30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ubuntu 22.04=&lt;br /&gt;
&lt;br /&gt;
==Конфиги==&lt;br /&gt;
&lt;br /&gt;
===Раз===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv /etc/postgresql/14/main/pg_hba.conf /etc/postgresql/14/main/pg_hba.conf.orig&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/postgresql/14/main/pg_hba.conf&lt;br /&gt;
# Database administrative login by Unix domain socket&lt;br /&gt;
local   all             postgres                                trust&lt;br /&gt;
&lt;br /&gt;
# TYPE  DATABASE        USER            ADDRESS                 METHOD&lt;br /&gt;
&lt;br /&gt;
# &amp;quot;local&amp;quot; is for Unix domain socket connections only&lt;br /&gt;
local   all             all                                     peer&lt;br /&gt;
# IPv4 local connections:&lt;br /&gt;
host    all             all             127.0.0.1/32            md5&lt;br /&gt;
host    all             all             0.0.0.0/0		md5&lt;br /&gt;
&lt;br /&gt;
# IPv6 local connections:&lt;br /&gt;
#host    all             all             ::1/128                 scram-sha-256&lt;br /&gt;
# Allow replication connections from localhost, by a user with the&lt;br /&gt;
# replication privilege.&lt;br /&gt;
&lt;br /&gt;
local   replication     all                                     peer&lt;br /&gt;
host    replication     all             127.0.0.1/32            scram-sha-256&lt;br /&gt;
host    replication     all             ::1/128                 scram-sha-256&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Два===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv /etc/postgresql/14/main/postgresql.conf /etc/postgresql/14/main/postgresql.conf.orig&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/postgresql/14/main/postgresql.conf&lt;br /&gt;
data_directory = '/var/lib/postgresql/14/main'          # use data in another directory&lt;br /&gt;
hba_file = '/etc/postgresql/14/main/pg_hba.conf'        # host-based authentication file&lt;br /&gt;
ident_file = '/etc/postgresql/14/main/pg_ident.conf'    # ident configuration file&lt;br /&gt;
external_pid_file = '/var/run/postgresql/14-main.pid'   # write an extra PID file&lt;br /&gt;
listen_addresses = '*'					# what IP address(es) to listen on;&lt;br /&gt;
max_connections = 100					# (change requires restart)&lt;br /&gt;
shared_buffers = 128MB					# min 128kB&lt;br /&gt;
dynamic_shared_memory_type = posix			# the default is usually the first option&lt;br /&gt;
max_wal_size = 1GB&lt;br /&gt;
min_wal_size = 80MB&lt;br /&gt;
log_destination = 'stderr'				# Valid values are combinations of&lt;br /&gt;
logging_collector = on					# Enable capturing of stderr, jsonlog,&lt;br /&gt;
log_directory = 'log'					# directory where log files are written,&lt;br /&gt;
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'		# log file name pattern,&lt;br /&gt;
log_file_mode = 0600					# creation mode for log files,&lt;br /&gt;
log_rotation_size = 10MB				# Automatic rotation of logfiles will&lt;br /&gt;
log_min_messages = warning				# values in order of decreasing detail:&lt;br /&gt;
log_checkpoints = off&lt;br /&gt;
log_connections = off&lt;br /&gt;
log_disconnections = off&lt;br /&gt;
log_timezone = UTC&lt;br /&gt;
datestyle = 'iso, mdy'&lt;br /&gt;
timezone = UTC&lt;br /&gt;
default_text_search_config = 'pg_catalog.english'&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Перезапуск systemd-сервиса postgresql==&lt;br /&gt;
&lt;br /&gt;
 systemctl restart postgresql&lt;br /&gt;
&lt;br /&gt;
и не только...&lt;br /&gt;
&lt;br /&gt;
 systemctl status postgresql&lt;br /&gt;
&lt;br /&gt;
 systemctl stop postgresql&lt;br /&gt;
&lt;br /&gt;
 systemctl start postgresql&lt;br /&gt;
&lt;br /&gt;
 systemctl enable postgresql&lt;br /&gt;
&lt;br /&gt;
 systemctl disable postgresql&lt;br /&gt;
&lt;br /&gt;
==Подготовить кодировки в базах данных==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
psql -U postgres -c &amp;quot;UPDATE pg_database SET encoding = pg_char_to_encoding('UTF8'), datcollate='en_US.UTF-8', datctype='en_US.UTF-8' WHERE datname='postgres';&amp;quot;;&lt;br /&gt;
psql -U postgres -c &amp;quot;UPDATE pg_database SET encoding = pg_char_to_encoding('UTF8'), datcollate='en_US.UTF-8', datctype='en_US.UTF-8' WHERE datname='template0';&amp;quot;;&lt;br /&gt;
psql -U postgres -c &amp;quot;UPDATE pg_database SET encoding = pg_char_to_encoding('UTF8'), datcollate='en_US.UTF-8', datctype='en_US.UTF-8' WHERE datname='template1';&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Создать базу, пользователя, выдать привилегии==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
psql -U postgres -c &amp;quot;CREATE USER app_user WITH ENCRYPTED PASSWORD 'app_passQwE123';&amp;quot;&lt;br /&gt;
psql -U postgres -c &amp;quot;CREATE DATABASE app_db;&amp;quot;&lt;br /&gt;
psql -U postgres -c &amp;quot;UPDATE pg_database SET encoding = pg_char_to_encoding('UTF8'), datcollate='en_US.UTF-8', datctype='en_US.UTF-8' WHERE datname='app_db';&amp;quot;;&lt;br /&gt;
psql -U postgres -c &amp;quot;GRANT ALL ON DATABASE app_db TO app_user;&amp;quot;&lt;br /&gt;
psql -U postgres -c &amp;quot;ALTER DATABASE app_db OWNER TO app_user;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Создать доп. схему в базе, выдать привилегии пользователю на неё==&lt;br /&gt;
&lt;br /&gt;
Важно!&lt;br /&gt;
&lt;br /&gt;
Подключаемся пользователем postgres, но указываем базу данных, в которой хотим создать схему (app_db). И только из этого контекста выполняем запросы внутри параметра (-c &amp;quot;SQL запрос;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
psql -U postgres app_db -c &amp;quot;CREATE SCHEMA myschema1;&amp;quot;&lt;br /&gt;
psql -U postgres app_db -c &amp;quot;GRANT ALL PRIVILEGES ON SCHEMA myschema1 TO pguser;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11446</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11446"/>
		<updated>2026-07-31T08:54:10Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт переноса всех ящиков из Zimbra в Grommunio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате работы скрипта в Grommunio будут созданы ящики со случайными паролями, в которые будут перемещены все письма из аналогичных аккаунтов Zimbra.&lt;br /&gt;
&lt;br /&gt;
Файл с данными новых ящиков будет называться:&lt;br /&gt;
&lt;br /&gt;
 migrated_passwords.csv&lt;br /&gt;
&lt;br /&gt;
При повторном запуске скрипта предварительно будет создаваться резервная копия этого файла, при его наличии.&lt;br /&gt;
&lt;br /&gt;
Это сделано чтобы не потерять данные случайно сгенерированных паролей при прошлом запуске скрипта.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11445</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11445"/>
		<updated>2026-07-31T08:50:25Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт переноса всех ящиков из Zimbra в Grommunio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11444</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11444"/>
		<updated>2026-07-31T08:49:38Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса всех ящиков из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (migrate_account_from_zimbra_to_grommunio.sh, для которого необходимо наличие предпредыдущего скрипта (create_mailbox.sh))&lt;br /&gt;
&lt;br /&gt;
Чтобы скрипт знал какие ящики переносить необходимо создать файл mailboxes.txt, в котором одна строчка - один ящик. Например так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; mailboxes.txt&lt;br /&gt;
admin@myorg.net&lt;br /&gt;
manager@myorg.net&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сам скрипт:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_all_zimbra_accounts.sh &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11443</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11443"/>
		<updated>2026-07-31T08:46:05Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт переноса одного ящика из Zimbra в Grommunio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипт!===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_all_zimbra_accounts.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
TARGET_SCRIPT=&amp;quot;./migrate_account_from_zimbra_to_grommunio.sh&amp;quot;&lt;br /&gt;
MAILBOXES_FILE=&amp;quot;mailboxes.txt&amp;quot;&lt;br /&gt;
OUTPUT_CSV=&amp;quot;migrated_passwords.csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Исполняемый файл '$TARGET_SCRIPT' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$TARGET_SCRIPT&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл '$TARGET_SCRIPT' существует, но у него нет прав на выполнение (chmod +x)!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -f &amp;quot;$MAILBOXES_FILE&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;Ошибка: Файл со списком ящиков '$MAILBOXES_FILE' не найден!&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
generate_password() {&lt;br /&gt;
  # 16 символов: буквы (разного регистра), цифры и безопасные спецсимволы&lt;br /&gt;
  LC_ALL=C tr -dc 'A-Za-z0-9' &amp;lt; /dev/urandom | head -c 16&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Инициализация / очистка CSV файла&lt;br /&gt;
echo &amp;quot;Email;Password&amp;quot; &amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OUTPUT_CSV_BACKUP=&amp;quot;${OUTPUT_CSV%.csv}_$(date +%Y-%m-%d-%H-%M-%S).csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ -f &amp;quot;$OUTPUT_CSV&amp;quot; ]; then&lt;br /&gt;
  cp &amp;quot;$OUTPUT_CSV&amp;quot; &amp;quot;$OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
  echo &amp;quot;Создан бэкап предыдущего CSV: $OUTPUT_CSV_BACKUP&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Все проверки пройдены. Начинаем обработку списков...&amp;quot;&lt;br /&gt;
echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
while read ACCOUNT; do&lt;br /&gt;
  # Пропускаем пустые строки&lt;br /&gt;
  [ -z &amp;quot;$ACCOUNT&amp;quot; ] &amp;amp;&amp;amp; continue&lt;br /&gt;
&lt;br /&gt;
  NEW_PASS=$(generate_password)&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Обработка ящика: $ACCOUNT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Сохраняем данные аккаунта ${ACCOUNT} в файл $OUTPUT_CSV&amp;quot;&lt;br /&gt;
  echo &amp;quot;${ACCOUNT};${NEW_PASS}&amp;quot; &amp;gt;&amp;gt; &amp;quot;$OUTPUT_CSV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;Начата синхронизация аккаунта ${ACCOUNT}...&amp;quot;&lt;br /&gt;
  if &amp;quot;$TARGET_SCRIPT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$ACCOUNT&amp;quot; &amp;quot;$NEW_PASS&amp;quot;; then&lt;br /&gt;
    echo &amp;quot;Успешно: $ACCOUNT&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    echo &amp;quot;ОШИБКА: Сбой при обработке $ACCOUNT&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;quot;$MAILBOXES_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Готово! Сгенерированные пароли сохранены в файл: $OUTPUT_CSV&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11442</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11442"/>
		<updated>2026-07-30T19:43:45Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипты и автоматизация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
Все скрипты, представленные здесь, запускать необходимо с сервера Grommunio!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11441</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11441"/>
		<updated>2026-07-30T19:42:15Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Скрипт создания одного ящика */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Скрипт переноса одного ящика из Zimbra в Grommunio===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо наличие рядом предыдущего скрипта (create_mailbox.sh)&lt;br /&gt;
&lt;br /&gt;
А также внутри скрипта необходимо задать адрес сервера Zimbra и логин и пароль мастер-аккаунта Zimbra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Настройки серверов&lt;br /&gt;
ZIMBRA_SERVER=&amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
GROMMUNIO_SERVER=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Мастер-аккаунт с Zimbra с паролем&lt;br /&gt;
ZIMBRA_ADMIN_USER=&amp;quot;admin@myorg.net&amp;quot;&lt;br /&gt;
ZIMBRA_ADMIN_PASS=&amp;quot;SuperAdminPassword&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Определяем директорию, в которой расположен текущий скрипт&lt;br /&gt;
SCRIPT_DIR=&amp;quot;$(cd &amp;quot;$(dirname &amp;quot;${BASH_SOURCE[0]}&amp;quot;)&amp;quot; &amp;amp;&amp;amp; pwd)&amp;quot;&lt;br /&gt;
CREATE_SCRIPT=&amp;quot;$SCRIPT_DIR/create_mailbox.sh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Чтение аргументов&lt;br /&gt;
USER_ZIMBRA=&amp;quot;$1&amp;quot;&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_ZIMBRA&amp;quot; ] || [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;mailbox_zimbra&amp;gt; &amp;lt;mailbox_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 old_user@domain.ru new_user@domain.ru 'GromPass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Проверка наличия и прав на выполнение вспомогательного скрипта&lt;br /&gt;
if [ ! -f &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Вспомогательный скрипт '$CREATE_SCRIPT' не найден!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -x &amp;quot;$CREATE_SCRIPT&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Скрипт '$CREATE_SCRIPT' найден, но не имеет прав на выполнение (chmod +x)!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Вызов внешнего скрипта для создания ящика&lt;br /&gt;
&amp;quot;$CREATE_SCRIPT&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;quot;$PASS_GROMMUNIO&amp;quot;&lt;br /&gt;
if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка при подготовке ящика $USER_GROMMUNIO через $CREATE_SCRIPT&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 2. Запуск переноса почты из Zimbra в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set -x&lt;br /&gt;
&lt;br /&gt;
# Создаем временные защищенные файлы для паролей&lt;br /&gt;
PASSFILE1=$(mktemp)&lt;br /&gt;
PASSFILE2=$(mktemp)&lt;br /&gt;
&lt;br /&gt;
printf '%s' &amp;quot;$ZIMBRA_ADMIN_PASS&amp;quot; &amp;gt; &amp;quot;$PASSFILE1&amp;quot;&lt;br /&gt;
printf '%s' &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;gt; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
imapsync \&lt;br /&gt;
  --host1 &amp;quot;$ZIMBRA_SERVER&amp;quot; \&lt;br /&gt;
  --user1 &amp;quot;$USER_ZIMBRA&amp;quot; \&lt;br /&gt;
  --authuser1 &amp;quot;$ZIMBRA_ADMIN_USER&amp;quot; \&lt;br /&gt;
  --passfile1 &amp;quot;$PASSFILE1&amp;quot; \&lt;br /&gt;
  --authmech1 PLAIN \&lt;br /&gt;
  --ssl1 \&lt;br /&gt;
  --sslargs1 SSL_verify_mode=0 \&lt;br /&gt;
  --host2 &amp;quot;$GROMMUNIO_SERVER&amp;quot; \&lt;br /&gt;
  --user2 &amp;quot;$USER_GROMMUNIO&amp;quot; \&lt;br /&gt;
  --passfile2 &amp;quot;$PASSFILE2&amp;quot; \&lt;br /&gt;
  --authmech2 LOGIN \&lt;br /&gt;
  --ssl2 \&lt;br /&gt;
  --sslargs2 SSL_verify_mode=0 \&lt;br /&gt;
  --useheader &amp;quot;Message-ID&amp;quot; \&lt;br /&gt;
  --automap \&lt;br /&gt;
  --f1f2 &amp;quot;Sent=&amp;amp;BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Trash=&amp;amp;BCMENAQwBDsENQQ9BD0ESwQ1-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Junk=&amp;amp;BB0ENQQ2BDUEOwQwBEIENQQ7BEwEPQQwBE8- &amp;amp;BD8EPgRHBEIEMA-&amp;quot; \&lt;br /&gt;
  --f1f2 &amp;quot;Drafts=&amp;amp;BCcENQRABD0EPgQyBDgEOgQ4-&amp;quot; \&lt;br /&gt;
  --noauthmd5&lt;br /&gt;
&lt;br /&gt;
# если не надо синхронизировать спам и корзину&lt;br /&gt;
#  --exclude &amp;quot;Junk&amp;quot; \&lt;br /&gt;
#  --exclude &amp;quot;Trash&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
# Удаляем временные файлы с паролями&lt;br /&gt;
rm -f &amp;quot;$PASSFILE1&amp;quot; &amp;quot;$PASSFILE2&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x migrate_account_from_zimbra_to_grommunio.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11440</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11440"/>
		<updated>2026-07-30T12:12:59Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Создание одного ящика */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
===Скрипт создания одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11439</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11439"/>
		<updated>2026-07-30T12:12:36Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Создание одного ящика */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
===Создание одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x create_mailbox.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11438</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11438"/>
		<updated>2026-07-30T12:12:06Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Пакетное создание ящиков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Скрипты и автоматизация==&lt;br /&gt;
&lt;br /&gt;
===Создание одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11437</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11437"/>
		<updated>2026-07-30T12:11:47Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Пакетное создание ящиков */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
===Создание одного ящика===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; create_mailbox.sh &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
USER_GROMMUNIO=&amp;quot;$1&amp;quot;&lt;br /&gt;
PASS_GROMMUNIO=&amp;quot;$2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверка входных параметров&lt;br /&gt;
if [ -z &amp;quot;$USER_GROMMUNIO&amp;quot; ] || [ -z &amp;quot;$PASS_GROMMUNIO&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Использование: $0 &amp;lt;user_grommunio&amp;gt; &amp;lt;pass_grommunio&amp;gt;&amp;quot;&lt;br /&gt;
    echo &amp;quot;Пример: $0 user@domain.ru 'ThePass'&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;=== 1. Проверка / Создание ящика $USER_GROMMUNIO в Grommunio ===&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Проверяем наличие ящика&lt;br /&gt;
if grommunio-admin user show &amp;quot;$USER_GROMMUNIO&amp;quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
    echo &amp;quot;i Ящик $USER_GROMMUNIO уже существует. Пропускаем создание.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Пользователь не найден. Создаём ящик $USER_GROMMUNIO...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    DISPLAY_NAME=$(echo &amp;quot;$USER_GROMMUNIO&amp;quot; | cut -d'@' -f1)&lt;br /&gt;
&lt;br /&gt;
    # Создаем юзера&lt;br /&gt;
    grommunio-admin user create &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка создания пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Устанавливаем свойства пользователю&lt;br /&gt;
    grommunio-admin user modify \&lt;br /&gt;
		--property givenname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property surname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property displayname=&amp;quot;$DISPLAY_NAME&amp;quot; \&lt;br /&gt;
		--property country=&amp;quot;Russian Federation&amp;quot; \&lt;br /&gt;
		&amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки свойств пользователя $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # Задаем пароль&lt;br /&gt;
    grommunio-admin passwd --password &amp;quot;$PASS_GROMMUNIO&amp;quot; &amp;quot;$USER_GROMMUNIO&amp;quot;&lt;br /&gt;
    if [ $? -ne 0 ]; then&lt;br /&gt;
        echo &amp;quot;Ошибка установки пароля для $USER_GROMMUNIO!&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✓ Ящик $USER_GROMMUNIO успешно создан и пароль установлен.&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11436</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11436"/>
		<updated>2026-07-30T12:03:54Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Ошибки входа в веб интерфейс */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итераций создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11435</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11435"/>
		<updated>2026-07-30T12:03:37Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Особенности работы Community версии и способы починки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итерация создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11434</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11434"/>
		<updated>2026-07-30T12:01:32Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Особенности работы Community версии и способы починки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;br /&gt;
&lt;br /&gt;
===Ошибки входа в веб интерфейс===&lt;br /&gt;
&lt;br /&gt;
После нескольких итерация создания/удаления пользователя с одинаковым емэйлом веб интерфейс почтового ящика (не админский интерфейс на порту 8443, а обычный - на порту 443) показывает невменяемые ошибки прав доступа.&lt;br /&gt;
&lt;br /&gt;
Как конкретно это решить без перезагрузки сервера до сих пор выяснить не удалось.&lt;br /&gt;
&lt;br /&gt;
Но перезагрузка сервера - точно решает большинство таких проблем. Наверное, даже, все.&lt;br /&gt;
&lt;br /&gt;
Кратко: ошибка где-то в кешах сессий или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Перезагрузка сервера решает эту проблему. Поэтому это проблемой можно не считать&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Комьюнити версия не разрешает создавать больше 5 учётных записей почты на домен===&lt;br /&gt;
&lt;br /&gt;
Чтобы создавать больше - нужно покупать лицензию. Или...&lt;br /&gt;
&lt;br /&gt;
Открываем файл&lt;br /&gt;
&lt;br /&gt;
 /usr/share/grommunio-admin-api/orm/users.py&lt;br /&gt;
&lt;br /&gt;
Ищем там строчки по&lt;br /&gt;
&lt;br /&gt;
 License user limit exceeded&lt;br /&gt;
&lt;br /&gt;
Включаем скилл программиста и комментируем по вкусу. Затем перезагружаемся.&lt;br /&gt;
&lt;br /&gt;
В этом разделе специально подробно не описан процесс решения этой проблемы - из-за солидарности с разработчиками продукта.&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11433</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11433"/>
		<updated>2026-07-30T08:16:13Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Где брать, как ставить */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Порты 80 и 443 должны быть зарулены на сервер, если предполагается настройка сертификатов инсталлером через LestsEncrypt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После инсталляции админка будет доступна на порту&lt;br /&gt;
&lt;br /&gt;
 8443&lt;br /&gt;
&lt;br /&gt;
и туда входить нужно только по логину (не по полной почте).&lt;br /&gt;
&lt;br /&gt;
Т.е. только по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
, а не по &lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А в веб интерфейсе почты -- наоборот. Он находится по стандартному порту&lt;br /&gt;
&lt;br /&gt;
 443&lt;br /&gt;
&lt;br /&gt;
и туда входим по&lt;br /&gt;
&lt;br /&gt;
 admin@myorg.net&lt;br /&gt;
&lt;br /&gt;
, а не по&lt;br /&gt;
&lt;br /&gt;
 admin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Остальные порты важны будут при эксплуатации и при развёртывании их можно не забрасывать, о них -- ниже.&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11432</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11432"/>
		<updated>2026-07-29T11:18:05Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.1.2.3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.1.2.3 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.1.2.3 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
БОльшую часть из этой информации можно также получить из формы настроек домена из админки grommunio.&lt;br /&gt;
&lt;br /&gt;
Но есть нюанс с двумя записями:&lt;br /&gt;
&lt;br /&gt;
1. Обратная зона (PTR) -- её невозможно настроить в админке провайдера днс зоны. Её должен настроить провайдер, выдающий интернет для почтового сервера и статический айпи адрес для него. Здесь необходимо добиться от интернет-провайдера, чтобы на его стороне была прописана эта самая обратная зона PTR. Суть в том, чтобы происходил процесс наоборот: по айпи адресу -- выдавался домен. Для почтовых серверов это важно!&lt;br /&gt;
&lt;br /&gt;
2. Цифровая подпись (DKIM) -- чтобы корректно работала эта запись, сначала её необходимо настроить. Об этом подробно написано ниже!&lt;br /&gt;
&lt;br /&gt;
3. Разрешенные отправители (SPF) -- здесь также должен фигурировать статический айпи адрес почтового сервера.&lt;br /&gt;
&lt;br /&gt;
В примере это адрес 37.1.2.3, в реальном кейсе это должен быть везде айпи адрес конкретного сервера&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11431</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11431"/>
		<updated>2026-07-29T11:09:56Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (myorg.net)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.112.130.81 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.myorg.net.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT myorg.net +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.112.130.81 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.myorg.net +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@myorg.net&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11430</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11430"/>
		<updated>2026-07-29T11:09:09Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Инструкция по проверке DNS-записей почтового сервера (absolutpb.ru)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! Назначение !! Тип !! Команда для проверки !! Ожидаемый результат&lt;br /&gt;
|-&lt;br /&gt;
| '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;1 mail.absolutpb.ru.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.112.130.81 +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.absolutpb.ru.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT absolutpb.ru +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.112.130.81 ~all&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@absolutpb.ru&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11429</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11429"/>
		<updated>2026-07-29T11:07:41Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настроить записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Конфигурация DNS-записей почтового сервера (absolutpb.ru)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! № !! Назначение !! Тип !! Имя / Хост !! Значение (Value) !! Команда для проверки !! Статус&lt;br /&gt;
|-&lt;br /&gt;
| 1 || '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;10 mail.absolutpb.ru.&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig MX absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig A mail.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3 || '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.absolutpb.ru.&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig -x 37.112.130.81 +short&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || '''Разрешенные отправители (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.112.130.81 ~all&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT absolutpb.ru +short &amp;amp;#124; grep spf&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mailserver._domainkey&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA...AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT mailserver._domainkey.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6 || '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;_dmarc&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@absolutpb.ru&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;dig TXT _dmarc.absolutpb.ru +short&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ OK&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11428</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11428"/>
		<updated>2026-07-29T11:06:17Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настроить подпись писем через DKIM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить записи для домена==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot;&lt;br /&gt;
|+ '''Конфигурация DNS-записей почтового сервера (absolutpb.ru)'''&lt;br /&gt;
|- style=&amp;quot;background-color:#f2f2f2; text-align:left;&amp;quot;&lt;br /&gt;
! № !! Назначение !! Тип !! Имя / Хост !! Значение (Value) !! Текущий статус / Результат `dig`&lt;br /&gt;
|-&lt;br /&gt;
| 1 || '''Маршрутизация почты''' || &amp;lt;code&amp;gt;MX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;10 mail.absolutpb.ru.&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt; (&amp;lt;code&amp;gt;1 mail.absolutpb.ru.&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || '''IP-адрес узла''' || &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt; (&amp;lt;code&amp;gt;37.112.130.81&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || '''Обратная зона (PTR)''' || &amp;lt;code&amp;gt;PTR&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;81.130.112.37.in-addr.arpa&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mail.absolutpb.ru.&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt; (&amp;lt;code&amp;gt;mail.absolutpb.ru.&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || '''Авторизация отправителей (SPF)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=spf1 a mx ip4:37.112.130.81 ~all&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || '''Цифровая подпись (DKIM)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;mailserver._domainkey&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7jEiZ3hIjGIX9RkiP1+L9peS/vVNeTapbOEl+fFORhdD1uVCzUz+Q3RX5ZSTrZuJL2Q1TuDi3vHC8Ms6Gfhgyet3o7ppW0P2FYQd60eB16DaZSWBzPf7e3L6q9fodNSBi4BWgPL1qnzXDC/6hzYo7ixC2aaURg7SXlKHl6K9AFwIDAQAB&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt; (Ключ прописан в DNS)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || '''Политика безопасности (DMARC)''' || &amp;lt;code&amp;gt;TXT&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;_dmarc&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;&amp;quot;v=DMARC1; p=quarantine; rua=mailto:admin@absolutpb.ru&amp;quot;&amp;lt;/code&amp;gt; || &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;✔ Корректно&amp;lt;/span&amp;gt; (Режим Quarantine)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11427</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11427"/>
		<updated>2026-07-29T10:58:22Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Проверка работы механизма подписи емэйлов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Важно! У сервиса этого есть ограничения на кол-во проверок в сутки. Потом он просит денюжку или ждать следующего дня. Поэтому сначала проверяем текст в исходниках письма, как описано выше, и только потом - через сервис.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11426</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11426"/>
		<updated>2026-07-29T10:57:05Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Проверка работы механизма подписи емэйлов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Два!&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11425</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11425"/>
		<updated>2026-07-29T10:51:45Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Проверка TXT записи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Проверка работы механизма подписи емэйлов===&lt;br /&gt;
&lt;br /&gt;
Войти в веб интерфейс почты (не в админку по https://mail.myorg.net:8443, а просто на https://mail.myorg.net) любым ящиком, который есть в домене и отправить с него письмо куда-нибудь себе на ящик (gmail, yandex и.т.д...).&lt;br /&gt;
&lt;br /&gt;
У себя в аккаунте (gmail, yandex и.т.д...) ищем исходники письма (это обычно PlainText) и там должны быть такие строки:&lt;br /&gt;
&lt;br /&gt;
Раз! Само наличие этой строки говорит о том, что сервер стал подписывать письма!&lt;br /&gt;
&lt;br /&gt;
 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=myorg.net; s=mailserver; t=1785189679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=ckTMbuexoDGBdcu/luc2eNS+Ap0k9i9yjhltmXYdzGo=; b=BOe7sXr+EW6iTfZdDVCxA8gZ2gXBw3KcWC2PFALvbi6inSXlO/u3cZCLtEcBCJ9/accyFP Hn1W2qHSKEeY1B8Ri5SqqUoXBO7bEc5IPOr0dYyrivABFsT+Zr7XNeDUHlC6Lbt7YvaI4z vatOvc5T+qzDv/bqu685KqqK33PRQiY=&lt;br /&gt;
&lt;br /&gt;
Но это ещё не всё... Необходимо проверить проверку этой подписи. Здесь как раз важно, чтобы TXT запись у домена была корректна.&lt;br /&gt;
&lt;br /&gt;
Для этого также ищем среди исходинка письма следующую строку:&lt;br /&gt;
&lt;br /&gt;
 Authentication-Results: mx.google.com; dkim=pass header.i=@myorg.net header.s=mailserver header.b=BOe7sXr+; spf=pass (google.com: domain of admin@myorg.net designates 37.112.130.81 as permitted sender) smtp.mailfrom=admin@myorg.net; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=myorg.net&lt;br /&gt;
&lt;br /&gt;
Здесь важно увидеть&lt;br /&gt;
&lt;br /&gt;
 dkim=pass&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
&lt;br /&gt;
 spf=pass&lt;br /&gt;
&lt;br /&gt;
После этого можно проверить работу сервера через внешний сервис&lt;br /&gt;
&lt;br /&gt;
 https://mail-tester.com/&lt;br /&gt;
&lt;br /&gt;
При корректной настройке почтового сервера этот сервис должен показать 10 из 10 возможных &amp;quot;попугаев&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11424</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11424"/>
		<updated>2026-07-29T10:38:31Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Проверка TXT записи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка TXT записи===&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11423</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11423"/>
		<updated>2026-07-29T10:38:02Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка TXT записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Проверка TXT записи====&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
 dig TXT mailserver._domainkey.myorg.net +short&lt;br /&gt;
&lt;br /&gt;
в ответ должно прийти что-то типа&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
&lt;br /&gt;
здесь важно проверить что значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
соответствует той самой base64 строке, которая выше была получена через&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11422</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11422"/>
		<updated>2026-07-29T10:29:56Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка TXT записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Нюанс====&lt;br /&gt;
&lt;br /&gt;
Веб админка выдала на генерацию ключей что-то типа того:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это на самом деле означает, что значение TXT записи&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
в веб админке провайдера днс должно быть таким:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
, а на строчки оно разбивается по некоторым историческим причинам, суть которых в ограничении длины строки. Видимо, особенности протокола DNS...&lt;br /&gt;
&lt;br /&gt;
Перед тем, как конфигурировать TXT запись на уровне DNS необходимо свериться: точно ли у ключа, который ранее был скопирован в файл&lt;br /&gt;
&lt;br /&gt;
 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
base64 строка соответствует значению ключа&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
из значения для TXT записи, приведённой выше.&lt;br /&gt;
&lt;br /&gt;
Получить этот ключ можно следующим образом:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
В ответ придёт что-то вроде:&lt;br /&gt;
&lt;br /&gt;
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
В теории (в теории, но на практике было и по другому. Это надо проверить ещй раз!) эти ключи должны совпадать. Т.е. ключ, который с переносами и кавычками был выдан веб интеряейсом, и ключ, который выдала команда выше -- должны быть одинаковы. Ведь файл ключа одинаковый (мы его просто скопировали для донастройки grommunio-antispam)!&lt;br /&gt;
&lt;br /&gt;
Но на практике было и так что команда&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
выдавала ключ, который отличается. Если ключи будут отличаться, то в значение&lt;br /&gt;
&lt;br /&gt;
 p=&lt;br /&gt;
&lt;br /&gt;
для DNS записи необходимо заменить на значение, полученное от команды:&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в веб-админке DNS сервера добавляем запись типа&lt;br /&gt;
&lt;br /&gt;
 TXT&lt;br /&gt;
&lt;br /&gt;
, поддомен которой должен быть такой (полный домен имеется в виду такой: mailserver._domainkey.myorg.net)&lt;br /&gt;
&lt;br /&gt;
 mailserver._domainkey&lt;br /&gt;
&lt;br /&gt;
, а его значением должно быть&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDciA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&lt;br /&gt;
&lt;br /&gt;
т.е. в общем виде так:&lt;br /&gt;
&lt;br /&gt;
 v=DKIM1; k=rsa; p=&amp;lt;результат, полученный от команды openssl rsa -in...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как TXT запись домена проделегируется проверить это можно командой:&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11421</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11421"/>
		<updated>2026-07-29T10:15:14Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка TXT записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На всякий случай из файла нужно получить ключ, чтобы сравнить его с тем, который выдал веб интерфейс.&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11420</id>
		<title>Grommunio</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Grommunio&amp;diff=11420"/>
		<updated>2026-07-29T10:14:20Z</updated>

		<summary type="html">&lt;p&gt;Vovan: /* Настройка TXT записи для домена */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Развёртывание=&lt;br /&gt;
&lt;br /&gt;
==Где брать, как ставить==&lt;br /&gt;
&lt;br /&gt;
Для развёртывания на PVE можно прямо в хранилище PVE затащить образ по ссылке&lt;br /&gt;
&lt;br /&gt;
 https://download.grommunio.com/appliance/grommunio.x86_64-latest.install.iso&lt;br /&gt;
&lt;br /&gt;
Ставить по этой инструкции&lt;br /&gt;
&lt;br /&gt;
 https://docs.grommunio.com/admin/installation/&lt;br /&gt;
&lt;br /&gt;
Если ваши будущие емэйлы будут вида&lt;br /&gt;
&lt;br /&gt;
 user@myorg.net&lt;br /&gt;
&lt;br /&gt;
То нужно ориентироваться на домены&lt;br /&gt;
&lt;br /&gt;
 mail.myorg.net&lt;br /&gt;
&lt;br /&gt;
и &lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
при инсталляции.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Порты==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Порт !! Протокол !! Сервис / Назначение в Grommunio&lt;br /&gt;
|-&lt;br /&gt;
| 25 || TCP || '''SMTP''' — входящая почта (передача между почтовыми серверами)&lt;br /&gt;
|-&lt;br /&gt;
| 80 || TCP || '''HTTP''' — веб-интерфейс (перенаправление на HTTPS / Let's Encrypt)&lt;br /&gt;
|-&lt;br /&gt;
| 110 || TCP || '''POP3''' — получение почты (незашифрованный)&lt;br /&gt;
|-&lt;br /&gt;
| 143 || TCP || '''IMAP''' — получение почты (незашифрованный / STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 443 || TCP || '''HTTPS''' — Grommunio Web (Webmail), Outlook (EAS/MAPI over HTTP), Admin API&lt;br /&gt;
|-&lt;br /&gt;
| 465 || TCP || '''SMTPS''' — защищённая отправка почты клиентами (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 587 || TCP || '''SMTP Submission''' — отправка почты клиентами (STARTTLS)&lt;br /&gt;
|-&lt;br /&gt;
| 993 || TCP || '''IMAPS''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 995 || TCP || '''POP3S''' — защищённое получение почты (SSL/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 5349 || TCP || '''STUN/TURN''' (coturn) — установка видеосоединений Jitsi за NAT (HTTPS/TLS)&lt;br /&gt;
|-&lt;br /&gt;
| 8443 || TCP || '''Grommunio Admin Admin Web Console''' — веб-панель администратора&lt;br /&gt;
|-&lt;br /&gt;
| 10000 || UDP || '''Jitsi Videobridge''' — медиапоток (аудио, видео, шеринг экрана)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Настроить подпись писем через DKIM==&lt;br /&gt;
&lt;br /&gt;
===Действия мышкой в админке===&lt;br /&gt;
&lt;br /&gt;
Сначала внутри админки нужно создать домен и перейти в форму управления этим доменом.&lt;br /&gt;
&lt;br /&gt;
Там нужно настроить всякие умолчания для вновь создаваемых пользователей этого домена.&lt;br /&gt;
&lt;br /&gt;
С этими умолчаниями пользователи будут создаваться, если их создавать из админки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для настройки подписи через DKIM нужно нажать соответствующую кнопку в форме управления доменом. В открывшемся окне выполнить создание ключевой пары для подписи.&lt;br /&gt;
&lt;br /&gt;
Выбрать алгоритм RSA и selector. По умолчанию selector имеет значение&lt;br /&gt;
&lt;br /&gt;
 dkim&lt;br /&gt;
&lt;br /&gt;
, но можно установить свой. Этот селектор будет использован при настройке TXT записи для почтового домена.&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В ответ на запрос генерации ключей придёт примерно такой шаблон для настройки TXT записи для домена:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mailserver._domainkey IN TXT ( &amp;quot;v=DKIM1; k=rsa; &amp;quot;&lt;br /&gt;
	&amp;quot;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/D2gdESmBR0TqqeZ42wXCsEjGpPOB7uxp4uY0De+297hKs3XV+1CehUu5BxXxKKeJJIKRzogvzzOj76AXWMpiF5LS4oOUd3I+I+H8aCAC69QuV/TKHuB0Qqv7c8S54dw4210fHOSMMwVYlzfRGeyPfrKBcfZi4v98j7jh2on5f5btiaeppkUgUxMOPjTRepl3VzxTkID9cLrIEDc&amp;quot;&lt;br /&gt;
	&amp;quot;iA3nVMXbkj4wULMNSL3IjfuW4MRIJ6a4zZZqOECjrhBiSgAies+l0yh/+mn3LQmVcjba0RTuxa7x5xuf21AnKZvv0uZeQrROd0WrbLYGLFRO2Nk6/jUQPaPHS3ThDggbXz3RwIDAQAB&amp;quot;&lt;br /&gt;
) ; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и будет сказано что ключ лежит где-то здесь:&lt;br /&gt;
&lt;br /&gt;
 The private key has been generated on the server at&lt;br /&gt;
 /var/lib/grommunio-admin-api/myorg.net.mailserver.key&lt;br /&gt;
&lt;br /&gt;
Этот путь до файла ключа будет нужен потом при настройке сервера по ssh.&lt;br /&gt;
&lt;br /&gt;
===Настройка сервера по ssh===&lt;br /&gt;
&lt;br /&gt;
Для доступа по ssh под root лучше сразу получить на сервер открытую часть ssh ключа и настроить конфиг ssh для быстрого подключения. Под root на сервер по паролю подключиться не получится. А через виртуальный дисплей виртуальной машины нельзя будет скопировать текст на сервер.&lt;br /&gt;
&lt;br /&gt;
Поэтому самый верный вариант - зайти на сервер через виртуальный дисплей виртуальной машины, скопировать через scp открытую часть ключа с другой машины по сети, затем перейти на другую машину и подключаться по ключу с ней на сервер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Войдя по ssh на сервер необходимо сделать ряд настроек:&lt;br /&gt;
&lt;br /&gt;
Если ваш домен:&lt;br /&gt;
&lt;br /&gt;
 myorg.net&lt;br /&gt;
&lt;br /&gt;
а селектор&lt;br /&gt;
&lt;br /&gt;
 mailserver &lt;br /&gt;
&lt;br /&gt;
1. Создаём каталог&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /var/lib/grommunio-antispam/dkim/myorg.net&lt;br /&gt;
&lt;br /&gt;
2. Копируем тот самый файл, путь к которому нам сообщили в веб интерфейсе в предыдущем пункте в файл с названием селектора в только что созданный каталог&lt;br /&gt;
&lt;br /&gt;
 cp /var/lib/grommunio-admin-api/myorg.net.mailserver.key /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
3. Создайм файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; /etc/grommunio-antispam/override.d/dkim_signing.conf&lt;br /&gt;
enabled = true;&lt;br /&gt;
sign_authenticated = true;&lt;br /&gt;
sign_local = true;&lt;br /&gt;
&lt;br /&gt;
domain {&lt;br /&gt;
    &amp;quot;myorg.net&amp;quot; {&lt;br /&gt;
        path = &amp;quot;/var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&amp;quot;;&lt;br /&gt;
        selector = &amp;quot;mailserver&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use_domain = &amp;quot;header&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Устанавливаем права доступа на каталог и файл&lt;br /&gt;
&lt;br /&gt;
 chown -R groas:grommunio /var/lib/grommunio-antispam/dkim/&lt;br /&gt;
 chmod 600 /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key&lt;br /&gt;
&lt;br /&gt;
5. Перезапустить сервисы&lt;br /&gt;
&lt;br /&gt;
 systemctl restart grommunio-antispam&lt;br /&gt;
 systemctl restart postfix&lt;br /&gt;
&lt;br /&gt;
===Настройка TXT записи для домена===&lt;br /&gt;
&lt;br /&gt;
Эта настройка делается в веб панели управления доменом. В зависимости от того, где арендован домен. Например, reg.ru, beget.com и т.д...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На всякий случай из файла нужно получить ключ, чтобы сравнить его с тем, который&lt;br /&gt;
&lt;br /&gt;
 openssl rsa -in /var/lib/grommunio-antispam/dkim/myorg.net/mailserver.key -pubout -outform DER 2&amp;gt;/dev/null | base64 -w 0&lt;br /&gt;
&lt;br /&gt;
==Пакетное создание ящиков==&lt;br /&gt;
&lt;br /&gt;
==Особенности работы Community версии и способы починки==&lt;/div&gt;</summary>
		<author><name>Vovan</name></author>
		
	</entry>
</feed>