sexta-feira, 15 de maio de 2020

[Sobre o Zabbix] Criptografia do Frontend do Zabbix com o Banco de Dados do Zabbix



Com o lançamento da nova versão do Zabbix 5.0, uma nova funcionalidade bem interessante é a possibilidade de criptografar a comunicação do frontend do Zabbix com o banco de dados do Zabbix.

Mais abaixo irei detalhar como realizar este procedimento. Partindo da ideia que, o MariaDB Server e o Client estejam instalandos no servidor de banco. Caso, o banco seja separado da aplicação, que o no frontend tenha instalado somente o MariaDB Client.

Eu costumo deixar tudo que é inerente ao Zabbix na própria pasta o Zabbix Server, no meu caso é em /etc/zabbix. Assim irei criar uma nova pasta que irá receber todos os certificados criados.

Vamos lá!

Neste tutorial irei preencher somente o campo CN (Common Name (eg, your name or your server's hostname)) que terá que ser o mesmo nome da máquina aonde está instalado o banco. É possível colher o nome através do comando hostname via CLI. Também é possível alterar o nome do host através do comando nmtui. Não é possível deixar o nome como "localhost". O nome criado será informado no campo "Database host" no processo de configuração do banco.

No meu caso, uso tudo em um lugar só, ou seja, banco de dados, server e frontend tudo na mesma máquina. Caso fosse separado somente o banco de dados, é necessário informar outro nome no campo CN bem como o nome da máquina do banco, por exemplo, zabbix-server-db.

É necessário ter instalado o pacote openssl na máquina do banco, aonde serão gerados os certificados que iremos utilizar.

Se por ventura não diferenciar o CN para o server e para o cliente, terá o seguinte erro ao tentar conectar via CLI no banco de dados:

ERROR 2026 (HY000): SSL connection error: tlsv1 alert unknown ca

No servidor de banco de dados, vamos realizar os seguintes passos:

##Gerando A CA Certificado##

cd /etc/zabbix
mkdir certificados ; cd certificados
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -subj "/CN=CA Server"  -key ca-key.pem -out ca-cert.pem

##Gerando Certificado para Server do banco##

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=zabbix-server"
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

##Gerando Certifcado para Cliente##

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem  -subj "/CN=Client Server"
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem  -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Feito isso finalizamos toda a criação dos certificados que usaremos neste processo. 


Agora iremos preparar o servidor do banco para utilizar o certificado gerado bem como a utilização do certificado para o cliente.

No servidor do banco iremos editar o arquivo my.cnf:

 vim /etc/my.cnf

Na chave [mariadb] iremos adicionar os seguintes campos, conforme print mais abaixo:

[mariadb]
log_error=/var/log/mariadb/mariadb.log
ssl-ca=/etc/zabbix/certificados/ca-cert.pem
ssl-cert=/etc/zabbix/certificados/server-cert.pem
ssl-key=/etc/zabbix/certificados/server-key.pem


Agora na chave [client-mariadb] iremos adicionar os seguintes campos, conforme print mais abaixo:


Depois disso iremos reiniciar o serviço do mariadb:

systemctl restar mysql

Bom, vamos realizar os testes para validar se o servidor está usando o certificado, bem como na o client usa o certificado. Para isto é necessário tentar conectar ao banco:

mysql -uUSUARIO -pSENHA
MariaDB [(none)]> SHOW VARIABLES LIKE '%ssl%';


Com isso vemos que o servidor do banco está realizando o uso do certificado criado. \O/

Agora iremos validar se o client está realizando ao conexão de forma criptografada com o banco:

mysql -uUSUARIO -pSENHA
MariaDB [(none)]> status


Com isso vemos que a comunicação do client com o banco está realizando o uso do certificado criado de forma criptografada. \O/

Agora iremos configurar o nosso frontend para realizar a conexão de forma criptografada com o banco de dados.

Partindo da ideia que seja uma nova instalação, irei pular direto para o parte de conexão com o banco. Mas caso deseje implementar agora seja upgrade ou instalação nova mesmo já tendo configurado a conexão. Basta realizar o chamada da interface de configuração do Zabbix 5 que é através da URL: http://IP DO SERVER/zabbix/setup.php. Agora teremos a seguinte tela aonde já deixarei configurado os campos:


Database host: zabbix-server
Database name: zabbix
User: USUARIO_DO_BANCO
UserPassword: SENHA_DO_BANCO
TLS key file: /etc/zabbix/certificados/client-key.pem
TLS certificate file: /etc/zabbix/certificados/client-cert.pem
TLS certificate authority file: /etc/zabbix/certificados/ca-cert.pem
TLS cipher list: DHE-RSA-AES256-GCM-SHA384

Como havia mencionado, o campo "Database host" será o nome dado no certificado para o servidor do banco, este nome tem que ser idêntico também com o hostname da máquina do banco.

Os campos TLS key file, TLS certificate file, TLS certificate authority file você deve apontar para o caminho aonde estão salvos os certificados do cliente.

Já o campo TLS cipher list, como obter? Este campo será preenchido com a informação no campo SSL no momento que usamos o comando status dentro do banco. Também é possível saber através do comando abaixo:

mysql -uUSUARIO -pSENHA -e "status"|grep -i 'cipher'


Bom, agora basta clicar em "Next step" para ver se conecta ao banco:


Caso chegue na tela acima, significa que foi tudo feito de forma correta, agora basta continuar clicando em "Next step".

Se obtiver a tela abaixo significa que foi configurado com sucesso a criptografia entre o Zabbix Frontend e o Banco de dados:


Uruuuu! É isso pessoal, conseguimos configurar com sucesso.

Espero ter ajudado.
\O

Bônus!

Caso você use o banco de dados separado da aplicação, toda criação dos certificados continuarão no servidor do banco. O que muda é que no Zabbix Frontend será necessário ter os seguintes arquivos na pasta de vossa escolha (lembrando que, informará esse caminho no ato da configuração do banco):

client-cert.pem
client-key.pem
client-req.pem
ca-cert.pem

E que no Frontend no Zabbix Server tenha instalado o MariaDB Client somente! E que na chave  [client-mariadb] sejam informados os mesmos campos mas que aponte para a pasta aonde estão os arquivos do client. 

Nenhum comentário:

Postar um comentário