Проект почтовый сервер в Docker: различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) Нет описания правки |
||
| (не показаны 4 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
<blockquote>Docker mail server - это полнофункциональный почтовый сервер, представляющий собой набор образов Docker. Цель проекта - легко настраиваемый, легко обслуживаемый и полнофункциональный почтовый сервер. Эксклюзивной возможностью является автоматически создаваемая и обновляемая Адресная книга, реализованная на <code>OpenLDAP</code>.</blockquote> | <blockquote>[https://gitlab.com/argo-uln/docker-mail-server.git Docker mail server] - это полнофункциональный почтовый сервер, представляющий собой набор образов <code>Docker</code>. Цель проекта - легко настраиваемый, легко обслуживаемый и полнофункциональный почтовый сервер. Эксклюзивной возможностью является автоматически создаваемая и обновляемая Адресная книга, реализованная на <code>OpenLDAP</code>.</blockquote> | ||
== Основные возможности == | == Основные возможности == | ||
| Строка 10: | Строка 10: | ||
* Использование '''квот''' (ограничение размера почтовых ящиков) пользователей | * Использование '''квот''' (ограничение размера почтовых ящиков) пользователей | ||
* Разрешение пользователям | * Разрешение пользователям | ||
** управлять ''' | ** управлять '''фильтрацией писем''' | ||
** распределять письма по разным папкам | ** распределять письма по разным папкам | ||
** перенаправлять письма | ** перенаправлять письма | ||
| Строка 19: | Строка 19: | ||
== Как это работает? == | == Как это работает? == | ||
'''Рассмотрим пример, когда пользователь хочет отправить письмо в | '''Рассмотрим пример, когда пользователь хочет отправить письмо в Интернет.''' | ||
[[Файл:Submission.png|центр]] | [[Файл:Submission.png|центр]] | ||
# Пользователь подключается по защищенному соединению к Dovecot на порт submission 587(STARTTLS). | # Пользователь подключается по защищенному соединению к <code>Dovecot</code> на порт <code>submission</code> 587(<code>STARTTLS</code>). | ||
# Dovecot проверяет имя пользователя и пароль в базе данных. | # <code>Dovecot</code> проверяет имя пользователя и пароль в базе данных. | ||
# Если пользователь опознан, то сообщение перенаправляется на отправку в Postfix. | # Если пользователь опознан, то сообщение перенаправляется на отправку в <code>Postfix</code>. | ||
# Postfix отправляет сообщение на проверку в RSPAMD. | # <code>Postfix</code> отправляет сообщение на проверку в <code>RSPAMD</code>. | ||
# RSPAMD хранит свои данные в redis. | # <code>RSPAMD</code> хранит свои данные в <code>redis</code>. | ||
# RSMAMD проверяет письмо на вирусы (если обнаружен вирус отправка письма прекращается). | # <code>RSMAMD</code> проверяет письмо на вирусы (если обнаружен вирус отправка письма прекращается). | ||
# После проверки письмо возвращается в Postfix. | # После проверки письмо возвращается в <code>Postfix</code>. | ||
# Postfix отправляет письмо на почтовый сервер получателя. | # <code>Postfix</code> отправляет письмо на почтовый сервер получателя. | ||
'''Рассмотрим пример получения письма из | '''Рассмотрим пример получения письма из сети Интернет.''' | ||
[[Файл:Mail-in.png|центр]] | [[Файл:Mail-in.png|центр]] | ||
# Удаленный почтовый сервер подключается к нашему серверу Postfix по протоколу SMTP. | # Удаленный почтовый сервер подключается к нашему серверу <code>Postfix</code> по протоколу <code>SMTP</code>. | ||
# Postfix проверяет в базе данных домен получателя. Если это наш виртуальный домен, то проверяет имя пользователя. | # <code>Postfix</code> проверяет в базе данных домен получателя. Если это наш виртуальный домен, то проверяет имя пользователя. | ||
# Если письмо адресовано нашему пользователю, то оно отправляется на проверку в RSPAMD. | # Если письмо адресовано нашему пользователю, то оно отправляется на проверку в <code>RSPAMD</code>. | ||
# RSPAMD хранит свои данные в redis. | # <code>RSPAMD</code> хранит свои данные в <code>redis</code>. | ||
# | # <code>RSPAMD</code> проверяет письмо на вирусы (если обнаружен вирус письмо отбрасывается). | ||
# После проверки письмо возвращается Postfix. | # После проверки письмо возвращается в <code>Postfix</code>. | ||
# Postfix отправляет письмо в Dovecot для локальной доставки в ящик пользователя. | # <code>Postfix</code> отправляет письмо в <code>Dovecot</code> для локальной доставки в ящик пользователя. | ||
# Dovecot проверяет дополнительные правила Sieve и сохраняет письмо в локальный ящик пользователя. | # <code>Dovecot</code> проверяет дополнительные правила <code>Sieve</code> и сохраняет письмо в локальный ящик пользователя. | ||
== Предварительная настройка == | == Предварительная настройка == | ||
Прежде чем начать установку почтового сервера, необходимо настроить DNS хотя бы для одного домена. | Прежде чем начать установку почтового сервера, необходимо настроить <code>DNS</code> хотя бы для одного домена. | ||
'''Имя хоста почтового сервера.''' | '''Имя хоста почтового сервера.''' | ||
Почтовый сервер должен иметь уникальное имя хоста. Это имя является полным доменным именем и указывает на Ip адрес вашего сервера. Например, если ваш почтовый домен называется <code>example.org</code>, то имя хоста почтового сервера может называться <code>mail.example.org</code>. Убедитесь что в DNS есть запись для вашего имени хоста | Почтовый сервер должен иметь уникальное имя хоста. Это имя является полным доменным именем и указывает на <code>Ip</code> адрес вашего сервера. Например, если ваш почтовый домен называется <code>example.org</code>, то имя хоста почтового сервера может называться <code>mail.example.org</code>. Убедитесь что в <code>DNS</code> есть запись для вашего имени хоста | ||
<code>mail.example.org. IN A x.x.x.x</code> | <code>mail.example.org. IN A x.x.x.x</code> | ||
| Строка 57: | Строка 57: | ||
'''MX запись.''' | '''MX запись.''' | ||
Для каждого вашего почтового домена в DNS должна быть MX запись. С | Для каждого вашего почтового домена в <code>DNS</code> должна быть <code>MX</code> запись. С помощью этой записи другие почтовые сервера определяют имя хоста вашего почтового сервера. А потом имя хоста разрешается в <code>IP</code> адрес с помощью записи <code>A</code> в <code>DNS</code>. | ||
Для домена <code>example.org</code> MX запись будет выглядеть так | Для домена <code>example.org</code> MX запись будет выглядеть так | ||
| Строка 73: | Строка 73: | ||
Проверить это можно командой <code>nslookup x.x.x.x</code> | Проверить это можно командой <code>nslookup x.x.x.x</code> | ||
Запись в обратной зоне доступна к изменению владельцу IP адреса, обычно это ваш провайдер. Если не настроить правильно обратную зону, большинство почтовых серверов будут отмечать ваши письма как SPAM. | Запись в обратной зоне доступна к изменению владельцу <code>IP</code> адреса, обычно это ваш провайдер. Если не настроить правильно обратную зону, большинство почтовых серверов будут отмечать ваши письма как <code>SPAM</code>. | ||
'''DKIM, SPF, DMARC записи.''' | '''DKIM, SPF, DMARC записи.''' | ||
DKIM запись для доменов будет создана в процессе установки. Посмотреть ее можно командой <code>cat filter/dkim/mail.pub</code> | <code>DKIM</code> запись для доменов будет создана в процессе установки. Посмотреть ее можно командой <code>cat filter/dkim/mail.pub</code> | ||
<code>mail._domainkey IN TXT "v=DKIM1; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72iwPIqgo7Q91GEgNPafzwavpIYW0pm5Lm6T7Z65AcRS6R/acAZUaCLJiqZp8LpUwiUnjsCo0r2rOwMEGO83BQoe3kXdGUdgnngOYvS+AiQP5QOd9vZfYkhgAMrR9KAdl9dMaq1cd9PkxV4aQRwu2xiuXJfDZIMtSCn/25MaaiCUROw7VZmi/J/As/z1ya1lfXGS6Iy2yC0zbrO8G""wMoeM4YqyabONDJx4CpkynQ7WOexu27SClalNv0tIme7xSyKK2KDBf4ZmbUyWaZzz4/dDKUFJs3JAolFFoo/JGr7rI7d/JSO0ruUJyPM2pwv0NcO6E+0D28VVbAnWK3X7uQMQIDAQAB"</code> | <code>mail._domainkey IN TXT "v=DKIM1; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72iwPIqgo7Q91GEgNPafzwavpIYW0pm5Lm6T7Z65AcRS6R/acAZUaCLJiqZp8LpUwiUnjsCo0r2rOwMEGO83BQoe3kXdGUdgnngOYvS+AiQP5QOd9vZfYkhgAMrR9KAdl9dMaq1cd9PkxV4aQRwu2xiuXJfDZIMtSCn/25MaaiCUROw7VZmi/J/As/z1ya1lfXGS6Iy2yC0zbrO8G""wMoeM4YqyabONDJx4CpkynQ7WOexu27SClalNv0tIme7xSyKK2KDBf4ZmbUyWaZzz4/dDKUFJs3JAolFFoo/JGr7rI7d/JSO0ruUJyPM2pwv0NcO6E+0D28VVbAnWK3X7uQMQIDAQAB"</code> | ||
| Строка 93: | Строка 93: | ||
* <code>Please enter FQDN hostname:</code> (введите полное имя хоста, пример mail.example.org) | * <code>Please enter FQDN hostname:</code> (введите полное имя хоста, пример mail.example.org) | ||
* <code>Please enter mail domain:</code> (введите имя вашего домена, пример example.org) | * <code>Please enter mail domain:</code> (введите имя вашего домена, пример example.org) | ||
* <code>Please enter RSPAMD web access password:</code> (введите пароль для | * <code>Please enter RSPAMD web access password:</code> (введите пароль для веб интерфейса RSPAMD) | ||
* <code>Please enter LDAP user admin password:</code> (введите пароль пользователя admin для Openldap) | * <code>Please enter LDAP user admin password:</code> (введите пароль пользователя admin для Openldap) | ||
* <code>Please enter LDAP user adressbook password:</code> (введите пароль для LDAP пользователя <code>addressbook</code> - имеет доступ на чтение адресной книги) | * <code>Please enter LDAP user adressbook password:</code> (введите пароль для LDAP пользователя <code>addressbook</code> - имеет доступ на чтение адресной книги) | ||
* <code>Please enter the ip addresses separated by a space to access the services postfixadmin, rspamd. Default, access to them is closed:</code> (введите ip адреса через пробел с которых будет предоставлен доступ к postfixadmin, rspamd, phpldapadmin) | * <code>Please enter the ip addresses separated by a space to access the services postfixadmin, rspamd. Default, access to them is closed:</code> (введите ip адреса через пробел с которых будет предоставлен доступ к <code>postfixadmin</code>, <code>rspamd</code>, <code>phpldapadmin</code>) | ||
* Далее будет предложено <code>You can start the build and run with the command: docker-compose up -d</code> (запустите команду для установки и настройки сервиса почтового сервера) | * Далее будет предложено <code>You can start the build and run with the command: docker-compose up -d</code> (запустите команду для установки и настройки сервиса почтового сервера) | ||
* Запустите команду <code>docker-compose up</code> и подождем, пока контейнеры соберутся и запустятся. | * Запустите команду <code>docker-compose up</code> и подождем, пока контейнеры соберутся и запустятся. | ||
* Откройте в браузере страницу <nowiki>https://mail.example.org/postfixadmin/setup.php</nowiki> (где mail.example.org замените на имя вашего сервера) | * Откройте в браузере страницу <nowiki>https://mail.example.org/postfixadmin/setup.php</nowiki> (где mail.example.org замените на имя вашего сервера) | ||
* Введите пароль для mysql. | * Введите пароль для <code>mysql</code>. | ||
[[Файл:Setup password.png|центр|1280x1280пкс]] | [[Файл:Setup password.png|центр|1280x1280пкс]] | ||
* Прокрутите окно браузера вниз. Введите еще раз пароль для mysql. Создайте пользователя администратор postfixadmin. Есть ограничения. Пароль должен содержать не менее 5 символов (не мене 3 букв, 2 цифр, одного спец символа). Имя пользователя, что то типа admin@example.org (подставьте свой домен). | * Прокрутите окно браузера вниз. Введите еще раз пароль для <code>mysql</code>. Создайте пользователя администратор <code>postfixadmin</code>. Есть ограничения. Пароль должен содержать не менее 5 символов (не мене 3 букв, 2 цифр, одного спец символа). Имя пользователя, что то типа admin@example.org (подставьте свой домен). | ||
[[Файл:Add superadmin acc.png|центр|1280x1280пкс]] | [[Файл:Add superadmin acc.png|центр|1280x1280пкс]] | ||
* Зайдите по ссылке <nowiki>https://mail.example.org/postfixadmin/login.php</nowiki>. | * Зайдите по ссылке <nowiki>https://mail.example.org/postfixadmin/login.php</nowiki>. | ||
| Строка 108: | Строка 108: | ||
* Откройте web интерфейс почты <nowiki>https://mail.example.org/mail/</nowiki>. Логин: admin@example.org. | * Откройте web интерфейс почты <nowiki>https://mail.example.org/mail/</nowiki>. Логин: admin@example.org. | ||
* Пропишите '''dkim''' запись в dns зонах всех ваших доменов. Для получения ключа запустите команду <code>cat filter/dkim/mail.pub</code> | * Пропишите '''dkim''' запись в dns зонах всех ваших доменов. Для получения ключа запустите команду <code>cat filter/dkim/mail.pub</code> | ||
<syntaxhighlight lang="console"> | |||
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " | |||
"p=ваш-dkim-ключ" ) ; | |||
</syntaxhighlight> | |||
* Вы можете проверить ваш ключ на сервисе | * Вы можете проверить ваш ключ на сервисе https://dkimcore.org/tools/keycheck.html | ||
** В поле <code>Selector:</code> mail | ** В поле <code>Selector:</code> mail | ||
** В поле <code>Domain name:</code> example.org | ** В поле <code>Domain name:</code> example.org | ||
** Нажмите - <code>Check</code> | ** Нажмите - <code>Check</code> | ||
<blockquote>'''''Обратите внимание:''''' Мы используем один ключ для всех наших доменов.</blockquote> | |||
* Для доступа к серверу <code>RSPAMD</code> откройте страницу <nowiki>https://mail.example.org/rspamd/</nowiki> Введите пароль для доступа на станицу. | |||
'''''Обратите внимание:''''' Мы используем один ключ для всех наших доменов. | * Перейдите на вкладку <code>Сonfiguration</code>. | ||
* Настройки: | |||
** <code>Greylist</code> 4 | |||
** <code>Probably Spam</code> 6 | |||
** <code>Rewrite subject</code> 7 | |||
** <code>Spam</code> 150 (Письма гарантированно пройдут и попадут в папку "Спам") | |||
* <code>Greylist</code> 4 | * Сохраните изменения. <code>Save action</code>, <code>Save cluster</code>. | ||
* <code>Probably Spam</code> 6 | * Протестируйте ваши письма на спам на сайте https://www.mail-tester.com/ | ||
* <code>Rewrite subject</code> 7 | <blockquote>'''''Обратите внимание:''''' В случае обнаружения вируса в письме, оно будет отброшено.</blockquote> | ||
* <code>Spam</code> 150 (Письма гарантированно пройдут и попадут в папку "Спам") | |||
'''''Обратите внимание:''''' В случае обнаружения вируса в письме, оно будет отброшено. | |||
== Комментарии к установке == | == Комментарии к установке == | ||
| Строка 157: | Строка 150: | ||
* Из шаблона .env.dist будет создан файл переменных окружения .env | * Из шаблона .env.dist будет создан файл переменных окружения .env | ||
* Значение <code>MYSQL PASSWORD</code> подставится в переменные <code>POSTFIXADMIN_DB_PASSWORD</code>, <code>PA_SETUP_PASS</code>, <code>MYSQL_ROOT_PASSWORD</code>, <code>MYSQL_PASSWORD</code>, <code>ROUNDCUBEMAIL_DB_PASSWORD</code> файла .env. Также из значения <code>MYSQL PASSWORD</code> | * Значение <code>MYSQL PASSWORD</code> подставится в переменные <code>POSTFIXADMIN_DB_PASSWORD</code>, <code>PA_SETUP_PASS</code>, <code>MYSQL_ROOT_PASSWORD</code>, <code>MYSQL_PASSWORD</code>, <code>ROUNDCUBEMAIL_DB_PASSWORD</code> файла .env. Также из значения <code>MYSQL PASSWORD</code> создается переменная <code>PA_SETUP_HASH</code> для файла конфигурации postfixadmin/config.local.php | ||
* Значение <code>FQDN hostname</code> подставится в переменные <code>MAILNAME</code>, <code>LE_FQDN</code>, <code>ROUNDCUBEMAIL_SMTP_SERVER</code>, <code>ROUNDCUBEMAIL_DEFAULT_HOST</code>файла .env. Также значение <code>FQDN hostname</code> будет использовано в файле roundcube/config/managesieve.php Из <code>FQDN hostname</code> будут сгенерированы переменные LDAP <code>BASEDN</code> и <code>ROOTDN</code>. Они используются в файле <code>openldap/conf/mysql_ldap.php</code>, который создает и обновляет <code>Адресную книгу</code> и алиас <code>Всем пользователям домена</code> в <code>mysql</code> | * Значение <code>FQDN hostname</code> подставится в переменные <code>MAILNAME</code>, <code>LE_FQDN</code>, <code>ROUNDCUBEMAIL_SMTP_SERVER</code>, <code>ROUNDCUBEMAIL_DEFAULT_HOST</code>файла .env. Также значение <code>FQDN hostname</code> будет использовано в файле roundcube/config/managesieve.php Из <code>FQDN hostname</code> будут сгенерированы переменные LDAP <code>BASEDN</code> и <code>ROOTDN</code>. Они используются в файле <code>openldap/conf/mysql_ldap.php</code>, который создает и обновляет <code>Адресную книгу</code> и алиас <code>Всем пользователям домена</code> в <code>mysql</code> | ||
* Значение <code>mail domain</code> подставится в переменные <code>DOMAIN</code>, <code>POSTMASTER</code>, <code>LE_EMAIL</code> файла .env и в файле postfixadmin/config.local.php | * Значение <code>mail domain</code> подставится в переменные <code>DOMAIN</code>, <code>POSTMASTER</code>, <code>LE_EMAIL</code> файла .env и в файле postfixadmin/config.local.php | ||
| Строка 359: | Строка 352: | ||
'''Откройте web интерфейс почты <nowiki>https://mail.example.org/mail/</nowiki>.''' | '''Откройте web интерфейс почты <nowiki>https://mail.example.org/mail/</nowiki>.''' | ||
* Фильтры Sieve. | |||
Откройте <code>Настройки</code>, <code>Фильтры</code>. Во вкладке <code>Фильтры</code> нажмите <code>+</code>. Появится окошко создания фильтра. Доступно многое, а именно возможность распределять письма по разным папкам, перенаправлять письма, или отправлять уведомления об отсутствии на рабочем месте. После создания фильтра нажмите <code>сохранить</code>. | Откройте <code>Настройки</code>, <code>Фильтры</code>. Во вкладке <code>Фильтры</code> нажмите <code>+</code>. Появится окошко создания фильтра. Доступно многое, а именно возможность распределять письма по разным папкам, перенаправлять письма, или отправлять уведомления об отсутствии на рабочем месте. После создания фильтра нажмите <code>сохранить</code>. | ||
* Адресная книга LDAP. | |||
Нажмите в меню <code>Контакты</code>. Отобразится адресная книга LDAP. Обновляется один раз в час. В контактах отобразятся <code>пользователи</code> всех ваших доменов и алиасы <code>Всем пользователям домена</code>. | Нажмите в меню <code>Контакты</code>. Отобразится адресная книга LDAP. Обновляется один раз в час. В контактах отобразятся <code>пользователи</code> всех ваших доменов и алиасы <code>Всем пользователям домена</code>. | ||
| Строка 425: | Строка 418: | ||
=== Утилита IMAPSync === | === Утилита IMAPSync === | ||
Помощь при переносе | Помощь при переносе почтовых ящиков с одного почтового сервера на другой. Протестировано на <code>Ubuntu 20.04</code>. Взято <nowiki>https://www.ylsoftware.com/news/733</nowiki><blockquote>Утилиту необходимо запускать на отдельном хосте.</blockquote> | ||
* Установим зависимости. | |||
<syntaxhighlight lang="console"> | |||
sudo apt install \ | |||
libauthen-ntlm-perl \ | |||
libclass-load-perl \ | |||
libcrypt-ssleay-perl \ | |||
libdata-uniqid-perl \ | |||
libdigest-hmac-perl \ | |||
libdist-checkconflicts-perl \ | |||
libencode-imaputf7-perl \ | |||
libfile-copy-recursive-perl \ | |||
libfile-tail-perl \ | |||
libio-compress-perl \ | |||
libio-socket-inet6-perl \ | |||
libio-socket-ssl-perl \ | |||
libio-tee-perl \ | |||
libmail-imapclient-perl \ | |||
libmodule-scandeps-perl \ | |||
libnet-dbus-perl \ | |||
libnet-ssleay-perl \ | |||
libpar-packer-perl \ | |||
libreadonly-perl \ | |||
libregexp-common-perl \ | |||
libsys-meminfo-perl \ | |||
libterm-readkey-perl \ | |||
libtest-fatal-perl \ | |||
libtest-mock-guard-perl \ | |||
libtest-mockobject-perl \ | |||
libtest-pod-perl \ | |||
libtest-requires-perl \ | |||
libtest-simple-perl \ | |||
libunicode-string-perl \ | |||
liburi-perl \ | |||
libtest-nowarnings-perl \ | |||
libtest-deep-perl \ | |||
libtest-warn-perl \ | |||
make \ | |||
cpanminus | |||
</syntaxhighlight> | |||
* Скачаем imapsync <code>git clone <nowiki>https://github.com/imapsync/imapsync.git</nowiki></code> | |||
* <code>cd imapsync</code> | |||
* Создадим файл <code>mails.csv</code> | |||
<code>old_login|old_pass|new_login|new_pass|</code> | <code>old_login|old_pass|new_login|new_pass|</code> | ||
| Строка 474: | Строка 468: | ||
Где Здесь "old_login" и "old_pass" - логин и пароль пользователя на старом сервере, а "new_login" и "new_pass" - логин и пароль пользователя на новом сервере. | Где Здесь "old_login" и "old_pass" - логин и пароль пользователя на старом сервере, а "new_login" и "new_pass" - логин и пароль пользователя на новом сервере. | ||
* Создадим файл <code>sync.sh</code> | |||
* Дадим права на запуск<code>chmod +x sync.sh</code> | |||
* Содержимое файла sync.sh | |||
<syntaxhighlight lang="console"> | |||
#!/bin/bash | |||
cd `dirname $0` | |||
for line in `cat mails.csv | grep -v ^#`; do | |||
M_USER=`echo ${line} | cut -d '|' -f1` | |||
M_PASS=`echo ${line} | cut -d '|' -f2` | |||
N_USER=`echo ${line} | cut -d '|' -f3` | |||
N_PASS=`echo ${line} | cut -d '|' -f4` | |||
echo "Processing ${M_USER}..." | |||
./imapsync --host1 imap.yandex.com --port1 993 --user1 ${M_USER} --password1 ${M_PASS} --ssl1 --host2 mail.example.org --port2 143 --user2 ${N_USER} --password2 ${N_PASS} --tls2 | |||
if [ $? -ne "0" ]; then | |||
echo ${M_USER} >> mail_errors | |||
fi | |||
done | |||
</syntaxhighlight> | |||
* После выполнения скрипта в файл "mail_errors" будут записаны логины пользователей, для которых перенос почты не удался. | |||
=== Если что-то пошло не так. === | === Если что-то пошло не так. === | ||
| Строка 509: | Строка 505: | ||
=== Служебные пользователи доменов === | === Служебные пользователи доменов === | ||
* При создании нового домена в <code>PostfixAdmin</code> автоматически создаются адреса алиасы <code>abuse@newdomain</code>, <code>hostmaster@newdomain</code>, <code>postmaster@newdomain</code>, <code>webmaster@newdomain</code>. Они автоматически переадресовывают почту на | * При создании нового домена в <code>PostfixAdmin</code> автоматически создаются адреса алиасы <code>abuse@newdomain</code>, <code>hostmaster@newdomain</code>, <code>postmaster@newdomain</code>, <code>webmaster@newdomain</code>. Они автоматически переадресовывают почту на основной домен, на почтовый ящик <code>admin@example.org</code> | ||
== Смотрите также == | == Смотрите также == | ||
* Данный проект основан на инструкции ISPMail guide и проекте Docker-mailserver. | * Данный проект основан на инструкции [https://workaround.org/ispmail/ ISPMail guide] и проекте [https://github.com/jeboehm/docker-mailserver Docker-mailserver]. | ||
* Также реализовано автоматическое получение и обновление сертификата '''LetsEncript''', использован проект NGINX-LE - Nginx web and proxy with automatic let's encrypt. | * Также реализовано автоматическое получение и обновление сертификата '''LetsEncript''', использован проект [https://github.com/nginx-le/nginx-le NGINX-LE - Nginx web and proxy with automatic let's encrypt]. | ||
== Лицензия == | == Лицензия == | ||
MIT | MIT | ||
Текущая версия от 19:14, 11 сентября 2025
Docker mail server - это полнофункциональный почтовый сервер, представляющий собой набор образов
Docker. Цель проекта - легко настраиваемый, легко обслуживаемый и полнофункциональный почтовый сервер. Эксклюзивной возможностью является автоматически создаваемая и обновляемая Адресная книга, реализованная наOpenLDAP.
Основные возможности
- Получение писем для всех ваших виртуальных почтовых доменов
- Фильтрация спама и вредоносных программ
- Отправка писем
- Шифрование всех соединений (по возможности)
- Добавление DKIM подписи к отправляемым письмам
- Хранение писем на диске сервера
- Использование квот (ограничение размера почтовых ящиков) пользователей
- Разрешение пользователям
- управлять фильтрацией писем
- распределять письма по разным папкам
- перенаправлять письма
- отправлять уведомления об отсутствии на рабочем месте
- Предоставление Webmail доступа к почте
PostfixAdminдля администрирования почтовых ящиков и доменов- Автоматическая Адресная книга на
OpenLDAP(Она автоматически обновляется при появлении и удалении пользователей в базеPostfixAdmin. Автоматически создается alias Всем пользователям Домена, который создает в базеPostfixAdminодноименный alias.)
Как это работает?
Рассмотрим пример, когда пользователь хочет отправить письмо в Интернет.

- Пользователь подключается по защищенному соединению к
Dovecotна портsubmission587(STARTTLS). Dovecotпроверяет имя пользователя и пароль в базе данных.- Если пользователь опознан, то сообщение перенаправляется на отправку в
Postfix. Postfixотправляет сообщение на проверку вRSPAMD.RSPAMDхранит свои данные вredis.RSMAMDпроверяет письмо на вирусы (если обнаружен вирус отправка письма прекращается).- После проверки письмо возвращается в
Postfix. Postfixотправляет письмо на почтовый сервер получателя.
Рассмотрим пример получения письма из сети Интернет.

- Удаленный почтовый сервер подключается к нашему серверу
Postfixпо протоколуSMTP. Postfixпроверяет в базе данных домен получателя. Если это наш виртуальный домен, то проверяет имя пользователя.- Если письмо адресовано нашему пользователю, то оно отправляется на проверку в
RSPAMD. RSPAMDхранит свои данные вredis.RSPAMDпроверяет письмо на вирусы (если обнаружен вирус письмо отбрасывается).- После проверки письмо возвращается в
Postfix. Postfixотправляет письмо вDovecotдля локальной доставки в ящик пользователя.Dovecotпроверяет дополнительные правилаSieveи сохраняет письмо в локальный ящик пользователя.
Предварительная настройка
Прежде чем начать установку почтового сервера, необходимо настроить DNS хотя бы для одного домена.
Имя хоста почтового сервера.
Почтовый сервер должен иметь уникальное имя хоста. Это имя является полным доменным именем и указывает на Ip адрес вашего сервера. Например, если ваш почтовый домен называется example.org, то имя хоста почтового сервера может называться mail.example.org. Убедитесь что в DNS есть запись для вашего имени хоста
mail.example.org. IN A x.x.x.x
где x.x.x.x это IP адрес внешнего интерфейса вашего сервера. Исключением является сервер в DMZ. В этом случае вы должны использовать перенаправление портов с публичного IP адреса на ваш сервер.
MX запись.
Для каждого вашего почтового домена в DNS должна быть MX запись. С помощью этой записи другие почтовые сервера определяют имя хоста вашего почтового сервера. А потом имя хоста разрешается в IP адрес с помощью записи A в DNS.
Для домена example.org MX запись будет выглядеть так
example.org. IN MX 10 mail.example.org.
Для другого вашего домена mydomen1.com MX будет выглядеть так
mydomen1.com IN MX 10 mail.example.org.
Запись в обратной зоне DNS.
Для почтового сервера настоятельно рекомендуется настроить запись в обратной зоне DNS. Если ваше DNS имя mail.example.org разрешается в IP x.x.x.x, то и ваш IP x.x.x.x должен разрешаться в DNS имя mail.example.org
Проверить это можно командой nslookup x.x.x.x
Запись в обратной зоне доступна к изменению владельцу IP адреса, обычно это ваш провайдер. Если не настроить правильно обратную зону, большинство почтовых серверов будут отмечать ваши письма как SPAM.
DKIM, SPF, DMARC записи.
DKIM запись для доменов будет создана в процессе установки. Посмотреть ее можно командой cat filter/dkim/mail.pub
mail._domainkey IN TXT "v=DKIM1; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72iwPIqgo7Q91GEgNPafzwavpIYW0pm5Lm6T7Z65AcRS6R/acAZUaCLJiqZp8LpUwiUnjsCo0r2rOwMEGO83BQoe3kXdGUdgnngOYvS+AiQP5QOd9vZfYkhgAMrR9KAdl9dMaq1cd9PkxV4aQRwu2xiuXJfDZIMtSCn/25MaaiCUROw7VZmi/J/As/z1ya1lfXGS6Iy2yC0zbrO8G""wMoeM4YqyabONDJx4CpkynQ7WOexu27SClalNv0tIme7xSyKK2KDBf4ZmbUyWaZzz4/dDKUFJs3JAolFFoo/JGr7rI7d/JSO0ruUJyPM2pwv0NcO6E+0D28VVbAnWK3X7uQMQIDAQAB"
SPF запись может выглядеть так @ IN TXT "v=spf1 a mx ip4:x.x.x.x ~all"
DMARC запись _dmarc IN TXT "v=DMARC1;p=none"
Установка
- Запустите
git clone https://gitlab.com/argo-uln/docker-mail-server.git - Перейдите в директорию
cd docker-mail-server - Запустите файл предварительной настройки
./setup.sh. Что делает это скрипт смотрите ниже в разделе Комментарии к установке. - На предложение
Please enter MYSQL PASSWORD:(введите пароль для mysql) Please enter FQDN hostname:(введите полное имя хоста, пример mail.example.org)Please enter mail domain:(введите имя вашего домена, пример example.org)Please enter RSPAMD web access password:(введите пароль для веб интерфейса RSPAMD)Please enter LDAP user admin password:(введите пароль пользователя admin для Openldap)Please enter LDAP user adressbook password:(введите пароль для LDAP пользователяaddressbook- имеет доступ на чтение адресной книги)Please enter the ip addresses separated by a space to access the services postfixadmin, rspamd. Default, access to them is closed:(введите ip адреса через пробел с которых будет предоставлен доступ кpostfixadmin,rspamd,phpldapadmin)- Далее будет предложено
You can start the build and run with the command: docker-compose up -d(запустите команду для установки и настройки сервиса почтового сервера) - Запустите команду
docker-compose upи подождем, пока контейнеры соберутся и запустятся. - Откройте в браузере страницу https://mail.example.org/postfixadmin/setup.php (где mail.example.org замените на имя вашего сервера)
- Введите пароль для
mysql.

- Прокрутите окно браузера вниз. Введите еще раз пароль для
mysql. Создайте пользователя администраторpostfixadmin. Есть ограничения. Пароль должен содержать не менее 5 символов (не мене 3 букв, 2 цифр, одного спец символа). Имя пользователя, что то типа admin@example.org (подставьте свой домен).

- Зайдите по ссылке https://mail.example.org/postfixadmin/login.php.
- Создайте почтовый домен example.org. Создайте пользователя admin@example.org. Пароль должен содержать не менее 5 символов (не мене 3 букв, 2 цифр, одного спец символа)
- Откройте web интерфейс почты https://mail.example.org/mail/. Логин: admin@example.org.
- Пропишите dkim запись в dns зонах всех ваших доменов. Для получения ключа запустите команду
cat filter/dkim/mail.pub
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=ваш-dkim-ключ" ) ;
- Вы можете проверить ваш ключ на сервисе https://dkimcore.org/tools/keycheck.html
- В поле
Selector:mail - В поле
Domain name:example.org - Нажмите -
Check
- В поле
Обратите внимание: Мы используем один ключ для всех наших доменов.
- Для доступа к серверу
RSPAMDоткройте страницу https://mail.example.org/rspamd/ Введите пароль для доступа на станицу. - Перейдите на вкладку
Сonfiguration. - Настройки:
Greylist4Probably Spam6Rewrite subject7Spam150 (Письма гарантированно пройдут и попадут в папку "Спам")
- Сохраните изменения.
Save action,Save cluster. - Протестируйте ваши письма на спам на сайте https://www.mail-tester.com/
Обратите внимание: В случае обнаружения вируса в письме, оно будет отброшено.
Комментарии к установке
Разберем что делает setup.sh.
- В процессе работы
setup.shустановится пакетphp-cli(если не был установлен ранее). - В корне сервера будет создана папка для почтовых ящиков
/mail, права на папку 777. - Из шаблона
.env.distбудет создан файл переменных окружения.env. - Из шаблона
nginx/service.conf.distбудет созданnginx/service.conf. В него будут добавлены ваши ip адреса для доступа к сервисамPostfixAdmin,Rspamd. - Из шаблона
openldap/ldif/addressbook.ldif.distбудет создан файлopenldap/ldif/addressbook.ldif - Из шаблона
openldap/ldif/ldap-add-ou-addressbook.ldif.distбудет создан файлopenldap/ldif/ldap-add-ou-addressbook.ldif - Из шаблона
openldap/ldif/oclAccess.ldif.distбудет создан файлopenldap/ldif/oclAccess.ldif - Из шаблона
openldap/conf/mysql_ldap.php.distбудет создан файлopenldap/conf/mysql_ldap.php. Этот файл будет запускаться один раз в час. Он считывает из базыMysqlдомены, пользователей. Создает вOpenldapадресную книгу, алиасВсем пользователям домена. В базеMysqlсоздается алиасВсем пользователям домена. В случае удаления пользователей адресная книга вOpenlpadобновляется. Так же обновляется алиасВсем пользователям доменав базеMysql. - Из шаблона
roundcube/config/ldap.php.distбудет создан файл конфигурацииroundcube/config/ldap.php - Из шаблона
roundcube/config/managesieve.php.distбудет создан файл конфигурацииroundcube/config/managesieve.php. - Из шаблона
postfixadmin/config.local.php.distбудет создан файл конфигурацииpostfixadmin/config.local.php. - Из шаблона
init/roundcube.sql.distбудет создан файлinit/roundcube.sql.
Переменные окружения
После запуска файла предварительной настройки ./setup.sh вас попросят ввести
MYSQL PASSWORD, FQDN hostname, mail domain, RSPAMD web access password, LDAP user admin password, LDAP user adressbook password, ip address.
- Из шаблона .env.dist будет создан файл переменных окружения .env
- Значение
MYSQL PASSWORDподставится в переменныеPOSTFIXADMIN_DB_PASSWORD,PA_SETUP_PASS,MYSQL_ROOT_PASSWORD,MYSQL_PASSWORD,ROUNDCUBEMAIL_DB_PASSWORDфайла .env. Также из значенияMYSQL PASSWORDсоздается переменнаяPA_SETUP_HASHдля файла конфигурации postfixadmin/config.local.php - Значение
FQDN hostnameподставится в переменныеMAILNAME,LE_FQDN,ROUNDCUBEMAIL_SMTP_SERVER,ROUNDCUBEMAIL_DEFAULT_HOSTфайла .env. Также значениеFQDN hostnameбудет использовано в файле roundcube/config/managesieve.php ИзFQDN hostnameбудут сгенерированы переменные LDAPBASEDNиROOTDN. Они используются в файлеopenldap/conf/mysql_ldap.php, который создает и обновляетАдресную книгуи алиасВсем пользователям доменавmysql - Значение
mail domainподставится в переменныеDOMAIN,POSTMASTER,LE_EMAILфайла .env и в файле postfixadmin/config.local.php RSPAMD web access passwordподставится в переменнуюCONTROLLER_PASSWORDфайла .envLDAP user admin passwordподставится в переменнуюLDAP_PASSфайла .env, используется файлеopenldap/conf/mysql_ldap.phpи в файлеroundcube/config/ldap.phpLDAP user adressbook passwordподставится в переменнуюADDRESSBOOK_PASSфайла .env, используется в файле `openldap/ldif/addressbook.ldifip addressдобавится в файл nginx/service.conf и откроет доступ с этих IP к сервисам Postfixadmin, RSPAMD
Описание переменных в файле шаблона .env.dist
| Переменная | Описание |
|---|---|
| POSTFIXADMIN_DB_TYPE=mysqli | |
| POSTFIXADMIN_DB_HOST=db | |
| POSTFIXADMIN_SMTP_SERVER=postfix | |
| POSTFIXADMIN_SMTP_PORT=25 | |
| POSTFIXADMIN_ENCRYPT=md5crypt | |
| POSTFIXADMIN_DB_USER=postfix | |
| POSTFIXADMIN_DB_NAME=postfix | |
| POSTFIXADMIN_DB_PASSWORD=_PASS_ | # Значение MYSQL PASSWORD из ./setup.sh |
| PA_SETUP_PASS=_PASS_ | # Значение MYSQL PASSWORD из ./setup.sh
|
| MYSQL_USER=postfix | |
| MYSQL_DATABASE=postfix | |
| MYSQL_ROOT_PASSWORD=_PASS_ | # Значение MYSQL PASSWORD из ./setup.sh
|
| MYSQL_PASSWORD=_PASS_ | # Значение MYSQL PASSWORD из ./setup.sh
|
| CONTROLLER_PASSWORD=_RSPAMD_ | # Значение RSPAMD web access password из ./setup.sh
|
| DOMAIN=_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| MAILNAME=_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| POSTMASTER=admin@_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| RELAYHOST=false | # false - не использовать, укажите имя smtp сервера, если необходимо пересылать все письма на удаленный хост |
| FILTER_MIME=false | # Включить/Отключить проверку типов файлов на уровне Postfix. Дополнительно Отредактируйте файл docker-mail-server/postfix/rootfs/etc/postfix/mime_header_checks
|
| FILTER_VIRUS=true | # Включить/Отключить проверку на вирусы |
| ENABLE_IMAP=true | # Включить/Отключить IMAP
|
| ENABLE_POP3=true | # Включить/Отключить POP3
|
| CONTROLLER_SECURE_NETWORK=172.16.0.0/12 | |
| RECIPIENT_DELIMITER=- | # Параметр Postfix recipient_delimiter. Он позволяет вам отправлять письма снаружи на user-всечтоугодно@example.com. Письмо будет доставлено в ящик user@example.com.
|
| TZ=Europe/Moscow | # Timezone, if set will be written to container's /etc/timezone
|
| LETSENCRYPT=true | # Включить/Отключить автоматическое получение и обновление сертификата |
| LE_EMAIL=admin@_DOMAIN_ | # Значение mail domain из ./setup.sh
|
| LE_FQDN=_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| LDAP_PASS=_LDAP_ | # Значение LDAP user admin password из ./setup.sh
|
| ADDRESSBOOK_PASS=_ADDRESSBOOKPASS_ | # Значение LDAP user adressbook password из ./setup.sh
|
| ROUNDCUBEMAIL_DB_TYPE=mysql | |
| ROUNDCUBEMAIL_DB_HOST=db | |
| ROUNDCUBEMAIL_DB_NAME=roundcube | |
| ROUNDCUBEMAIL_DB_USER=postfix | |
| ROUNDCUBEMAIL_DB_PASSWORD=_PASS_ | # Значение MYSQL PASSWORD из ./setup.sh
|
| ROUNDCUBEMAIL_SMTP_SERVER=tls://_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| ROUNDCUBEMAIL_DEFAULT_HOST=tls://_MAILNAME_ | # Значение FQDN hostname из ./setup.sh
|
| ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE=20M | |
| ROUNDCUBEMAIL_PLUGINS=archive,zipdownload | |
| ROUNDCUBEMAIL_REQUEST_PATH=/mail/ |
Отдельные контейнеры, используемые в проекте:
| Контейнер | Описание | Источник | Порты |
|---|---|---|---|
| db | База данных для Postfixadmin, Roundcube | В проекте используется стандартный образ mariadb | port 3306(снаружи недоступно) |
| postfixadmin | Web интерфейс для администрирования почтового сервера | В проекте используется стандартный образ postfixadmin | port 443, https://mail.example.org/postfixadmin/login.php |
| nginx | Прокси сервер с поддержкой получения сертификатов LetsEncript, прокси для postfixadmin (доступ ограничен по ip), прокси для Roundcube (web клиент почты), прокси для web интерфейса RSPAMD (доступ ограничен по IP) | использован контейнер umputun/nginx-le:latest | port 80 для подтверждения домена LetsEncript, port 443 прокси к сервисам postfixadmin, Roundcube, RSPAMD |
| postfix | smtp сервер | build: postfix | только 25 порт |
| dovecot | IMAP, POP3, Submission, LMTP, Sieve сервер | build: dovecot | imap 110, imaps 143(STARTTLS), submission 587(STARTTLS), imaps 993(SSL), pop3s 995, lmtp port 2003 (снаружи недоступно), managesieve 4190 (STARTTLS) |
| filter | Сервер Rspamd | build: filter | port 11332 для общения с Postfix(снаружи недоступно), Web сервер статистики port 11334, снаружи https://mail.example.org/rspamd/ |
| redis | Сервер БД redis для Rspamd | Использован образ redis:alpine | port 6379, снаружи недоступно |
| virus | Сервер антивирус Clamav | build: virus | port 3310 для общения с Rspamd(снаружи недоступно) |
| roundcube | Веб клиент к электронной почте | использован образ roundcube/roundcubemail:latest | снаружи port 443, https://mail.example.org/mail/ |
| openldap | Openldap сервер | build: openldap | port 636 |
| restarter | Cron раз в сутки перезапускает контейнеры openldap, postfix, dovecot (для обновления сертификата LetsEncript) | использован image: docker |
HOWTO
Web интерфейс доступа к почте Roundcube (дополнительные возможности).
Откройте web интерфейс почты https://mail.example.org/mail/.
- Фильтры Sieve.
Откройте Настройки, Фильтры. Во вкладке Фильтры нажмите +. Появится окошко создания фильтра. Доступно многое, а именно возможность распределять письма по разным папкам, перенаправлять письма, или отправлять уведомления об отсутствии на рабочем месте. После создания фильтра нажмите сохранить.
- Адресная книга LDAP.
Нажмите в меню Контакты. Отобразится адресная книга LDAP. Обновляется один раз в час. В контактах отобразятся пользователи всех ваших доменов и алиасы Всем пользователям домена.
Настройка Thunderbird
Параметры сервера
- Тип сервера: Почтовый сервер IMAP
- Имя сервера:
mail.example.orgПорт:143- Имя пользователя:
admin@example.org- Защита соединения:
STARTTLS- Метод аутентификации:
Обычный пароль
Сервер исходящей почты
- Тип сервера: SMTP-сервер
- Имя сервера:
mail.example.orgПорт:587- Имя пользователя:
admin@example.org- Защита соединения:
STARTTLS- Метод аутентификации:
Обычный пароль
Адресная книга (Файл, создать, каталог LDAP)
Вкладка Основное
- Название:
mail.example.org- Имя сервера:
mail.example.org- Корневой элемент (Base DN):
ou=addressbook,dc=mail,dc=example,dc=org- Порт:
636- Имя пользователя (Bind DN):
cn=addressbook,dc=mail,dc=example,dc=org(вас попросят ввести пароль - это значение переменнойADDRESSBOOK_PASSфайла .env)XИспользовать защищенное соединение (SSL)Вкладка Дополнительно
- Не возвращать более чем
1000результатов- Область поиска
Поддерево- Фильтр поиска
(mail=*)- Способ аутентификации
простой
Sieve - правила фильтрации, используемые Dovecot.
- Письма помеченные как спам помещаются в папку Spam в ящике пользователя.
- Если письмо переносится пользователем в папку Spam, происходит обучение спам фильтра.
- Если письмо из папки Spam переносится в другую папку, то также происходит обучение спам фильтра.
Как включить проверку типов файлов на уровне Postfix?
- Отредактируйте файл
docker-mail-server/postfix/rootfs/etc/postfix/mime_header_checks
/name=[^>]*\.(bat|com|exe|dll|vbs|docm|doc|dzip)/ REJECT
- В файле
.env.distисправьте значение переменнойFILTER_MIME=true - Пересоздайте файл
.envзапустив ./setup.sh, или исправьтеFILTER_MIME=trueв файле.env. - Потребуется пересоздать контейнер postfix
RECIPIENT_DELIMITER
Значение по умолчанию этого параметра в .env RECIPIENT_DELIMITER=- Это позволяет вам отправлять письма снаружи на user-всечтоугодно@example.com. Письмо будет доставлено в ящик user@example.com.
Как сделать резервную копию баз контейнера db?
Из директории docker-mail-server запустите команду
source .env && docker-compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > db-dump-$(date +%F_%H-%M-%S).sql
Как восстановить базы из архива?
source .env && docker-compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} < mariadb-dump.sql
Утилита IMAPSync
Помощь при переносе почтовых ящиков с одного почтового сервера на другой. Протестировано на Ubuntu 20.04. Взято https://www.ylsoftware.com/news/733
Утилиту необходимо запускать на отдельном хосте.
- Установим зависимости.
sudo apt install \
libauthen-ntlm-perl \
libclass-load-perl \
libcrypt-ssleay-perl \
libdata-uniqid-perl \
libdigest-hmac-perl \
libdist-checkconflicts-perl \
libencode-imaputf7-perl \
libfile-copy-recursive-perl \
libfile-tail-perl \
libio-compress-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libmail-imapclient-perl \
libmodule-scandeps-perl \
libnet-dbus-perl \
libnet-ssleay-perl \
libpar-packer-perl \
libreadonly-perl \
libregexp-common-perl \
libsys-meminfo-perl \
libterm-readkey-perl \
libtest-fatal-perl \
libtest-mock-guard-perl \
libtest-mockobject-perl \
libtest-pod-perl \
libtest-requires-perl \
libtest-simple-perl \
libunicode-string-perl \
liburi-perl \
libtest-nowarnings-perl \
libtest-deep-perl \
libtest-warn-perl \
make \
cpanminus
- Скачаем imapsync
git clone https://github.com/imapsync/imapsync.git cd imapsync- Создадим файл
mails.csv
old_login|old_pass|new_login|new_pass|
Где Здесь "old_login" и "old_pass" - логин и пароль пользователя на старом сервере, а "new_login" и "new_pass" - логин и пароль пользователя на новом сервере.
- Создадим файл
sync.sh - Дадим права на запуск
chmod +x sync.sh - Содержимое файла sync.sh
#!/bin/bash
cd `dirname $0`
for line in `cat mails.csv | grep -v ^#`; do
M_USER=`echo ${line} | cut -d '|' -f1`
M_PASS=`echo ${line} | cut -d '|' -f2`
N_USER=`echo ${line} | cut -d '|' -f3`
N_PASS=`echo ${line} | cut -d '|' -f4`
echo "Processing ${M_USER}..."
./imapsync --host1 imap.yandex.com --port1 993 --user1 ${M_USER} --password1 ${M_PASS} --ssl1 --host2 mail.example.org --port2 143 --user2 ${N_USER} --password2 ${N_PASS} --tls2
if [ $? -ne "0" ]; then
echo ${M_USER} >> mail_errors
fi
done
- После выполнения скрипта в файл "mail_errors" будут записаны логины пользователей, для которых перенос почты не удался.
Если что-то пошло не так.
- Из директории docker-mail-server запустите команду
docker-compose down - Потом
docker system prune -a --volumesочистка всех остановленных контейнеров и неиспользуемых сетей - Поправьте ошибки и запустите
docker-compose up -d - Пересоздавать пользователей в этом случае нет необходимости, просто подтвердите пароль, выполнив инструкцию в пункте ниже
- Откройте в браузере страницу https://mail.example.org/postfixadmin/setup.php (где
mail.example.orgзамените на имя вашего сервера) - Введите пароль mysql
- Для полного удаления всех данных удалите папку /mail и директорию с проектом docker-mail-server
- Посмотреть логи
docker-compose logs -f
Служебные пользователи доменов
- При создании нового домена в
PostfixAdminавтоматически создаются адреса алиасыabuse@newdomain,hostmaster@newdomain,postmaster@newdomain,webmaster@newdomain. Они автоматически переадресовывают почту на основной домен, на почтовый ящикadmin@example.org
Смотрите также
- Данный проект основан на инструкции ISPMail guide и проекте Docker-mailserver.
- Также реализовано автоматическое получение и обновление сертификата LetsEncript, использован проект NGINX-LE - Nginx web and proxy with automatic let's encrypt.
Лицензия
MIT