Включение SSL для PostfixAdmin может быть полезно, если вы хотите выставить админку наружу. Выполнять все задачи администрирования, передавая данные в открытом виде, не очень хорошая идея. Это может быть оправдано лишь в том случае, если администрирование осуществляется исключительно из локальной сети, а доступа из интернета к PostfixAdmin нет. К сожалению, один мой почтовый сервер имел только внешний адрес, никакого NAT’а не было и пришлось подумать о некоторой защищенности, о чем я и расскажу в этой статье.
Поскольку PostfixAdmin является лишь дополнением для MTA Postfix, он ожидаемо находится в иерархии статей по настройке Postfix.
Найти больше информации о Postfix вы можете в основной статье по его настройке – Настройка Postfix.
Включение SSL для PostfixAdmin
Первым делом необходимо создать сертификат и уже потом на его основе открывать доступ по 443 порту.
Создание сертификата
Если не указывать полные пути к файлам, то все будет происходить в текущем каталоге. Узнать где вы сейчас находитесь можно командой:
1 |
pwd |
1 |
/home/mailserveradmin |
Отлично, переходим к процессу создания сертификата. Суть в том, что нужно получить публичный сертификат, который мы можем распространять куда и кому угодно, и закрытый (частный) ключ от этого сертификата. Обладатель этого ключа сможет расшифровать любую информацию, которая была зашифрована публичным сертификатом. Отсюда ограничения – мы обязаны обеспечить безопасное хранение частного ключа. Как это сделать? В принципе можно зашифровать этот ключ, но есть один неприятный момент – apache2 будет постоянно запрашивать пароль от этого ключа при запуске демона. Не самый удобный вариант, поэтому можно держать ключ в расшифрованном виде, назначив на него необходимые разрешения (доступ только для root). Так и сделаем:
1 |
openssl req -new -x509 -nodes -days 3650 -out postfixadmin.crt -keyout postfixadmin.key |
–nodes как раз говорит о том, что частный ключ сертификата не будет зашифрован. Кстати, в документации 1 apache2 очень подробно написано про сертификаты и самые распространенные действия над ними, советую обязательно почитать.
Из текущего расположения копируем сертификаты в традиционное хранилище
1 |
cp postfixadmin.crt /etc/ssl/certs/ |
1 |
cp postfixadmin.key /etc/ssl/private/ |
Назначаем необходимые права, как я и говорил выше. Сразу проверяем кто имеет доступ к файлу.
1 |
chmod 400 /etc/ssl/private/postfixadmin.key |
1 |
ls -l /etc/ssl/private/ | grep postfixadmin |
1 |
-r-------- 1 root root 1704 Июн 9 22:46 postfixadmin.key |
Права только у root’а, отлично. Подчищаем все в текущем каталоге:
1 |
rm postfixadmin.* |
Сертификат и его частный ключ готовы, пора подружить с ним apache2.
Настройка Apache
Подключаем модуль SSL:
1 |
a2enmod ssl |
1 2 3 |
Enabling module ssl. See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: service apache2 restart |
Собственно сама команда является скриптом, подключающим определенные модули (в моем случае модуль SSL) к конфигурации Apache2, создавая символьные ссылки в каталоге /etc/apache2/mods-enabled. Впрочем это вы и так можете узнать из мануала (команда man a2enmod).
Активируем виртуальный сайт:
1 |
a2ensite default-ssl |
1 2 3 |
Enabling site default-ssl. To activate the new configuration, you need to run: service apache2 reload |
Теперь пришло время внести в конфигурацию SSL некоторые изменения:
1 |
nano /etc/apache2/sites-enabled/default-ssl |
Необходимо убедиться, что параметр SSLEngine определен и имеет значение on, а также задать используемые версии SSL/TLS. Поскольку SSL версий 2 и 3 уже устарел, лучше исключить их из использования, оставив только TLS. Итого, необходимо, чтобы в файле присутствовали следующие строчки:
1 2 |
SSLEngine on SSLProtocol all -SSLv3 |
По умолчанию all = +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2, но, как я и говорил выше, я хочу отключить SSLv3. Подробнее читайте в официальной документации 2.
Также не забудьте указать путь до только что сгенерированных файлов сертификата, определив значения нужных параметров:
1 2 |
SSLCertificateFile /etc/ssl/certs/postfixadmin.crt SSLCertificateKeyFile /etc/ssl/private/postfixadmin.key |
Теперь пришло время позаботиться об автоматическом перенаправлении клиентов на защищенный порт. Для этого активируем модуль alias:
1 |
a2enmod alias |
1 2 3 |
Enabling module alias. To activate the new configuration, you need to run: service apache2 restart |
Отредактируем файл:
1 |
nano /etc/apache2/sites-enabled/000-default |
Добавив в описание VirtualHost следующую директиву:
1 |
Redirect / https://192.168.1.120/ #укажите адрес/имя своего сайта |
Я указал простой локальный адрес, поскольку пока тестирую сервер внутри сети. Когда я решу выставить админку наружу (если вообще решу), нужно будет установить в настройках публичный адрес сервера или же его доменное имя, которое у вас в любом случае должно быть, ведь вы настраиваете почтовый сервер.
Ну а теперь можно перезапускать apache2:
1 |
service apache2 restart |
1 |
[ ok ] Restarting web server: apache2 ... waiting . |
Проблем с перезапуском не возникло, можно проверить как все работает, вбив в адресной строке http://192.168.1.120/postfixadmin. После этого вас должно перенаправить на https-страницу и сообщить о ненадежном сертификате (все правильно, ведь мы используем самозаверенный сертификат):
Настройка на этом завершена.