Um dashboard para monitoramento e acompanhamento das atividades do servidor Zimbra usando Graylog e Grafana

ATENÇÃO – Para instalação do servidor Graylog+Grafana+Elasticsearch, estamos partindo de um Ubuntu 18.04 LTS (pelos relatos, em um Ubuntu 16.04 LTS também funciona sem problemas)

Instalação do java oracle 8

add-apt-repository ppa:webupd8team/java
apt-get update
apt install oracle-java8-set-default

#verifique a versão do java
root@graylog2:/etc/ansible# java -version
java version “1.8.0_191”
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Instalação do MongoDB

apt install mongodb

# Verifique se o mongodb está rodando
systemctl status mongodb

Instalação do Elasticsearch

cd /tmp
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.12.deb

dpkg -i elasticsearch-5.6.12.deb

Agora, edite o arquivo /etc/elasticsearch/elasticsearch.yml e remova o comentário “#” do cluster.name: e modifique o my-application para o nome do seu cluster. Irei utilizar o nome graylog
Antes
#cluster.name: my-application
Depois
cluster.name: graylog

Salve e saia.
#Reinicie o elasticsearch
systemctl restart elasticsearch

# Verifique se o elasticsearch foi iniciado corretamente:

root@graylog2:/tmp# ps aux|grep -i elasticsearch
elastic+ 8998 11.9 28.2 4593768 2308560 ? Ssl 16:33 0:11 /usr/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid –quiet -Edefault.path.logs=/var/log/elasticsearch -Edefault.path.data=/var/lib/elasticsearch -Edefault.path.conf=/etc/elasticsearch

 

# Verifique se a porta 9200 está aberta e recebendo conexões

root@graylog2:/tmp# netstat -nap |grep 9200
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 8998/java
tcp6 0 0 ::1:9200 :::* LISTEN 8998/java

Instalação do Graylog 2.4.x

wget https://packages.graylog2.org/repo/packages/graylog-2.4-repository_latest.deb
apt update
apt install graylog-server

#Habilite o graylog-server na inicialização
systemctl enable graylog-server.service

#Configurando o Graylog
#instale o pwgen
apt install pwgen

# Precisamos gerar uma senha randomica usada para criptografar as senhas dos usuarios.
sudo -E sed -i -e “s/password_secret =.*/password_secret = $(pwgen -s 128 1)/” /etc/graylog/server/server.conf

# para verificar a senha gerada, execute o comando abaixo
root@graylog2:/tmp# grep password_secret /etc/graylog/server/server.conf

#O resultado será algo como o abaixo:
password_secret = MJsbRKtgjtHL9dwQYV9rmL5CR7icnTnOMBARynAGmLhNUvDuyrOlHBEl887drBypXOoFhwSpKpPVk9sieWk3Ml6m4SaSc7GOj2vxkCgs4gPIq6xDRCZqvTksTBGCEsxT

# Agora iremos gerar para o root_password_sha2 -> Altere o valor de ZimBrasil por uma senha que você escolher
sudo sed -i -e “s/root_password_sha2 =.*/root_password_sha2 = $(echo -n ‘ZimBrasil’ | shasum -a 256 | cut -d’ ‘ -f1)/” /etc/graylog/server/server.conf

# para verificar a senha criptografada do usuário root, verifique com o comando abaixo
root@graylog2:/tmp# grep root_password_sha2 /etc/graylog/server/server.conf

#O resultado será algo como o abaixo:
root_password_sha2 = f08a994ad0e0e691a89fff7e73d6a278c7ba682c0661c98a2b74db81b87c5774

# Agora, vamos editar o arquivo /etc/graylog/server/server.conf e modificar os valores abaixo:
rest_listen_uri = http://ip_do_servidor_ou_hostname:9000/api/
e
web_listen_uri = http://ip_do_servidor_ou_hostname:9000/

# No caso do servidor que estou montando para este tutorial, o resultado será::
# Api para acesso local
rest_listen_uri = http://10.0.0.4:9000/api/

web_listen_uri = http://10.0.0.4:9000/

Salve e saia.

# Reinicie o servidor graylog
systemctl restart graylog-server

# Verifique se o graylog-server está rodando
systemctl status graylog-server.service

root@graylog2:/tmp# systemctl status graylog-server.service
● graylog-server.service – Graylog server
Loaded: loaded (/usr/lib/systemd/system/graylog-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-10-19 16:55:29 UTC; 26s ago
Docs: http://docs.graylog.org/
Main PID: 12415 (graylog-server)
Tasks: 102
Memory: 766.6M
CPU: 40.792s
CGroup: /system.slice/graylog-server.service
├─12415 /bin/sh /usr/share/graylog-server/bin/graylog-server
└─12419 /usr/bin/java -Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled –

Oct 19 16:55:29 graylog2 systemd[1]: Started Graylog server.

 

#Agora, acesse o graylog pelo browser: http://ip_do_servidor_ou_hostname:9000/

Logue com o usuário admin e a senha informada no root_password_sha2 – no exemplo que fizemos, setei a senha como ZimBrasil

# Vamos criar o indice para o zimbra.

Vá até o Menu “System” em seguida vá em “Indices”

Clique no botão “Create index set”

Na sua máquina local, faça o download do repositório https://github.com/opc40772/Zimbra-Graylog – o arquivo é o https://github.com/opc40772/Zimbra-Graylog/archive/master.zip
Descompacte e volte para o Graylog.

Vá até o Menu “System” em seguida vá em “Content Packs”
Vá em “Import content pack”
Escolha o arquivo “content_pack_zimbra.json” que está dentro da pasta descompactada (Zimbra-Graylog-master/Content\ Pack/content_pack_zimbra.json
Clique no botão Upload.
Haverá uma nova tab chamada Zimbra.
Clique nela, selecione a opção “Zimbra Content Pack” e clique em “Apply Content”

 

Filebeat e Zimbra – Esse procedimento deverá ser realizado somente no servidor Zimbra!!!

Acesse o servidor zimbra e instale o filebeat

Vá até a página de downloads do filebeat e baixa a versão para o seu Zimbra (DEB ou RPM)

Para debian/ubuntu 64-bits

cd /tmp
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.2-amd64.deb
dpkg -i filebeat-5.6.2-amd64.deb

Para CentOS ou RHEL 64-bits

cd /tmp
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.2-x86_64.rpm
rpm -ivh filebeat-5.6.2-x86_64.rpm

Agora, com o filebeat configurado, iremos adicionar os logs do zimbra para enviar para o nosso Graylog.
Guarde o arquivo filebeat.yml como backup.
mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml_ORIGINAL

Agora, crie o arquivo /etc/filebeat/filebeat.yml com o conteúdo abaixo
Veja o exemplo válido em: https://pastebin.com/XAye0gVQ
Muito cuidado ao copiar por causa da identação do tipo de arquivo YAML

#=================== Filebeat prospectors ======================
filebeat.prospectors:

– input_type: log
  document_type: postfix
  paths:
   #No caso de ubuntu é mail.log e no do CentOS é maillog no caminho abaixo
     – /var/log/mail.log
– input_type: log
  document_type: zimbra_audit
  paths:
    – /opt/zimbra/log/audit.log
– input_type: log
  document_type: zimbra_mailbox
  paths:
    – /opt/zimbra/log/zmmailboxd.out
– input_type: log
  document_type: nginx
  paths:
    – /opt/zimbra/log/nginx.access.log

#——- Logstash output ——-
output.logstash:
  hosts: [“ip_do_servidor_ou_hostname:5045”]

  bulk_max_size: 2048
  template.name: “filebeat”
  template.path: “filebeat.template.json”
  template.overwrite: false

 

### Salve o arquivo e saia.

Reinicie o filebeat
systemctl restart filebeat.service

ou

service filebeat restart

Volte para o graylog e vá até o menu “Streams” e selecione o stream “Zimbra”
Você já deve estar recebendo os logs do seu zimbra.

Para testar, envie alguns emails do seu zimbra para usuários externos (fora do seu zimbra) e o inverso também.
Para testar as regras do “content_pack_zimbra.json” que instalamos no Graylog, vamos supor que:

o meu email joaozinho@gmail.com envio um email para o ananias@zimbrasil.com.br

Basta fazer a query a seguir:

from:adervanrodrigues123@gmail.com AND to:ananias@zimbrasil.com.br

E o resultado será como o apresentado na imagem abaixo
<<add img query teste>>

 

Instalação do Grafana

Agora vamos ao dashboard com o grafana.
Na máquina do Graylog, vá até o terminal para que possamos instalar o Grafana e suas dependências.

cd /tmp
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.4_amd64.deb
dpkg -i grafana_5.1.4_amd64.deb

Instale os plugins adicionais rodando os comandos abaixo:

/usr/sbin/grafana-cli plugins install briangann-datatable-panel
/usr/sbin/grafana-cli plugins install grafana-piechart-panel
/usr/sbin/grafana-cli plugins install grafana-worldmap-panel

Habilite o grafana-server na inicizalização
systemctl enable grafana-server.service

Inicie o grafana-server

systemctl start grafana-server.service

Agora, acesse pelo browser/navegador a url http://ip_do_servidor_ou_hostname:3000
Usuário: admin
Senha: admin

Após o login, a primeira coisa a se fazer, é criar uma datasource de conexão com o elasticsearch.
Vamos lá!

Salve e verifique se o teste ocorreu com sucesso.

Faça o Download do arquivo aqui https://www.zimbrasil.com.br/wp-content/FILES_UPLOAD/Zimbra-Graylog-ZimBrasil.json

Troque tudo que tem no conteúdo do arquivo json de meudominio.com.br paraseudominio.com.br

Se foi tudo bem, clique no menu direito, Dashboards, Home.
Clique em “New Dashboard”
Agora no menu superior “New Dashboard” e em seguida “Import Dashboard”
Selecione o botão “Upload .json File” e escolha o arquivo “Zimbra_Grafana_Zimbrasil.json”

e clique em “Import”
Aguarde e seu painel já estará pronto!