Como configurar Grafana com HTTPS

Já foi a época em que podíamos navegar usando protocolo HTTP, ainda mais acessando URLs que recebem credenciais. Como fiz o artigo anterior sobre a utilização de Grafana com MQTT, achei interessante mostrar o resto do setup. Não é algo que se diga: “Nossa, que primícia essa configuração!”, mas você terá Grafana com HTTPS – e é o que importa.

Grafana com HTTPS

Uma das formas de fazê-lo é criando um certificado auto-assinado. É a prática mais comum, ainda mais quando não se tem um domínio próprio. Mas se você tem uma URL pública (não vale para redirecionadores de URL), esse deve ser o jeito mais interessante de se fazer essa configuração. Comecemos.

Instalar nginx

O nginx é um servidor web muito leve e que eu realmente sou apaixonado. Já fiz balanceador com ele para uma carga de mais de meio milhão de dispositivos de uma operadora de telecom no Rio de Janeiro. Se não fosse por ele, a coisa ia ficar mais complicada do que foi.

A instalação é simples:

sudo su #daqui em diante não precisamos mais usar sudo
apt-get update
apt-get install nginx

Agora entre no diretório /etc/nginx/sites-enabled e edite o arquivo default. Use o editor que desejar, eu prefiro sempre usar o vim.

Procure pela sessão server {… e mude as linhas a partir de server_name _; deixando-as assim:

server {
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name seudominio.com.br www.seudominio.com.br;

    location / {
        proxy_pass http://localhost:3000;
    }
...

Daí pra baixo deixe tudo como está. Reinicie o serviço:

service nginx restart

Instalar certbot

O certbot (muito obrigado por existir S2) é uma lindeza de serviço que gera um certificado SSL gratuito e válido para seu domínio. Na versão para Ubuntu 20.04 focal a renovação é automática. Esse é o cara que nos permitirá termos o Grafana com HTTPS.

apt install certbot python3-certbot-nginx

Agora precisamos obter nosso certificado. Para tal:

certbot --nginx -d seudominio.com.br -d www.seudominio.com.br

Aparecerá uma pergunta sobre redirecionamento ou não. Opte por 2.

Redirecionar para o Grafana com HTTPS

Nessa configuração, ao acessar https://seudominio.com.br, será feito um redirecionamento interno para a porta 3000, já pelo túnel SSL. Só que se o usuário usar seudominio.com.br:3000, abrir-se-á o Grafana. Para evitar isso (serei condenado por essa escolha, mas encaro as consequências) fiz uma regra de redirecionamento de porta com iptables:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3000 -j REDIRECT --to-port 80

Tem que ser redirecionamento, se usar DROP de entrada na porta 3000, o nginx não tomará nem ciência de que existiu uma tentativa de conexão. Constate o funcionamento.

Após, fiz um serviço de firewall com essa regra. Coisa simples; crie um arquivo em /etc/systemd/system chamado frw.service. Inclua o seguinte conteúdo:

[Unit]
Description=MQTT subscribe service
After=network.target

[Service]
Type=simple
ExecStart=/root/frw.sh
RemainAfterExit=true
StandardOutput=journal
User=root

[Install]
WantedBy=multi-user.target

Depois, crie o script com a regra de firewall em /root, com o nome frw.sh, e conclua dando permissão de execução a ele.

#!/bin/bash
/usr/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3000 -j REDIRECT --to-port 80

A permissão de execução:

chmod 750 /root/frw.sh

E agora habilite o serviço de firewall no sistema:

systemctl enable frw

Pronto, sempre que seu sistema reiniciar, estará garantida a execução da regra de firewall.

O resultado é o da imagem de destaque.

 

Revisão: Ricardo Amaral de Andrade

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.