Защищаем подключение к Ispmanager (прячем ihttpd за nginx)
Ispmanager пожалуй самая распространенная и удобная панель администрирования сервера. Однако по умолчанию доступ к панели осуществляется по логину и паролю, причем пароль передается в открытом виде, его можно перехватить и получить полный доступ к серверу. Используем возможности ispmanager чтобы защитить его самого.
С помощью ispmanager можно достаточно просто разместить свой веб-сайт и поддерживать его безопасность. Не прикасаясь к командной строке можно создать нового пользователя, базу данных, сам сайт, получить и установить SSL сертификаты для безопасного подключения к нему. Без сертификата все современные браузеры будут пугать пользователей, что подключение к сайту небезопасно.
Причем ispmanager при создании веб-сайта сразу делает для него конфигурацию из «тяжелого» Apache для работы движка сайта и быстрого nginx перед ним для поддержки https и передачи файлов. Такая конфигурация стала стандартом де-факто для хостинга сайтов.
Сам же Ispmanager живет на достаточно простом ihttpd и по умолчанию он доступен по незащищенному http-соединению. То есть при подключении к панели рутовый пароль передается в открытом виде, а перехватив его злоумышленники смогут сделать в вашим сервером все что им заблагорассудится. Так в VPS Яндекс Облака по умолчанию запрещен вход по логин/паролю даже по защищенному соединению, только по ключам, а тут пожалуйста - рутовый пароль в открытом виде!
Ispmanager позволяет выпустить самоподписанный сертификат для подключения к себе, но лучше и проще расположить панель за nginx сервером вашего сайта (ведь сайт у вас уже должен быть или по крайней мере домен для него). Тогда nginx будет отвечать за безопасное https соединение и проксировать его на внутренний ihttpd. Прямое соединение на него по 1500 порту можно будет потом закрыть.
По шагам:
Шаг 1. Открываем внутреннее соединение в конфигурации ihttpd. Добавляем в конец файла /usr/local/mgr5/etc/ihttpd.conf, который находится в следующие строки (это можно сделать встроенном файл менеджере панели):
listen {
ip 127.0.0.1
port 1500
}
Секцию с внешним IP пока не трогаем.
Шаг 2. Добавляем в конфигурационный файл nginx для вашего сайта (например example.ru) секцию проксирования на ihttpd по аналогии с основной кофигурацией проксирования на Apache:
server {
server_name example.ru www.example.ru;
ssl_certificate "/var/www/httpd-cert/example/example.ru.crt";
ssl_certificate_key "/var/www/httpd-cert/example/example.ru.key";
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
charset off;
listen 10.10.10.10:4433 ssl;
set $mgr_proxy "http://127.0.0.1:1500";
location ^~ /manimg/ {
alias /usr/local/mgr5/skins/;
}
location / {
proxy_pass $mgr_proxy;
proxy_redirect $mgr_proxy /;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Secret l6cuykPaxMKHO0Hm;
chunked_transfer_encoding off;
}
location ^~ /mancgi/ {
proxy_pass $mgr_proxy;
proxy_redirect $mgr_proxy /;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Secret l6cuykPaxMKHO0Hm;
chunked_transfer_encoding off;
}
}
Причем секцию
server_name example www.example.ru;
…
listen 10.10.10.10:4430 ssl;
копируем из конфигурации для основного сайта, вместо example.ru и 10.10.10.10 у вас будут имя вашего домена и ваш IP-адрес. Порт 4430 можно оставить или выбрать какой-нибудь другой 4х или 5 значный. По нему будет доступна ваша панель, в нашем примере это https://example.ru:4430.
Заменяем секретный ключ l6cuykPaxMKHO0Hm в примере на любой другой. Его же мы пропишем в конфигурацию панели на следующем шаге.
Шаг 3. Добавляем секретный ключ из предыдущего шага в конфигурацию панели. В файл /usr/local/mgr5/etc/core.conf добавляем строчку ForwardedSecret l6cuykPaxMKHO0Hm. И в файле /usr/local/mgr5/etc/ispmgr.conf меняем значение параметра ForwardedSecret на l6cuykPaxMKHO0Hm.
Шаг 4. Перегружаем панель и веб-сервисы командами в консоли:
service ihttpd restart
service nginx restart
killall core
Шаг 5. Проверяем, что панель Ispmanager открывается по новому адресу https://example.ru:4430. Если все ок, то тогда можно закрыть незащищенное соединение в конфигурационном файле ihttpd /usr/local/mgr5/etc/ihttpd.conf убрав секцию с внешним IP-адресом или на хостинге. В Яндекс облаке это можно сделать в группе безопасности вашего облака
Шаг 6.Теперь соединение к Ispmanager защищено и все передаваемая информация шифруется. Однако все равно не помешает включить двухфакторную аутентификацию в настройках пользователя в панели, тогда при логине потребуется еще дополнительно вводить код из приложения Google Authenticator на телефоне.