Сертификат от Let’s Encrypt для Grafana

Grafana внутри LAN крутится на 3000 порту, но на сетевом фаерволе настроен редирект с порта HTTPS (443) на порт 3000. Таким образом графана отвечает из глобальной сети по адресу https://monitoring.mydomain.ru/ (адрес используется для примера)

В примере команды и конфиг для RedHat 7

  1. Ставим certbot следующими командами:
    yum -y install yum-utils
    yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
    yum install certbot
  2. Устанавливаем nginx. Графана использует свой собственный веб-сервер который крутиться на 3000 порту и не подходит для проверки let’s encrypt. Для проверки certbot создает временный файл с ключём на веб-сервере, сервер выдачи сертификатов проверяет есть ли этот самый файл, но делает это на стандартном 80 порту.
    yum -y install nginx

    В конфиге nginx ( /etc/nginx/nginx.conf )указываем используемое доменное имя:

    server_name  monitoring.mydomain.ru;

     

  3. Запрашиваем сертификат для monitoring.mydomain.ru через certbot, указав Webroot от nginx:
    certbot certonly --webroot -w /usr/share/nginx/html/ -d monitoring.mydomain.ru
  4. Если проверка прошла успешно Certbot положит сертификаты по адресу /etc/letsencrypt/live/monitoring.mydomain.ru/, там будет 4 файла (закрытый ключ и 3 файла с сертификатами под разные веб-серверы). Чтобы grafana смогла прочитать эти файлы нужно дать доступ на чтение для этих папок и файлов (файлы, скорее всего, уже будут с нужными правами) и так же дать права на чтение директории /etc/letsencrypt/archive/monitoring.mydomain.ru/ т.к. в реальности сертификаты лежат именно там, а в директории которую нам сообщил certbot всего лишь ссылки на них.
  5. В конфиге Grafana ( /etc/grafana/grafana.ini ) нужно указать путь до сертификатов и включить https:
    # Protocol (http, https, socket)
    protocol = https
    
    # https certs & key file
    cert_file = /etc/letsencrypt/live/monitoring.mydomain.ru/fullchain.pem
    cert_key = /etc/letsencrypt/live/monitoring.mydomain.ru/privkey.pem

     

  6. Так как сертификат выдается на 3 месяца, имеет смысл добавить задачу по обновлению его в cron. Официальный сайт certbot рекомендует запускать обновление сертификата 2 раза в день (если серт не нуждается в обновлении — он не обновится), мы добавим раз в день в 5 утра. Добавляем в /etc/crontab :
    # Let's Encrypt shedule
    
    0 5 * * * root certbot renew

 

На этом непосредственно настройка сертификатов для Grafana завершена, НО — при заходе на https://monitoring.mydomain.ru мы видим графану, а при заходе на http://monitoring.mydomain.ru мы видим заглушку от nginx, что не есть хорошо. Делать полную переадресацию на HTTPS нельзя — при обновлении сертификата cetbot положит временный файл в nginx и будет ждать подтверждения там, но не утвердится, его же переадресует на Grafana.

Делаем переадресацию ТОЛЬКО главной страницы на HTTPS версию (веб-сервер Grafana) в конфиге nginx /etc/nginx/nginx.conf :

location ~ ^/$ {
 return 301 https://monitoring.mydomain.ru/;
 }

На этом всё, на 443 порту висит Grafana, на 80 порту nginx для утверждения сертификатов.

0

Добавить комментарий

Ваш e-mail не будет опубликован.