Esta guía detalla el proceso para instalar y configurar Elasticsearch, Logstash y Kibana en un servidor basado en Debian o Ubuntu.
Requisitos Previos
- Un servidor Debian/Ubuntu actualizado con acceso sudo.
- Al menos 4 GB de RAM para un rendimiento básico.
- Configuración inicial del servidor, incluyendo la instalación de
curl
,wget
yufw
:sudo apt update && sudo apt install -y curl wget apt-transport-https
- Instalar Java, que es necesario para Elasticsearch y Logstash:
sudo apt install -y openjdk-11-jdk
Puedes verificar la versión instalada con:
java -version
Paso 1: Instalar Elasticsearch
Elasticsearch es un motor de búsqueda y análisis que se encargará de almacenar y consultar los registros.
- Agregar la clave GPG de Elasticsearch:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- Agregar el repositorio:
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
- Actualizar los repositorios e instalar Elasticsearch:
sudo apt update sudo
apt install -y elasticsearch
- Configurar Elasticsearch:
- Abre el archivo de configuración:
sudo nano /etc/elasticsearch/elasticsearch.yml
- Configura las siguientes opciones básicas:
network.host: localhost
cluster.name: my-cluster
node.name: node-1
- Abre el archivo de configuración:
- Habilitar e iniciar Elasticsearch:
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
- Probar Elasticsearch:
Ejecuta este comando para verificar que está funcionando:curl -X GET 'http://localhost:9200'
Deberías ver una respuesta en formato JSON con información del nodo y la versión.
Paso 2: Instalar Kibana
Kibana proporciona una interfaz gráfica para visualizar y analizar los datos almacenados en Elasticsearch.
- Instalar Kibana: Usa el mismo repositorio de Elasticsearch:
sudo apt install -y kibana
- Configurar Kibana:
- Edita el archivo de configuración:
sudo nano /etc/kibana/kibana.yml
- Establece el host del servidor como
localhost
:server.host: "localhost"
- Edita el archivo de configuración:
- Habilitar e iniciar Kibana:
sudo systemctl enable kibana
sudo systemctl start kibana
- Acceder a Kibana:
Abre un navegador y navega ahttp://<IP-del-servidor>:5601
.
Paso 3: Instalar Logstash
Logstash se utiliza para procesar y transformar los datos antes de enviarlos a Elasticsearch.
- Instalar Logstash:
sudo apt install -y logstash
- Configurar Logstash:
- Crea un archivo de configuración en
/etc/logstash/conf.d/logstash.conf
:sudo nano /etc/logstash/conf.d/logstash.conf
- Añade un pipeline básico:
input
{
beats {
port => 5044
}
}
filter {}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
}
- Crea un archivo de configuración en
- Habilitar e iniciar Logstash:
sudo systemctl enable logstash
sudo systemctl start logstash
Paso 4: Instalar Filebeat
Filebeat recopila los registros desde los servidores cliente y los envía a Logstash.
- Instalar Filebeat en el servidor cliente:
sudo apt install -y filebeat
- Configurar Filebeat para enviar registros a Logstash:
- Edita el archivo
/etc/filebeat/filebeat.yml
:output.logstash:
hosts: ["<IP-Logstash>:5044"]
- Habilita el módulo de logs del sistema:
sudo filebeat modules enable system
- Edita el archivo
- Probar Filebeat:
sudo filebeat test output
- Habilitar e iniciar Filebeat:
sudo systemctl enable filebeat
sudo systemctl start filebeat
Paso 5: Configurar el Firewall
Permite el tráfico necesario para los servicios del ELK Stack:
sudo ufw allow 5601 # Kibana
sudo ufw allow 9200 # Elasticsearch
sudo ufw allow 5044 # Logstash
sudo ufw enable
Paso 6: Validar la Configuración
- Enviar datos de prueba a Elasticsearch:
curl -X POST "localhost:9200/logs/_doc/" -H 'Content-Type: application/json' -d'
{
"message": "Prueba de Elasticsearch",
"timestamp": "2024-11-28T00:00:00"
}'
- Ver los registros en Kibana:
- Abre Kibana, ve a la pestaña "Discover" y selecciona el índice creado (
logs-*
).
- Abre Kibana, ve a la pestaña "Discover" y selecciona el índice creado (
Paso 7: Configurar Nginx como proxy inverso para Kibana
1. Instalar Nginx
Primero, asegúrate de que Nginx esté instalado:
sudo apt update
sudo apt install -y nginx
2. Crear un archivo de usuarios para autenticación básica
- Genera un archivo con credenciales de usuario para proteger el acceso a Kibana:
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
- Sustituye
kibanaadmin
por el nombre de usuario deseado. - Cuando se te solicite, ingresa la contraseña para el usuario. Esta será cifrada automáticamente.
- Sustituye
- Verifica el contenido del archivo generado:
cat /etc/nginx/htpasswd.users
3. Configurar un bloque de servidor en Nginx
- Crea un archivo de configuración para tu dominio o subdominio en Nginx:
sudo nano /etc/nginx/sites-available/kibana
- Añade la configuración siguiente al archivo:
server {
listen 80;
server_name example.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
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;
}
}
- Sustituye
example.com
por tu dominio o dirección IP.
- Sustituye
- Enlaza este archivo de configuración a
sites-enabled
:sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
- Verifica la configuración de Nginx para asegurarte de que no haya errores:
sudo nginx -t
- Reinicia Nginx para aplicar los cambios:
sudo systemctl restart nginx
4. Probar la configuración
- Abre tu navegador y navega a
http://example.com
(o el dominio configurado). - Deberías ver un cuadro de autenticación solicitando las credenciales.
- Ingresa el nombre de usuario y contraseña configurados anteriormente.
5. Opcional: Configurar HTTPS con Let’s Encrypt
Para mayor seguridad, puedes configurar HTTPS usando Let's Encrypt:
- Instala el cliente Certbot para Nginx:
sudo apt install -y certbot python3-certbot-nginx
- Genera el certificado SSL:
sudo certbot --nginx -d example.com
- Renueva automáticamente los certificados:
sudo crontab -e
Añade esta línea para ejecutar la renovación automáticamente:0 3 * * * certbot renew --quiet
Conclusión
Ahora tienes un entorno seguro donde Kibana está protegido por una capa de autenticación y redirigido a través de Nginx. Además, puedes usar HTTPS para cifrar el tráfico hacia tu servidor. Esta configuración es ideal para entornos de producción donde se manejan datos sensibles.