Si bien tenemos una infinidad de herramientas que nos habilitan la función de Syslog, me voy a enfocar en esta Suite que en mi opinión es bastante versátil, fácil de implementar, utilizar y configurar.
Lo primero que debemos tener en cuenta es que tenemos 2 formas de implementar Graylog.
Minimum Setup: Sirve para entornos chicos, no críticos o testing. Debemos tener en cuenta que ninguno de los componentes instalados es redundante. (Configuración que haremos en esta guía).
Multi-Node Setup: Sirve para cualquier entorno, conlleva una complejidad mayor, ya que se instalan y configuran los servicios para HA, balanceo y redundancia.
Requisitos
- CentOS/RH 8
- MongoDB: Solo almacena la Metadata como usuarios y las configuraciones de todos los ítems como streams, dashboards, etc.
- Elasticsearch: Almacena los mensajes y permite que Graylog los lea para efectuar búsquedas y filtros.
- Graylog Server: Permite la generación de diversos inputs, para luego hacer el parsing de la data obtenida.
Configuraciones previas
Primero vamos a configurar el repositorio EPEL, el cual utilizamos luego para instalar 3 aplicaciones.
sudo dnf install -y epel-release
sudo dnf install -y wget pwgen perl-Digest-SHA curl policycoreutils policycoreutils-python-utils
Instalamos y verificamos java.
sudo dnf install -y java-1.8.0-openjdk-headless
java -version
Vamos a ver un resultado similar a el siguiente:
openjdk version “1.8.0_262”
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
Instalación de Elasticsearch
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Generamos el archivo “/etc/yum.repos.d/elasticsearch.repo” y cargamos lo siguiente:
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/oss-6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Ahora instalamos el servicio.
sudo dnf install -y elasticsearch-oss
Configuración de Elasticsearch
sudo vi /etc/elasticsearch/elasticsearch.yml
Debemos editar las siguientes líneas:
- cluster.name: Nombre del cluster
- node.name: Nombre del nodo.
- network.host: Dirección en la que escucha el servicio.
- http.port: Puerto de escucha
- action.auto_create_index: false
Elasticsearch inicia una VM de Java para su operatoria, con lo cual es recomendable hacer el seteo de la misma. Debemos tener en cuenta que los valores de Memoria “Mínimo” y “Máximo” deben ser iguales y se recomienda no superar el 50% de la memoria total del host. Con lo cual si tenemos un Host con 8 GB de RAM la VM no debe superar los 4 GB.
sudo vi /etc/elasticsearch/jvm.options
## JVM configuration
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms4g
-Xmx4g
Para mejorar el rendimiento es recomendable no trabajar con SWAP, por lo que la vamos a deshabilitar con el siguiente parámetro:
sudo swapoff -a
Otra opción bastante viable es configurar el parámetro de memoria dentro del archivo de configuración de elasticsearch “/etc/elasticsearch/elasticsearch.yml“.
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
Debemos generar la apertura en el firewall para dicho servicio:
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --reload
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl restart elasticsearch
Validar el estado del servicio:
sudo systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-09-02 07:34:02 -03; 54min ago
Docs: http://www.elastic.co
Main PID: 52452 (java)
Tasks: 45 (limit: 23791)
Memory: 1.3G
CGroup: /system.slice/elasticsearch.service
curl -X GET http://localhost:9200
{
"name" : "GLSRV01",
"cluster_name" : "graylog",
"cluster_uuid" : "iB-fkzlESS-tLXEivscS2Q",
"version" : {
"number" : "6.8.12",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "7a15d2a",
"build_date" : "2020-08-12T07:27:20.804867Z",
"build_snapshot" : false,
"lucene_version" : "7.7.3",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Instalación de MongoDB
Para instalar MongoDB, debemos agregar el repositorio:
sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
Luego instalamos la base.
sudo dnf install -y mongodb-org
sudo systemctl daemon-reload
sudo systemctl enable mongod.service
sudo systemctl start mongod.service
sudo systemctl status mongod.service
mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-08-31 12:20:51 -03; 1 day 20h ago
Docs: https://docs.mongodb.org/manual
Main PID: 29785 (mongod)
Memory: 147.1M
CGroup: /system.slice/mongod.service
└─29785 /usr/bin/mongod -f /etc/mongod.conf
Aug 31 12:20:50 localhost.localdomain systemd[1]: Starting MongoDB Database Server...
Aug 31 12:20:50 localhost.localdomain mongod[29783]: about to fork child process, waiting until server is ready for connections.
Aug 31 12:20:50 localhost.localdomain mongod[29783]: forked process: 29785
Aug 31 12:20:51 localhost.localdomain mongod[29783]: child process started successfully, parent exiting
Aug 31 12:20:51 localhost.localdomain systemd[1]: Started MongoDB Database Server.
Instalación de Graylog Server
sudo dnf install -y https://packages.graylog2.org/repo/packages/graylog-3.3-repository_latest.rpm
sudo dnf install -y graylog-server
Configuración de graylog
Para configurar el Graylog Server, vamos primero a generar unas claves las cuales vamos a utilizar posteriormente en el archivo de configuración del server. Genera un código que deberemos poner en el parámetro “password_secret“
pwgen -N 1 -s 96
asPxlUPxFuBpqIj8st0MQxtigtQz0LcPCTmZ9QnEO3jFgIeeukBnACrFlA9l1vebYE3K3HkLUHVgWbEeUbS8BbkL27MfAtB3
Ahora debemos encriptar la clave que vamos a utilizar para el primer login, osea para el usuario “admin“. Vamos a suponer que la clave es “Guia01Graylog“
echo -n Guia01Graylog | shasum -a 256
3d1876df6d594eaa1d52d135ec8184a0ff8a2dacbe2c978ba8679d78e52da369
sudo vi /etc/graylog/server/server.conf
Vamos a editar las siguientes líneas:
password_secret = asPxlUPxFuBpqIj8st0MQxtigtQz0LcPCTmZ9QnEO3jFgIeeukBnACrFlA9l1vebYE3K3HkLUHVgWbEeUbS8BbkL27MfAtB3 (Colocamos la clave generada en el paso anterior)
root_password_sha2 = 3d1876df6d594eaa1d52d135ec8184a0ff8a2dacbe2c978ba8679d78e52da369
root_email = "mail@gmail.com"
root_timezone = America/Buenos_Aires (Para ver zonas validas ir a "https://www.joda.org/joda-time/timezones.html")
http_bind_address = 192.168.0.23:9000 (colocar la IP del server)
transport_email_enabled = true
transport_email_hostname = smtp.gmail.com 182
transport_email_port = 465
transport_email_use_auth = true
transport_email_use_tls = true
transport_email_use_ssl = true
transport_email_auth_username = alerts@test.local #Esta cuenta es una creada para tal fin
transport_email_auth_password = Y0urPassw0rd!
transport_email_subject_prefix = [graylog]
transport_email_from_email = graylog@test.local
Ahora vamos a habilitar los puertos y hacer la habilitación del servicio:
sudo firewall-cmd --permanent --add-port=smtp
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --reload
sudo systemctl daemon-reload
sudo systemctl restart graylog-server
sudo systemctl enable graylog-server
Con estas configuraciones ya podremos ingresar a nuestra web “http://ip-del-server:9000“, utilizando el usuario “admin” y la clave que configuramos en el paso anterior.
Para configurar la recepción de logs, debemos ir a System ⇾ Inputs y cargar los datos del equipo. Recordar qu el puerto default que propone es 514, pero al ser un puerto reservado, es preferible personalizar esta opción con un puerto superior al 1024. Luego cargar la regla de firewall para habilitar el mismo. En otra guía hablaremos de estas opciones y vamos a profundizar en el tunning de Graylog
Guias de referencia: https://docs.graylog.org/en/3.3/pages/installation/os/centos.html https://www.itzgeek.com/post/how-to-install-graylog-on-centos-8-rhel-8/ https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ https://computingforgeeks.com/how-to-install-graylog-on-centos-rhel/