Cómo instalar Elastic Stack en Ubuntu 18.04 LTS
Elasticsearch es un motor de búsqueda de código abierto basado en Lucene, desarrollado en Java. Proporciona un motor de búsqueda de texto completo distribuido y multitante con una interfaz web HTTP Dashboard (Kibana). Los datos se consultan, se recuperan y se almacenan en un esquema de documentos JSON. Elasticsearch es un motor de búsqueda escalable que puede utilizarse para buscar todo tipo de documentos de texto, incluidos los archivos de registro. Elasticsearch es el corazón de la «pila elástica» o pila ELK.
Logstash es una herramienta de código abierto para gestionar eventos y registros. Proporciona una canalización en tiempo real para la recogida de datos. Logstash recogerá tus datos de registro, los convertirá en documentos JSON y los almacenará en Elasticsearch.
Kibana es una herramienta de visualización de datos de código abierto para Elasticsearch. Kibana proporciona una bonita interfaz web de panel de control. Te permite gestionar y visualizar los datos de Elasticsearch. No sólo es bonito, sino también potente.
En este tutorial, te mostraré cómo instalar y configurar Elastic Stack en un servidor Ubuntu 18.04 para supervisar los registros del servidor. Luego te mostraré cómo instalar y configurar ‘Elastic beats’ en un servidor Ubuntu 18.04 y en un servidor cliente CentOS 7.
Requisitos previos
- 3 Servidores
- Ubuntu 18.04 con 4GB de Ram/memoria como ‘elk-master’ – 10.0.15.10
- Ubuntu 18.04 con 512MB/1GB Ram/Memoria como ‘elk-client01’ – 10.0.15.21
- CentOS 7.5 con 512MB/1GB Ram/Memoria como ‘elk-client02’ – 10.0.15.22
- Privilegios de root
¿Qué vamos a hacer?
- Instalar Elastic Stack
- Instalar Java
- Instalar y configurar ElasticSearch
- Instalar y configurar Kibana
- Instalar y configurar Nginx como proxy inverso para Kibana
- Instalar y configurar Logstash
- Instalar y configurar Filebeat en Ubuntu 18.04
- Instalar y configurar Filebeat en CentOS 7.5
- Prueba de
Paso 1 – Instalar Elastic Stack
En este primer paso, instalaremos y configuraremos el ‘Elastic Stack’ en el servidor ‘elk-master’, así que ejecuta todos los comandos y etapas de este paso sólo en el servidor ‘elk-master’. Instalaremos y configuraremos cada uno de los componentes de la pila elástica, incluyendo Elasticsearch, Logstash shipper y Kibana Dashboard con el servidor web Nginx.
Instalar Java
Java es necesario para la implementación de la pila elástica. Elasticsearch requiere Java 8. Se recomienda utilizar el JDK 1.8 de Oracle, y nosotros instalaremos Java 8 desde un repositorio PPA.
Instala los paquetes ‘software-properties-common’ y ‘apt-transport-https’, y luego añade el repositorio PPA ‘webupd8team’ de Java. Ejecuta el comando ‘apt install’ y ‘add-apt-repository’ que aparecen a continuación.
sudo apt install software-properties-common apt-transport-https -y
sudo add-apt-repository ppa:webupd8team/java -y
Ahora instala el instalador de java8.
sudo apt install oracle-java8-installer -y
Una vez completada la instalación, comprueba la versión de java.
java -version
Java 1.8 instalada en el sistema.
A continuación, configuraremos el entorno java. Comprueba el archivo binario de java con el siguiente comando.
update-alternatives --config java
Y obtendrás el archivo binario de java en el directorio‘/usr/lib/jvm/java-8-oracle‘.
Ahora crea el archivo de perfil ‘java.sh’ en el directorio ‘profile.d’.
vim /etc/profile.d/java.sh
Pega la configuración del entorno de java a continuación.
#Set JAVA_HOME JAVA_HOME="/usr/lib/jvm/java-8-oracle" export JAVA_HOME PATH=$PATH:$JAVA_HOME export PATH
Guarda y sal.
Haz que el archivo sea ejecutable y carga el archivo de configuración.
chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh
Ahora comprueba el entorno java con el comando que aparece a continuación.
echo $JAVA_HOME
Y obtendrás que el directorio java se encuentra en el directorio‘/usr/lib/jvm/java-8-oracle‘.
Instalar Elasticsearch
Después de instalar Java, vamos a instalar el primer componente de Elastic Stack, vamos a instalar elasticsearch.
Añade la clave de la pila elástica y añade el repositorio elástico al sistema.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Ahora actualiza el repositorio e instala el paquete elasticsearch utilizando el comando que aparece a continuación.
sudo apt update
sudo apt install elasticsearch -y
Una vez completada la instalación, ve al directorio ‘/etc/elasticsearch’ y edita el archivo de configuración ‘elasticsearch.yml’.
cd /etc/elasticsearch/
vim elasticsearch.yml
Descomenta la línea ‘network.host’ y cambia el valor a ‘localhost’, y descomenta la línea ‘http.port’ para la configuración del puerto de elasticsearch.
network.host: localhost http.port: 9200
Guarda y sal.
Ahora inicia el servicio elasticsearch y habilítalo para que se inicie cada vez que el sistema arranque.
systemctl start elasticsearch
systemctl enable elasticsearch
El elasticsearch ya está en marcha, compruébalo con los comandos netstat y curl que aparecen a continuación.
netstat -plntu
curl -XGET 'localhost:9200/?pretty'
Ahora obtendrás que la versión de elasticsearch ‘6.2.4’ se está ejecutando en el puerto por defecto ‘9200’.
La instalación de elasticsearch se ha completado.
Instalar y configurar el panel de control de Kibana
El segundo componente es el Dashboard de Kibana. Instalaremos el dashboard de Kibana desde el repositorio de elasticsearch, y configuraremos el servicio de kibana para que se ejecute en la dirección localhost.
Instala el tablero de instrumentos de Kibana utilizando el comando apt que aparece a continuación.
sudo apt install kibana -y
Ahora ve al directorio ‘/etc/kibana’ y edita el archivo de configuración ‘kibana.yml’.
cd /etc/kibana/
vim kibana.yml
Descomenta las líneas ‘server.port’, ‘server.host’ y ‘elasticsearch.url’.
server.port: 5601 server.host: "localhost" elasticsearch.url: "http://localhost:9200"
Guarda y sal.
Ahora inicia el servicio de kibana y habilítalo para que se inicie siempre al arrancar el sistema.
sudo systemctl enable kibana
sudo systemctl start kibana
El panel de control de kibana ya está funcionando en la dirección «localhost» y en el puerto por defecto «5601». Compruébalo con el siguiente comando netstat.
netstat -plntu
La instalación del panel de control de Kibana se ha completado.
Instalar y configurar Nginx como proxy inverso para Kibana
En este tutorial, utilizaremos el servidor web Nginx como proxy inverso para el tablero de instrumentos de Kibana.
Instala Nginx y los paquetes ‘apache2-utils’ en el sistema.
sudo apt install nginx apache2-utils -y
Una vez completada la instalación, ve al directorio de configuración ‘/etc/nginx’ y crea un nuevo archivo de host virtual llamado ‘kibana’.
cd /etc/nginx/
vim sites-available/kibana
Pega la configuración del host virtual de Nginx a continuación.
server { listen 80; server_name elastic-stack.io; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.kibana-user; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Guarda y sal.
A continuación, crearemos un nuevo servidor web de autenticación básica para acceder al panel de control de Kibana. Crearemos la autenticación básica utilizando el comando htpasswd como se indica a continuación.
sudo htpasswd -c /etc/nginx/.kibana-user elastic
Type the elastic user password
Activa el host virtual del kibana y prueba toda la configuración de nginx.
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
Asegúrate de que no hay ningún error, ahora inicia el servicio Nginx y habilítalo para que se inicie siempre al arrancar el sistema.
systemctl enable nginx
systemctl restart nginx
La instalación y configuración de Nginx como Reverse-proxy para el dashboard de Kibana se ha completado.
Instalar y configurar Logstash
El último componente de la Pila Elástica para esta guía es el «Logstash». Instalaremos y configuraremos Logsatash para centralizar los logs del servidor desde las fuentes del cliente con filebeat, para luego filtrar y transformar todos los datos (Syslog) y transportarlos al stash (Elasticsearch).
Antes de instalar logstash, asegúrate de comprobar la versión de OpenSSL de tu servidor.
openssl version -a
Para esta guía, utilizaremos el OpenSSL ‘1.0.2o’. Si todavía utilizas la versión 1.1.2 de OpenSSL, obtendrás un error en la conexión SSL de logstash y filebeat.
Instala logstash con el comando apt que aparece a continuación.
sudo apt install logstash -y
Una vez completada la instalación, generaremos la clave del certificado SSL para asegurar la transferencia de datos de registro desde el cliente filebeat al servidor logstash.
Edita el archivo ‘/etc/hosts’ utilizando vim.
vim /etc/hosts
Añade la siguiente configuración.
10.0.15.10 elk-master elk-master
Guarda y sal.
Ahora crea un nuevo directorio SSL bajo el directorio de configuración de logstash ‘/etc/logstash’ y ve a ese directorio.
mkdir -p /etc/logstash/ssl
cd /etc/logstash/
Genera el certificado SSL para Logstash utilizando el comando openssl como se indica a continuación.
openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt
Los archivos del certificado SSL para Logstash se han creado en el directorio ‘/etc/logstash/ssl’.
A continuación, crearemos nuevos archivos de configuración para logstash. Crearemos un archivo de configuración ‘filebeat-input.conf’ como archivo de entrada de filebeat, ‘syslog-filter.conf’ para el procesamiento de syslog, y luego un archivo ‘output-elasticsearch.conf’ para definir la salida de Elasticsearch.
Ve al directorio de configuración de logstash y crea los nuevos archivos de configuración ‘filebeat-input.conf’ en el directorio ‘conf.d’.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Pega allí la siguiente configuración.
input { beats { port => 5443 type => syslog ssl => true ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt" ssl_key => "/etc/logstash/ssl/logstash-forwarder.key" } }
Guarda y sal.
Para el procesamiento de datos de registro syslog, estamos utilizando el plugin de filtro llamado ‘grok’ para analizar los archivos syslog.
Crea una nueva configuración ‘syslog-filter.conf’.
vim conf.d/syslog-filter.conf
Pega allí la siguiente configuración.
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Guarda y sal.
Y para la salida de elasticsearch, crearemos el archivo de configuración llamado ‘output-elasticsearch.conf’.
vim conf.d/output-elasticsearch.conf
Pega allí la siguiente configuración.
output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
Guarda y sal.
Una vez hecho esto, inicia el servicio logstash y habilítalo para que se inicie siempre al arrancar el sistema.
sudo systemctl enable logstash
sudo systemctl start logstash
Comprueba el servicio logstash utilizando los comandos netstat y systemctl que aparecen a continuación.
netstat -plntu
systemctl status logstash
Y el servicio logstash ya está en marcha. Se ejecuta en la dirección IP pública con el puerto ‘5443’.
La instalación de Elastic Stack se ha completado.
Paso 2 – Instalar y configurar Filebeat en Ubuntu 18.04
En este paso, configuraremos el cliente ‘elk-client01’ de Ubuntu 18.04 instalando en él el cargador de datos de Elastic Beats ‘Filebeat’.
Antes de instalar el filebeat en el sistema, necesitamos editar el ‘/etc/hosts’ y descargar el archivo de certificado logstash ‘logstash-forwarder.crt’ al servidor ‘elk-client01’.
Edita el archivo ‘/etc/hosts’ con el editor vim.
vim /etc/hosts
Pega allí la siguiente configuración.
10.0.15.10 elk-master elk-master
Guarda y sal.
Copia el archivo del certificado logstash ‘logstash-forwarder.crt’ utilizando el comando scp.
scp root@elk-master:/etc/logstash/ssl/logstash-forwarder.crt .
A continuación, instala el Elastic Beats ‘Filebeat’ añadiendo la clave elástica y añade el repositorio elástico.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Actualiza el repositorio e instala el paquete ‘filebeat’ utilizando el comando apt que aparece a continuación.
sudo apt update
sudo apt install filebeat -y
Una vez completada la instalación, ve al directorio ‘/etc/filebeat’ y edita el archivo de configuración ‘filebeat.yml’.
cd /etc/filebeat/
vim filebeat.yml
Ahora activa los prospectores de filebeat cambiando el valor de la línea ‘enabled’ a ‘true’.
enabled: true
Define los archivos de registro del sistema que se enviarán al servidor logstash. Para esta guía, añadiremos el archivo de registro ssh ‘auth.log’ y el archivo syslog.
paths: - /var/log/auth.log - /var/log/syslog
Configura la salida a logstash comentando la salida por defecto ‘elasticsearch’ y descomenta la línea de salida de logstash como se indica a continuación.
output.logstash: # The Logstash hosts hosts: ["elk-master:5443"] ssl.certificate_authorities: ["/etc/filebeat/logstash-forwarder.crt"]
Guarda y sal.
A continuación, tenemos que editar el archivo ‘filebeat.reference.yml’ para habilitar los módulos de filebeat, y habilitaremos el módulo ‘syslog’.
vim filebeat.reference.yml
Habilita el módulo de sistema syslog para filebeat como se indica a continuación.
- module: system # Syslog syslog: enabled: true
Guarda y sal.
Copia el archivo de certificado de logstash ‘logstash-forwarder.crt’ al directorio ‘/etc/filebeat’.
cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt
La instalación y configuración de Filebeat se ha completado. Ahora inicia el servicio filebeat y habilítalo para que se inicie cada vez al arrancar el sistema.
systemctl start filebeat
systemctl enable filebeat
Comprueba el servicio filebeat con los siguientes comandos.
systemctl status filebeat
tail -f /var/log/filebeat/filebeat
Los cargadores de filebeat están funcionando en el servidor Ubuntu 18.04.
Paso 3 – Instalar y configurar Filebeat en CentOS 7.5
En este paso, configuraremos el cliente CentOS 7.5 ‘elk-client02’ instalando en él los cargadores de datos de Elastic Beats ‘Filebeat’.
Antes de instalar el Filebeat en el sistema, tenemos que editar el archivo ‘/etc/hosts’ y descargar el archivo del certificado logstash ‘logstash-forwarder.crt’ al servidor ‘elk-client02’.
Edita el archivo ‘/etc/hosts’ utilizando vim.
vim /etc/hosts
Pega la configuración de abajo.
10.0.15.10 elk-master elk-master
Guarda y sal.
Copia el archivo del certificado logstash ‘logstash-forwarder.crt’ utilizando el comando scp.
scp root@elk-master:/etc/logstash/ssl/logstash-forwarder.crt .
A continuación, instala el Elastic Beats ‘Filebeat’ añadiendo la clave elástica y añade el repositorio elástico.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat <<EOF > /etc/yum.repos.d/elastic.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
Instala filebeat utilizando el comando yum que aparece a continuación.
yum install filebeat -y
Una vez completada la instalación, ve al directorio ‘/etc/filebeat’ y edita el archivo de configuración ‘filebeat.yml’.
cd /etc/filebeat/
vim filebeat.yml
Ahora activa los prospectores de filebeat cambiando el valor de la línea ‘enabled’ a ‘true’.
enabled: true
Define los archivos de registro del sistema que se enviarán al servidor logstash. Para esta guía, añadiremos el archivo de registro ssh ‘auth.log’ y el archivo syslog.
paths: - /var/log/secure - /var/log/messages
Configura la salida a logstash comentando la salida por defecto ‘elasticsearch’ y descomenta la línea de salida de logstash como se indica a continuación.
output.logstash: # The Logstash hosts hosts: ["elk-master:5443"] ssl.certificate_authorities: ["/etc/filebeat/logstash-forwarder.crt"]
Guarda y sal.
A continuación, tenemos que editar el archivo ‘filebeat.reference.yml’ para habilitar los módulos de filebeat, y habilitaremos el módulo ‘syslog’.
vim filebeat.reference.yml
Habilita el módulo de sistema syslog para filebeat como se indica a continuación.
- module: system # Syslog syslog: enabled: true
Guarda y sal.
Copia el archivo de certificado de logstash ‘logstash-forwarder.crt’ al directorio ‘/etc/filebeat’.
cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt
La instalación y configuración de Filebeat se ha completado. Ahora inicia el servicio filebeat y añádelo al tiempo de arranque.
systemctl start filebeat
systemctl enable filebeat
Comprueba el servicio filebeat con los siguientes comandos.
systemctl status filebeat
tail -f /var/log/filebeat/filebeat
Los cargadores de filebeat están funcionando en el servidor CentOS 7.5.
Paso 4 – Prueba
Abre tu navegador web y escribe el nombre de dominio de elastic stack, el mío es: ‘elastic-stack.io’.
Se te pedirá el nombre de usuario y la contraseña de la autenticación básica del panel de control de Kibana.
Escribe el nombre de usuario ‘elastic’ con tu contraseña.
Ahora obtendrás el bonito panel de control de Kibana, haz clic en el botón «Configurar patrones de índice» de la derecha.
Define el patrón de índice ‘filebeat-*’ y haz clic en el botón ‘Paso siguiente’.
Para el ‘nombre del campo de filtro de tiempo’, elige el ‘@timestamp’ y haz clic en ‘Crear patrón de índice’.
Y el patrón de índice filebeat ha sido creado.
A continuación, intentaremos obtener la información del registro del inicio de sesión SSH fallido en cada uno de los servidores cliente ‘elk-client01’ del sistema Ubuntu y ‘elk-client02’ del sistema CentOS.
Dentro del panel de control de Kibana, haz clic en el menú «Descubrir» para obtener todos los registros del servidor.
Establece el ‘beat.hostname’ en el servidor ‘elk-client01’, el ‘source’ es el archivo ‘/var/log/auth.log’, y obtendrás el resultado que se muestra a continuación.
Y a continuación se muestran los detalles del registro de muestra de la contraseña fallida de SSH del archivo ‘auth.log’.
Para el servidor CentOS ‘elk-client02’, establece el ‘beat.hostname’ en el servidor ‘elk-client02’, el ‘source’ es el archivo ‘/var/log/secure’, y obtendrás el resultado que se muestra a continuación.
Y a continuación se muestran los detalles del registro de muestra de la contraseña fallida de SSH del archivo ‘secure’.
La instalación y configuración de Elastic Stack y de Elastic Beat ‘Filebeat’ se ha completado con éxito.