Como les decía en el tercer artículo vamos ahora a configurar nuestro logstash para que filtre los logs de zimbra.
LogstashNos descargaremos los patrones y filtros que ya estan definidos para él y le haremos alguna que otra modificación. Instalamos git para clonar el repositorio de archivos
#apt-get install gity seguidamente lo clonamos
#git clone https://github.com/ITLinuxCL/zimbra_logstashVeremos que se crea una carpeta llamada zimbra_logstash y dentro estaran ya los filtros y patrones que vamos a utilizar en nuestro procesamiento de nuestros logs de zimbra.
Ahora modificaremos nuevamente el fichero output de logstash para su salida a elasticsearch pero en este caso para el zimbra, donde crea el indice.
#nano /etc/logstash/conf.d/output-elasticsearch.confAgregamos debajo de la salida de squid lo siguiente:
output {
if [host] == "squid" {
elasticsearch {
hosts => ["es-data-01.mpcfg.co.cu:9200","es-data-02.mpcfg.co.cu:9200","es-data-03.mpcfg.co.cu:9200"]
manage_template => false
index => "squid-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
else if [host] == "mail" {
elasticsearch {
hosts => ["es-data-01.mpcfg.co.cu:9200","es-data-02.mpcfg.co.cu:9200","es-data-03.mpcfg.co.cu:9200"]
manage_template => false
index => "correo-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}}Se agrega lo que esta en negrilla. Como vemos nuestro host se llama mail y esto debe coincidir con el nombre del host zimbra vuestro para que les funcione correctamente.
Vamos ahora a copiar los filtros necesarios de zimbra y los patrones de los cuales se van a auxiliar con el plugin grok para a partir de los mismos para hacer el parseo de los logs de zimbra.
En la carpeta donde clonamos con el git el repositorio de input, filtros, patrones y outputs.
#cd /root/zimbra_logstash/conf.d
#cp 10-filter-postfix.conf 15-filter-sasl.conf 16-filter-amavis.conf 17-filter-nginx.conf 18-filter-zimbra.conf 19-filter-mutate.conf /etc/logstash/conf.dCopiamos la carpeta donde vienen definidos los patrones para la configuración de logstash.
#cp -R /root/zimbra_logstash/patterns /etc/logstashAhora modificaremos el fichero 10-filter-postfix.conf agregando estas lineas para usar la geolocalización de origen y destino de los mensajes de correo. Sugerencia para no equivocarse copiar lo siguente que esta en negrilla antes del ultimo corchete.
if [component] == "postsuper" {
grok {
patterns_dir => ["/etc/logstash/patterns/"]
match => [ "message", "%{POSTFIXPOSTSUPER}" ]
add_tag => [ "relay" ]
remove_tag => [ "unknown" ]
}
}
if [src_relayip] {
geoip {
source => "src_relayip"
target => "geoip"
database => "/etc/logstash/geoip/GeoLite2-City.mmdb"
fields => [ "country_code2", "country_name" ]
fields => [ "latitude", "longitude" ]
add_field => [ "[geoip][location]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][location]", "%{[geoip][latitude]}" ]
add_tag => "geoip"
}
mutate {
convert => [ "[geoip][location]", "float"]
}
}
if [dst_relayip] {
geoip {
source => "dst_relayip"
target => "geoip"
database => "/etc/logstash/geoip/GeoLite2-City.mmdb"
fields => [ "country_code2", "country_name" ]
fields => [ "latitude", "longitude" ]
add_field => [ "[geoip][location]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][location]", "%{[geoip][latitude]}" ]
add_tag => "geoip"
}
mutate {
convert => [ "[geoip][location]", "float"]
}
}}Ya casi tenemos todo listo pero nos falta aún pasarle la plantilla al elasticsearch, para el acomodo de algunos tipos de datos del índice como el de geoip para poder hacer bien los mapas de geolocalización. Recurrimos nuevamente la herramienta web del cluster de la primera parte cerebro. En el menu more seleccionamos index templates:

A la derecha crearemos el template con nombre correo-filebeat con el siguiente contenido:
{
"order": 0,
"template": "correo-filebeat-*",
"settings": {
"index": {
"number_of_replicas": "2",
"refresh_interval": "5s"
}
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"template1": {
"mapping": {
"ignore_above": 1024,
"index": "not_analyzed",
"type": "{dynamic_type}",
"doc_values": true
},
"match": "*"
}
}
],
"_all": {
"norms": false,
"enabled": true
},
"properties": {
"tls_info": {
"index": "false",
"type": "text"
},
"@timestamp": {
"type": "date"
},
"geoip": {
"dynamic": true,
"type": "object",
"properties": {
"ip": {
"type": "ip",
"doc_values": true
},
"latitude": {
"type": "float",
"doc_values": true
},
"country_code2": {
"index": "false",
"type": "text"
},
"country_name": {
"index": "false",
"type": "text"
},
"location": {
"type": "geo_point",
"doc_values": true
},
"longitude": {
"type": "float",
"doc_values": true
}
}
},
"offset": {
"type": "long",
"doc_values": "true"
},
"port": {
"index": "false",
"type": "integer"
},
"message": {
"index": "true",
"type": "text"
}
}
}
},
"aliases": {}
}
Reiniciamos el servicio logstash para que adquiera la nueva configuración
#service logstash restartVerificamos inició bien.
#tail -100f /var/log/logstash/logstash-plain.log[2017-06-07T21:00:02,920][INFO ][logstash.agent ] Successfully started
Logstash API endpoint {:port=>9600}Zimbra
En el servidor zimbra instalaremos filebeat que es el servicio que le entregará los logs al logstash.
Lo descargamos:
# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.1-amd64.debYa descargado lo instalamos.
#dpkg -i filebeat-5.4.1-amd64.debAhora estamos listos para configurar el filebeat en el equipo remoto o sea el servidor de correo zimbra. En el servidor de correo editamos el fichero filebeat.yml. Como generamos para logstash un certificado debemos copiarselo también al servidor zimbra lo pondremos en la misma carpeta de filebeat en /etc/filebeat/ el fichero logstash.crt. Esto garantiza que la comunicación sea segura entre filebeat de zimbra y logstash como hemos mencionado anteriormente.
#nano /etc/filebeat/filebeat.ymlSolo modificaremos la sesiones de Filebeat prospectors y Logstash output.
#=================== Filebeat prospectors ======================filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- input_type: log
document_type: postfixpaths:
- /var/log/mail.log
# - /var/log/zimbra.log
- input_type: log
document_type: zimbra_auditpaths:
- /opt/zimbra/log/audit.log
- input_type: log
document_type: zimbra_mailboxpaths:
- /opt/zimbra/log/zmmailboxd.out
- input_type: log
document_type: nginxpaths:
- /opt/zimbra/log/nginx.access.log
#---------------------- Logstash output ---------------------------
output.logstash:
# The Logstash hosts
hosts: ["logstash.dominio.com:5443"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
bulk_max_size: 2048
ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
Riniciamos el servicio de filebeat
#service filebeat restartVerificamos el estado del servicio
#service filebeat status filebeat.service – filebeat
Loaded: loaded (/lib/systemd/system/filebeat.service; disabled; vendor
preset: enabled)
Active: active (running) since dom 2017-06-25 21:13:41 CDT; 2s ago
Docs: https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Main PID: 9670 (filebeat)
CGroup: /system.slice/filebeat.service
└─9670 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
-path.home /usr/share/filebeat -path.config /etc/filebeatEn este momento debe estar el filebeat de zimbra enviando ya los logs al logstash y este a su vez filtrándolos. Ya en nuestra web cerebro aparecerá el primer índice con el nombre correo-filebeat-YYYY-MM-dd y los shards primarios con sus respectivas replicas en el cluster.

Preparando Grafana para los dashboard de correo entrante y saliente
Establecemos el datasource de la misma forma que lo hicimos con el squid. Nuestro Data source debe llamarse correo-elastic para que el dashboard que les traigo no tengan que modificarlo.

Ahora solo nos queda importar en el grafana los dashboards que en este caso son dos y ya saben por el artículo anterior como hacerlo. Estos son los dashboards:
- Correo Saliente:correosaliente
- Correo Entrante.correoentrante
Captura de correo saliente:

Correo Entrante:







No comments yet