Тематические термины: SMTP , POP , IMAP , DNS , XML , NGINX .
Разберем процесс создания инфраструктуры для автоматической настройки почтовых клиентов. Для корректной работы Autodiscover нужен комплексный подход, так как у разных почтовых клиентов свои требования.
Это самый простой способ для автообнаружения почтового сервера почтовым клиентом. Он заключается в том, что некоторые клиенты ищут сервер по типичным именам, поэтому все, что нам нужно — дать корректное имя нашему почтовику. Как правило, это такие названия:
Минус в том, что не все почтовые клиенты обладают таким свойством, а также мы не можем задать более сложные настройки.
Для автоматической настройки почтового клиента, идет https POST-запрос к документу autodiscover.xml. При этом, Outlook сначала попробует найти сервер по записи в DNS autodiscover.server.domain, затем к просто к домену server.domain и затем — к SRV-записи _autodiscover._tcp.server.domain. Таким образом, необходимо настроить DNS и веб-сервер.
С DNS все просто — создаем А- (или CNAME-) и SRV-записи. Пример таких записей в bind:
autodiscover IN A 111.111.111.111
* где 111.111.111.111 — IP-адрес на наш веб-сервер, который будет возвращать документ XML.
_autodiscover._tcp IN SRV 0 0 443 autodiscover.remontka.com.
* где autodiscover.remontka.com — наша запись autodiscover в домене remontka.com.
В качестве примера, настройку выполним на веб-сервере NGINX, который работает на Linux. Если он не установлен, выполняем инсталляцию.
а) если сервер под CentOS / Red Hat :
yum install epel-release
yum install nginx
б) если сервер под Debian / Ubuntu :
apt-get install nginx
После разрешаем автозапуск и стартуем сервис:
systemctl enable nginx
systemctl start nginx
Затем создаем виртуальный домен:
vi /etc/nginx/conf.d/autodiscover.conf
server {
listen 443;
server_name autodiscover.remontka.com;
root /usr/share/nginx/html/autodiscover;
ssl on;
ssl_certificate /etc/letsencrypt/live/remontka.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/remontka.com/privkey.pem;
error_page 405 =200 $uri;
}
* данная настройка позволит нашему серверу nginx принимать запросы на 443 порту (https); в качестве домашней директории мы будем использовать каталог /usr/share/nginx/html/autodiscover , куда и поместим нужный нам XML; /etc/letsencrypt/live/remontka.com/cert.pem и /etc/letsencrypt/live/remontka.com/privkey.pem — пути до сертификатов (в данном примере я использовал сертификаты от Let’s encrypt — чтобы их получить, читайте статью Получение бесплатного SSL сертификата Let’s Encrypt ). Так как NGINX запрещает POST-запросы к статическим файлам, возвращая ошибку 405 , мы будем ее игнорировать, заменяя кодом 200 .
Проверяем корректность настройки:
nginx -t
Если ошибок нет, перечитываем конфиг:
systemctl reload nginx
Создаем каталог, в котором будет наш XML:
mkdir -p /usr/share/nginx/html/autodiscover/autodiscover
Создадим сам XML:
vi /usr/share/nginx/html/autodiscover/autodiscover/autodiscover.xml
<?xml version=»1.0″ encoding=»UTF-8″?>
<Autodiscover >
<Response >
<User>
<DisplayName>remontka.com</DisplayName>
</User>
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>imap.remontka.com</Server>
<Port>993</Port>
<LoginName>info@remontka.com</LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<Encryption>SSL</Encryption>
</Protocol>
<Protocol>
<Type>POP</Type>
<Server>pop.remontka.com</Server>
<Port>995</Port>
<LoginName>info@remontka.com</LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<Encryption>SSL</Encryption>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>smtp.remontka.com</Server>
<Port>587</Port>
<LoginName>info@remontka.com</LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<Encryption>TLS</Encryption>
</Protocol>
</Account>
</Response>
</Autodiscover>
* где из основных параметров на нужны:
Открываем браузер и переходим по адресу https://autodiscover.remontka.com/autodiscover/autodiscover.xml , где вместо remontka.com должен быть Ваш домен. Мы должны увидеть наш XML.
Теперь открываем MS Outlook и получаем автоматически настройки для info@remontka.com.
Наш файл конфигурации рассчитан только на настройку одного адреса. Теперь нужно настроить его на обслуживание любого email. Для этого необходимо написать скрипт, например, на php и немного донастроить сервер.
Установим php и php-fpm, после разрешаем автозапуск php-fpm и стартуем его:
а) если сервер под CentOS / Red Hat :
yum install php php-fpm
systemctl enable php-fpm
systemctl start php-fpm
б) если сервер под Debian / Ubuntu :
apt-get install php php-fpm
systemctl enable php7.2-fpm
systemctl start php7.2-fpm
* где 7.2 — версия установленной php (проверяется командой php -v ).
а) если сервер под CentOS / Red Hat :
vi /etc/php-fpm.d/www.conf
…
listen = /var/run/php-fpm/php-fpm.sock
…
systemctl restart php-fpm
б) если сервер под Debian / Ubuntu :
vi /etc/php/7.2/fpm/pool.d/www.conf
…
listen = /var/run/php-fpm/php-fpm.sock
…
systemctl restart php7.2-fpm
Внесем настройки в наш виртуальный домен:
vi /etc/nginx/conf.d/autodiscover.conf
…
error_page 405 =200 $uri;
location ~ .php$ {
set $root_path /usr/share/nginx/html/autodiscover;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
…
* мы добавили обработку скриптов php с помощью php-fpm.
Перезапускаем наш сервер:
systemctl reload nginx
Создадим скрипт php:
vi /usr/share/nginx/html/autodiscover/autodiscover/autodiscover.php
<?php
//get raw POST data so we can extract the email address
$data = file_get_contents(«php://input»);
preg_match(«/<EMailAddress>(.*?)</EMailAddress>/», $data, $matches);
//set Content-Type
header(«Content-Type: application/xml»);
?>
<?php echo ‘<?xml version=»1.0″ encoding=»utf-8″ ?>’; ?>
<Autodiscover >
<Response >
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>imap.remontka.com</Server>
<Port>993</Port>
<LoginName><?php echo $matches[1]; ?></LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<Encryption>SSL</Encryption>
</Protocol>
<Protocol>
<Type>POP3</Type>
<Server>imap.remontka.com</Server>
<Port>995</Port>
<LoginName><?php echo $matches[1]; ?></LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<Encryption>SSL</Encryption>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>imap.remontka.com</Server>
<Port>587</Port>
<LoginName><?php echo $matches[1]; ?></LoginName>
<AuthRequired>on</AuthRequired>
<DomainRequired>on</DomainRequired>
<SPA>on</SPA>
<SSL>on</SSL>
<SMTPLast>on</SMTPLast>
<Encryption>TLS</Encryption>
</Protocol>
</Account>
</Response>
</Autodiscover>
Открываем браузер и переходим по адресу https://autodiscover.remontka.com/autodiscover/autodiscover.php — должен загрузиться XML-документ. В тегах LoginName должно быть пусто.
Теперь настроим, чтобы наш веб-сервер переводил запросы xml на наш скрипт php. Открываем настройку нашего виртуального домена:
vi /etc/nginx/conf.d/autodiscover.conf
… и добавим:
…
location = /autodiscover/autodiscover.xml {
rewrite ^/autodiscover/autodiscover.xml$ /autodiscover/autodiscover.php;
}
…
Перезапускаем nginx:
systemctl reload nginx
Открываем браузер и переходим по адресу https://autodiscover.remontka.com/autodiscover/autodiscover.xml — должен загрузиться XML-документ. В тегах LoginName должно быть пусто. Значит перенаправление сработало.
Теперь можно открывать Outlook и проверять автонастройку для других почтовых ящиков.
Механизм автонастройки от Mozilla похож на Microsoft. Необходимые настройки должны отдаваться веб-сервером в виде XML-документа. Однако запрос не https, а http; и не POST, а GET. Также обращение идет сначала в формате server.domain/mail/config-v1.1.xml?emailaddress=user@server.domain , и если ответ не будет получен — autoconfig.server.domain/mail/config-v1.1.xml?emailaddress=user@server.domain .
Также, как с Outlook, необходимо настроить DNS и веб-сервер.
создаем А-запись (или CNAME). Пример в bind:
autoconfig IN A 111.111.111.111
* где 111.111.111.111 — IP-адрес на наш веб-сервер, который будет возвращать документ XML.
Настраивая autodiscovery для Microsoft, мы уже настроили веб-сервер NGINX. Теперь нужно добавить виртуальный домен и создать соответствующий документ.
Откроем уже созданный нами файл конфигурации:
vi /etc/nginx/conf.d/autodiscover.conf
… и добавим в него:
…
server {
listen 80;
server_name autoconfig.remontka.com;
root /usr/share/nginx/html/autodiscover;
}
Создаем каталог для хранения XML:
mkdir -p /usr/share/nginx/html/autodiscover/mail
Создаем документ:
vi /usr/share/nginx/html/autodiscover/mail/config-v1.1.xml
<?xml version=»1.0″ encoding=»UTF-8″?>
<clientConfig version=»1.1″>
<emailProvider id=»remontka.com»>
<domain>remontka.com</domain>
<displayName>Почта remontka.com</displayName>
<displayShortName>remontka.com</displayShortName>
<incomingServer >
<hostname>imap.remontka.com</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<incomingServer type=»pop»>
<hostname>pop.remontka.com</hostname>
<port>995</port>
<socketType>SSL</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type=»smtp»>
<hostname>smtp.remontka.com</hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
</emailProvider>
</clientConfig>
* где:
Это метод, призванный быть универсальным. Более того, он описан стандартом RFC.
Суть заключается в создании SRV-записей в DNS. Данная запись создается по следующему синтаксису.
Имя записи:
_<имя службы>._<протокол>
Значение:
<приоритет> <вес> <порт> <хост>
* где:
Пример записей для настройки почты:
Запись | Приоритет | Вес | Порт | Хост | Описание |
_submission._tcp | 10 | 10 | 25 | smtp.remontka.com. | Протокол для отправки почты на другие серверы. |
_pop3._tcp | 10 | 10 | 110 | pop.remontka.com. | Загрузка почты с сервера. |
_imap._tcp | 10 | 10 | 143 | imap.remontka.com. | Работа с почтой на удаленном сервере. |
_submissions._tcp | 30 | 10 | 465 | smtp.remontka.com. | Отправки почты с защитой соединения. |
_submission._tcp | 20 | 10 | 587 | smtp.remontka.com. | Отправки почты с защитой соединения. |
_imaps._tcp | 20 | 10 | 993 | imap.remontka.com. | Работа с почтой с защитой соединения. |
_pop3s._tcp | 20 | 10 | 995 | pop.remontka.com. | Загрузка почты с защитой соединения. |
* в данном примере мы отдаем приоритет более защищенным средствам подключения (smtps, imaps, pop3s).
Пример записей в DNS Bind:
_submission._tcp IN SRV 30 0 25 smtp.remontka.com.
_submission._tcp IN SRV 20 0 587 smtp.remontka.com.
_submissions._tcp IN SRV 10 0 465 smtp.remontka.com.
_imap._tcp IN SRV 20 0 143 imap.remontka.com.
_imaps._tcp IN SRV 10 0 993 imap.remontka.com.
_pop3._tcp IN SRV 20 0 110 pop.remontka.com.
_pop3s._tcp IN SRV 10 0 995 pop.remontka.com.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…