Instalação do Zabbix Server 6 no Ubuntu 20.04

Olá pessoal, tudo bem por aí? Bom, hoje vamos ver como fazer a Instalação do Zabbix Server 6 no Ubuntu 20.04 para ter seu ambiente monitorado!
Antes de continuar queria informar que tudo que eu fiz nesse tutorial é resultado de uma documentação bem feita e ela pode ser encontrada AQUI!

A princípio, aqui vamos Instalar o Zabbix Server 6 LTS usando um Ubuntu 20.04 LTS, como banco de dados vamos usar o nosso famoso MySQL e como servidor web vamos utilizar o Nginx!

Queria lembrar vocês que temos um canal no Youtube, então se você quiser acompanhar nosso conteúdo por lá, fique a vontade:

Atualização do seu Sistema Operacional

Por mais que você tenha criado uma máquina nova na sua Infraestrutura, seja ela Cloud ou On-premises, aconselho você antes de mais nada fazer os comandos para atualizar a lista de repositórios e atualizar seus pacotes do Ubuntu 20.04 LTS.

Para isso, execute os comandos apt update, e apt upgrade e deixe a mágica agir:

Comandos apt update e apt upgrade para atualizar seu Sistema Operacional!

Logo após um procedimento de update/upgrade de servidores Ubuntu, ele requer um reboot e se eu logar no servidor novamente vejo a seguinte mensagem:

Ubuntu 20.04 LTS requisitando restart após apt update/upgrade

Contudo, para fazer o restart do servidor, costumo fazer somente o comando reboot

Instalando o banco de dados MySQL

Acima de tudo, como bom produtor de conteúdo que somos, temos um tutorial no Youtube que te mostra como instalar o banco de dados MySQL, você pode querer ver ele aqui:

Mas aqui também vou deixar os comandos de Instalação para você! Basicamente precisamos rodar apt install mysq-server que será instalada a versão do MySQL 8 no seu servidor.
Antes de mais nada, é sempre bom lembrar que a instalação do servidor MySQL default pode consumir memória demais do seu server, e aqui vamos usar o mesmo recurso para compartilhar Banco de Dados, Aplicação e Servidor Web. Então, logo após a instalação vamos modificar algumas configurações do MySQL.

Faça um backup do arquivo /etc/mysql/mysql.conf.d/mysqld.cnf e edite para ficar com as configurações abaixo:

[mysqld]

# USUARIO DO MYSQL
user            = mysql

# MYSQL ESCUTANDO SOMENTE NA INTERFACE LOCALHOST
bind-address            = 127.0.0.1

# CONFIGURACOES AVANCADAS
key_buffer_size                = 16M

max_allowed_packet             = 64M
thread_stack                   = 256K
innodb_buffer_pool_size        = 500M

innodb-file-per-table          = 1
innodb_buffer_pool_instances   = 1
innodb_old_blocks_time         = 1000
innodb_stats_on_metadata       = off
innodb-flush-method            = O_DIRECT

tmp-table-size                 = 96M
max-heap-table-size            = 96M
open_files_limit               = 65535
max_connect_errors             = 1000000
connect_timeout                = 60
wait_timeout                   = 28800

# ATENCAO, SE VOCÊ TEM A INTENCAO DE USAR OS LOGS BINARIOS O MYSQL NAO DESATIVE ISSO
skip-log-bin

# DEFINICAO DE ARQUIVO DE LOG DE ERRO
log_error = /var/log/mysql/error.log

Se você quiser entender mais como essas variáveis funcionam veja esse site AQUI e procure lá!
Depois que fizemos essa configuração, vamos precisar fazer um restart no nosso servidor MySQL e para isso usamos o comando systemctl restart mysql. Log após isso nosso mysql já está disponível para fazer a conexão, porém ele não vai solicitar a senha de acesso, e logicamente não vamos deixar isso assim!

Para executar uma instalação com segurança do mysql existe um comando que vamos usar que é o mysql_secure_installation mas antes precisamos fazer uma alteração dentro do banco de dados, caso contrário você pode receber o erro abaixo:

Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the MySQL server Error?

Então vamos executar os seguintos comandos no nosso MySQL:

root@coffops-zabbix-server:~# mysql

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Coffops@2022!@#';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit;

Em seguida, saindo do MySQL vamos executar na linha de comando o mysql_secure_installation:

root@coffops-zabbix-server:~# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: No
Using existing password for root.

Change the password for root ? ((Press y|Y for Yes, any other key for No) : No


 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Pronto, agora temos um MySQL rodando, e ele vai suportar nosso Zabbix

Criação de usuário do MySQL para o Zabbix

Conforme manda a documentação, vamos criar um usuário para conectar a aplicação Zabbix Server no nosso banco de dados MySQL! Então dentro do servidor MySQL execute os seguintes comandos:

root@coffops-zabbix-server:~# mysql -p
Enter password:

mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.01 sec)


mysql> create user zabbix@localhost identified by 'SENHA_FORTE';
Query OK, 0 rows affected (0.01 sec)


mysql> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> exit;

Pronto, agora temos um usuário específico para o Zabbix e vamos para o próximo passo que é a instalação do Zabbix Server 6 LTS.

Instalação do Zabbix Server 6 LTS

A primeira coisa que vamos fazer é instalar o repositório do Zabbix Server 6 LTS para logo depois instalar os pacotes:

mkdir /downloads && cd /downloads
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update && apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

Importando o Banco de Dados do Zabbix

Agora, o que temos que fazer é criar um Schema inicial e os dados necessários para que o nosso Zabbix Server funcione. Por padrão o Zabbix cria um arquivo zipado que fica em /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz que vamos usar para isso, veja:

zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -D Zabbix -pSENHA_FORTE

Explicando o comando acima em partes:

  • Zcat é um utilitário de linha de comando para visualizar o conteúdo de um arquivo compactado sem precisar descompactar.
  • /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz arquivo que o zcat vai ler.
  • | mysql -uzabbix -D Zabbix -p SENHA_FORTE joga toda a saída do zcat para o MySQL.
    • -uzabbix deixa  explícito o usuário que será usado na conexão.
    • -D zabbix deixa  explícito qual o nome da base que será usada para o “restore” dos dados.
    • -pSENHA_FORTE deixa  explícito qual senha será usada na conexão.

Configurando a senha do banco MySQL

Logo em seguida, precisamos dizer para nosso Zabbix Server as informações relacionadas ao banco de dados, e para isso com o editor de texto da sua preferencia edite o arquivo /etc/zabbix/zabbix_server.conf e ache o campo DBPassword:

Arquivo de configuração /etc/zabbix/zabbix_server.conf

Configurando o Nginx

Agora precisamos fazer as configurações no nosso Nginx para ele aceitar as conexões e assim, conseguirmos acessar o nosso Zabbix Server.
Dentro de /etc/nginx/conf.d existe um arquivo zabbix.conf, você precisa abri-lo e editar as primeiras linhas que estão comentadas, veja:

Editando o arquivo /etc/nginx/conf.d/zabbix.conf

No campo server_name, precisamos colocar o endereço DNS que vamos usar para acessar o Zabbix Server e isso será cadastrado lá na sua hospedagem, mais precisamente no seu gerenciador de domínio.

Habilitando e iniciando os serviços

Posteriormente precisamos reiniciar os serviços que envolvem o Zabbix Server e para isso, use o comando abaixo:

systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm

Então, também precisamos habilitar esses serviços para iniciar automaticamente caso o nosso servidor seja reiniciado, e para isso use os comandos:

systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm

Caso você encontre o erro abaixo:

root@coffops-zabbix-server:/etc/nginx/conf.d# systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.

É provável tem um apache2 ou algum outro serviço ativo e usando a porta 80, no meu caso era o apache. Logo, como eu não vou usá-lo, simplesmente paro e o desabilito usando os comandos systemctl stop apache2 e systemctl disable apache2

Liberando portas no Firewall

Posteriormente, agora precisamos fazer a liberação de portas no nosso firewall e no Ubuntu usamos o famoso UFW.


OBS: Se você não estiver com o UFW habilitado e for fazer isso, não esqueça de liberar a porta 22 para acesso SSH. Use o comando ufw allow to any port 22 para isso!

As portas que vamos precisar liberar são:

  • 80 – Porta HTTP
  • 443 – Porta HTTPS
  • 10051 – Porta do Zabbix Server

Então para isso usamos os comandos:

# LIBERANDO PORTA 80/HTTP
root@coffops-zabbix-server:/etc/nginx/conf.d# ufw allow to any port 80
Rules updated
Rules updated (v6)


# LIBERANDO PORTA 443/HTTPS
root@coffops-zabbix-server:/etc/nginx/conf.d# ufw allow to any port 443
Rules updated
Rules updated (v6)


# LIBERANDO PORTA 10051 PARA A REDE 10.108.0.0/20
root@coffops-zabbix-server:/etc/nginx/conf.d# ufw allow from 10.108.0.0/20 to any port 10051
Rules updated
root@coffops-zabbix-server:/etc/nginx/conf.d# ufw status
Status: active

To                         Action      From
--                         ------      ----
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
10051                      ALLOW       10.108.0.0/20
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Configurando DNS na Cloudflare e habilitando SSL com Certbot

Posteriormente, antes de acessar nosso Zabbix precisamos configurar uma dominio para acessá-lo. Nas configurações do Nginx lá em cima definimos zab.coffops.com para acessar nosso sistema, então let ‘s bora!
No painel da Cloudflare faça a seguinte configuração:

Configuração do dominio zab.coffops.com. na Cloudflare

Agora que já temos um domínio de verdade apontando para o IP onde está rodando nosso Nginx, temos que gerar um certificado e vamos usar o certbot para isso. Usamos apt install certbot python3-certbot-nginx

Após isso rodamos os seguintes comando certbot –nginx, veja:

root@coffops-zabbix-server:~# certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: zab.coffops.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for zab.coffops.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/zabbix.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/zabbix.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://zab.coffops.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=zab.coffops.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/zab.coffops.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/zab.coffops.com/privkey.pem
   Your cert will expire on 2022-09-02. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Acessando o Zabbix Server e finalizando a Instalação

Bom, agora se acessarmos a url https://zab.cofops.com.br vamos cair nesta tela:

Primeira tela da instalação do Zabbix Server 6

Em seguida clicamos em OK e caímos em uma tela de checagem de pré requisitos, onde possivelmente, todos vão estar verdes:

Tela de checagem de requisitos do Zabbix Server 6

Logo depois vamos para a tela de configurações da conexão com o banco de dados. A única informação que devemos colocar aqui é a senha do banco de dados, que foi criado lá no começo para o usuário zabbix, no caso SENHA_FORTE:

Tela de configuração de Banco de Dados para instalação do Zabbix Server

Logo após isso, temos a tela de “Settings” onde é possível escolher o nome para esse servidor Zabbix, o TimeZone que no nosso caso é America/Sao_Paulo e o tema default. Gostamos o tema Dark =)

Tela de Settings para instalação do Zabbix Server 6

E por fim, é apresentada uma tela com um resumo da Instalação do Zabbix onde podemos somente avançar:

Tela de resumo da Instalação do Zabbix Server 6
Mensagem de Sucesso para a Instalaçãodo Zabbix Server 6

Logo depois clicar em “Finish” caímos na tela de login onde você vai usar as credenciais Admin (SIM, com A maiúsculo) e a senha zabbix (tudo minúsculo)

Tela inicial após a instalaçãodo Zabbix Server 6

E assim nasce mais um servidor de monitoramento Zabbix:

Tela inicial do Zabbix Server 6 após a Instalação

Em conclusão, a primeira coisa que eu aconselho você a fazer é trocar essa senha e colocar uma autenticação no seu Nginx.
Veja essas Dicas de como configurar seu Nginx de forma mais segura, mais especificamente na parte de Protegendo um location com senha!

Bom pessoal, eu acho que é isso, um abraço e até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado.