Настроили мне недавно систему почтовой рассылки на базе PowerMTA. Всё работает, всем доволен. Осматриваю новое хозяйство и замечаю, что доступ к статистике — системе мониторинга смотрит наружу хоть и не по стандартному порту и в режиме чтения, но всё же это не то, что должно быть доступно каждому. Поэтому я задумал закрыть это по логину паролю. Кроме того, по-умолчанию весь трафик идет по http, что тоже не дело.
Порылся в Интернете и нашел довольно простое решение — пустить запрос через прокси, а на входе просить логин и пароль.
Создаем специальный поддомен, например, mon.domain.ru
. Для этого прописываем у регистратора/хостера DNS запись типа А: mon A 1.2.3.4 TTL 600
В папке /etc/nginx/sites-available/
создаем файл, например mon.domain.ru.conf
в котором прописываем:
server { listen 80; server_name mon.domain.ru; location / { auth_basic “Restricted Content”; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:5555; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } }
5555
— это порт по которому слушает и отвечает веб монитор PowerMTA (см. файл config
параметр http-mgmt-port 5555
). Не забываем сделать символьную ссылку на файл в папке site-enabled
.
Создаем парольный файл командой:htpasswd -c /etc/nginx/.htpasswd username
. После чего перегружаем Nginx: nginx -s reload
.
У PowreMTA в файле конфигурации /etc/pmta/config
надо выставить такие настройки:
http-access 127.0.0.1 monitor http-access ::1 monitor http-access 0/0 none
И тоже перегрузить веб сервис PMTA: systemctl restart pmtahttp
.
Всё бы ничего, но была «проблема» — управление веб-серверами на вирутальном сервере ведется через FastPanel, и ручками править не хотелось. Поэтому я в FastPanel создал веб-сайт mon.domain.ru
, отключив установку php, MySQL, FTP. Для только что созданного сайта сгенерировал SSL-сертификат (не руками, там есть такая возможность). Включил в настройках редирект с http на https, задал логин и пароль на доступ. Осталось сделать редирект.
Для этого есть иконка Ручная настройка, где я подредактировал автоматически сгенерированный файл конфигурации. По сути я выкинул редирект на Apache2 и вписал редирект на http://127.0.0.1:5555
. Получилось такое:
server { server_name mon.domain.ru ; charset utf-8; listen 1.2.3.4:443 ssl ; ssl_certificate "/var/www/httpd-cert/mon.domain.ru_2023-07-10-18-08_31.crt"; ssl_certificate_key "/var/www/httpd-cert/mon.domain.ru_2023-07-10-18-08_31.key"; auth_basic "closed site"; auth_basic_user_file /var/www/domain_ru_usr/data/www/mon.domain.ru/.httpauth; location / { proxy_pass http://127.0.0.1:5555; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } include "/etc/nginx/fastpanel2-sites/domain_ru_usr/mon.domain.ru.includes"; include /etc/nginx/fastpanel2-includes/*.conf; error_log /var/www/domain_ru_usr/data/logs/mon.domain.ru-frontend.error.log; access_log /var/www/domain_ru_usr/data/logs/mon.domain.ru-frontend.access.log; } server { server_name mon.domain.ru ; listen 1.2.3.4:80; return 301 https://$host$request_uri; error_log /var/www/domain_ru_usr/data/logs/mon.domain.ru-frontend.error.log; access_log /var/www/domain_ru_usr/data/logs/mon.domain.ru-frontend.access.log; }
После сохранения изменений панель хостинга FastPanel сама перегрузила Nginx. Теперь если я иду на domain.ru:5555/ui, то получаю ответ, что доступ закрыт, а если на mon.domain.ru — то получаю просьбу напечатать логин и пароль, после ввода которых меня переносят в знакомую систему мониторинга PowerMTA.