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