Закрываем веб-мониторинг PowerMTA по паролю


Настроили мне недавно систему почтовой рассылки на базе 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.