Пост про Exchange Server, но сегодня с уклоном в сторону Ubuntu Server (все статьи про Ubuntu здесь).
У этой заметки обширная предыстория, но она скучна и, вопреки всем законам жанра, не особо богата на хоть какую-то практическую ценность. Однако, что-то всё-таки наскрести на пост удалось.
Сначала поведаю общую диспозицию. Есть заброшенный и весьма захламлённый (600+ Гб какой-то ерунды по данным du) веб-сервер на стареньком Linux, который выступает не только в качестве хостинга веб-проекта, но и в качестве обратного прокси почтового сервера для протокола Exchange ActiveSync.
С помощью Exchange ActiveSync можно с лёгкостью подключиться к своему почтовому ящику из почтового клиента (например, Outlook). Нужно только чтобы почтовый клиент умел в Exchange ActiveSync, а остальное уже дело техники. И корректных DNS записей.
Вот только вследствие общей усталости веб-сервер начал ронять движок баз данных или отрубать службу httpd2. Разбираться в причинах падений служб смысла уже не было — серверу уже давно было пора на покой. Единственное, что продолжало держать старичка в онлайне — тот самый обратный прокси. Осталось только переселить реверс на другой сервер и объявить его адрес в конфигурациях пограничных устройств, пробросив нужные порты к нужному IP-адресу.
В качестве операционной системы я выбрал Ubuntu Server. Установка заняла пару чашек чая, общая настройка и того меньше. Теперь самое время установить веб-сервер Apache, который и будет выполнять функцию обратного прокси:
sudo apt install apache2
После установки включим автозагрузку сервера и запустим его:
sudo systemctl enable apache2 && sudo systemctl start apache2
Переходим к самой интересной части — активации модулей Apache:
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod ssl # Модули для распределения нагрузки между бэкенд-серверами: # sudo a2enmod proxy_balancer # sudo a2enmod lbmethod_byrequests
Для выполнения поставленной задачки можно обойтись и без модулей proxy_balancer и lbmethod_byrequests, если не планируется создавать некое подобие кластера с бэкендом.
Перезапускаем Apache:
sudo systemctl restart apache2
Скопируем конфигурацию сайта по умолчанию в новый файл и назовём его exchange.conf:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/exchange.conf
Откроем файл:
sudo nano /etc/apache2/sites-available/exchange.conf
Удалим всё его содержимое и скопируем этот конфиг, предварительно заменив пути и метаданные на свои:
<VirtualHost *:80>
ServerAdmin admin@domain.ru
ServerName mail.domain.ru
Redirect permanent / https://mail.domain.ru/
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@domain.ru
ServerName mail.domain.ru
DocumentRoot /var/www/html
ProxyPreserveHost On
ProxyVia Full
ProxyRequests Off
KeepAlive On
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLCertificateFile "/etc/ssl/mail/mail.crt"
SSLCertificateKeyFile "/etc/ssl/mail/mail.key"
<Location /owa>
ProxyPass https://192.168.1.100/owa
ProxyPassReverse https://192.168.1.100/owa
SSLRequireSSL
</Location>
<Location /Microsoft-Server-ActiveSync>
ProxyPass https://192.168.1.100/Microsoft-Server-ActiveSync
ProxyPassReverse https://192.168.1.100/Microsoft-Server-ActiveSync
SSLRequireSSL
</Location>
<Location /rpc>
ProxyPass https://192.168.1.100/rpc
ProxyPassReverse https://192.168.1.100/rpc
SSLRequireSSL
</Location>
<Location /Rpc>
ProxyPass https://192.168.1.100/Rpc
ProxyPassReverse https://192.168.1.100/Rpc
SSLRequireSSL
</Location>
<Location /Autodiscover>
ProxyPass https://192.168.1.100/Autodiscover
ProxyPassReverse https://192.168.1.100/Autodiscover
SSLRequireSSL
</Location>
<Location /autodiscover>
ProxyPass https://192.168.1.100/autodiscover
ProxyPassReverse https://192.168.1.100/autodiscover
SSLRequireSSL
</Location>
<Location /OAB>
ProxyPass https://192.168.1.100/OAB
ProxyPassReverse https://192.168.1.1005/OAB
SSLRequireSSL
</Location>
<Location /ews>
ProxyPass https://192.168.1.100/ews
ProxyPassReverse https://192.168.1.100/ews
SSLRequireSSL
</Location>
<Location /mapi>
ProxyPass https://192.168.1.100/mapi
ProxyPassReverse https://192.168.1.100/mapi
SSLRequireSSL
</Location>
</VirtualHost>
Активируем конфигурацию нового сайта:
sudo a2ensite exchange
Осталось только превратить сертификат почтового сервера формата pfx в пару cert и key.
Создадим целевую папку для файлов сертификата и перейдём в неё:
sudo mkdir /etc/ssl/mail cd /etc/ssl/mail
Закинем в эту папку сертификат почтового сервера. В моём случае pfx файл сертификата называется mail.pfx.
Извлечём из файла mail.pfx открытый ключ сертификата с помощью утилиты openssl:
sudo openssl pkcs12 -in mail.pfx -clcerts -nokeys -out mail.crt
Далее извлечём и закрытый ключ:
sudo openssl pkcs12 -in mail.pfx -nocerts -out mail_crypt.key
И, так как закрытый ключ mail_crypt.key в обязательном порядке будет вымогать пароль при старте Apache, отбираем у него парольную защиту:
sudo openssl rsa -in mail_crypt.key -out mail.key
Перезапускаем Apache:
sudo systemctl restart apache2
Проверяем работу обратного прокси:
https://IP/owa
Если всё сделано правильно — Ваш внешний IP-адрес (а по идее и поддомен вида mail.domain.ru) должен будет вести на сервер с Ubuntu, а уже оттуда реверсом проксироваться к почтовому серверу.
Вероятно, придётся передобавить учётную запись в мобильном клиенте и указать в настройках пропуск неизвестных SSL/TLS сертификатов.
Разумеется, не забудьте поднять на сервере брандмауэр.