EC2 - IaaS → Conectarse directamente a la máquina
Security group → Firewall
Amazon Linux → Viene de Red Hat/CentOS, usa yum
Ubuntu → Viene de debian, usa el comando apt
Conectarse a la instancia:
sudo ssh -i "<archivo.pem>" ec2-user@<IP_Pública>
sudo yum update
sudo yum install docker -y
#USER = ec2-user
sudo usermod -aG docker <user>
sudo systemctl enable docker.service
sudo systemctl start docker.service
# REINICIAR SESION PARA USAR DOCKER SIN SUDO
# SI HACEMOS UN DOCKER CON NGINX Y MAPEAMOS PUERTOS 80:80, AL ENTRAR A LA IP PUBLICA DE LA INSTANCIA AWS, VEREMOS EL SERVIDOR
# INSTALAMOS PIP
sudo yum install python3-pip
# INSTALAMOS DOCKER COMPOSE
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
# MODIFICAR ARCHIVOS EN /etc/sysctl.conf Y EN /etc/sysctl.d/99-sysctl.conf
nano /etc/sysctl.conf
## AÑADIR LO SIGUIENTE AL FINAL:
vm.max_map_count=262145
## LUEGO EJECUTAR EL COMANDO SIGUIENTE PARA QUE SE CAMBIE EN TIEMPO REAL
sysctl -w vm.max_map_count=262145
docker pull sebp/elk:7.16.3
# CON DOCKER RUN
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name <nombre> -d --hostname <nombre> sebp/elk:7.16.3
# Elasticsearch es el puerto 9200 // Storage, donde se guardan los datos
# Logstach es el puerto 5044 // Procesa los datos
# Kibana es el puerto 5601 // Dashboard, panel de administración
# CON DOCKER COMPOSE
nano docker-compose.yml
## EN EL ARCHIVO
services:
elk:
image: "sebp/elk:7.16.3"
ports:
- "9200:9200" # Elasticsearch es el puerto 9200 // Storage, donde se guardan los datos
- "5044:5044" # Logstach es el puerto 5044 // Procesa los datos
- "5601:5601" # Kibana es el puerto 5601 // Dashboard, panel de administración
## FUERA DEL ARCHIVO, COMPROBAR CUAL FUNCIONA
docker-compose . up --build -d
# docker compose up elk
# Para encender el contenedor
docker update --restart=always <nombre_contenedor>
Descargamos el zip que contiene el Dockerfile para la generación de nuestro contenedor en el siguiente enlace:
Extraemos y con dirigimos a la carpeta nginx-filebeat.
En esta modificaremos el archivo filebeat.yml para que sea como el siguiente:
output:
logstash:
enabled: true
hosts:
- <IP SOC ELK>:5044
timeout: 15
#ssl:
# certificate_authorities:
# - /etc/pki/tls/certs/logstash-beats.crt
filebeat:
inputs:
-
paths:
- /var/log/syslog
- /var/log/auth.log
document_type: syslog
-
paths:
- "/var/log/nginx/*.log"
fields_under_root: true
fields:
type: nginx-access
seccomp:
default_action: allow
Ahora, para ejecutar el Dockerfile haremos los siguientes comandos:
cd /path/to/nginx-filebeat
docker build . -t <NOMBRE-IMAGEN>
docker run -p 80:80 -it -d --name <CONTENEDOR> <NOMBRE-IMAGEN>
# DENTRO DEL CONTENEDOR
service filebeat start
En la máquina de ELK deberemos modificar el archivo /etc/logstash/conf.d/02-beats-inputs.conf si no vamos a usar ssl:
# Este archivo es el que va en el contenedor del SIEM
# en la carpeta /etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
ssl => false # true si queremos conexión SSL
ssl_certificate => "/etc/pki/tls/certs/logstash-beats.crt"
ssl_key => "/etc/pki/tls/private/logstash-beats.key"
}
}
# SALIMOS DEL EDITOR DE TEXTO
service logstash restart
Instalar los beats:
# Descargamos metricbeat
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.16.3-amd64.deb
# Descargamos heartbeat
curl -L -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-7.16.3-amd64.deb
# Descargamos packetbeat
curl -L -O https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-7.16.3-amd64.deb
# Instalamos todos los packetes
dpkg -i <archivo.deb>
# Configuramos el archivo de configuración en /etc/<servicio>/<servicio>.yml
Finalmente iniciaremos los servicios con los siguientes comandos:
service filebeat restart
service heartbeat-elastic restart
service metricbeat restart
service packetbeat restart
En caso de querer usar SSL, descomentar todo referido a ello.
AWS → EC2, Firewall, Elastic IP
SSH + RSA
EC2 — Amazon Linux → yum
SIEM → System Information and Event Management, es decir → herramienta para monitorizar la infraestructura
SOC → Security Operation Center, es decir, Centro de operaciones de seguridad → es el equipo encargado de monitorizar y diseñar la herramienta SIEM para la infraestructura
Syslog-ng → Es un servicio para el envío y recepción de informes o logs
Docker → Herramienta capaz de crear una infraestructura aislada | Tiene contenedores, imágenes, volúmenes y redes
Dockerfile → Fichero para crear una imagen personalizada
Docker compose → Fichero para generar una infraestructura en docker
AWS → Amazon Web Service, servicio de amazon de alquiler de servidores en la nube. Hay un servicio fundamental como EC2, RDS y S3.
ELK → Elasticsearch (puerto 9200), logstash (puerto 5044) y kibana (puerto 5601)
Elasticsearch → Era el encargado de guardar e indexar los datos (BD)
Logstash → recibe los datos y los procesa, enviandolos a elasticsearch
Kibana → Es la interfaz del usuario, con herramientas como dashboard y discover
Beats → herramientas o servicios que enviarán datos a logstash que nos dará información de cada cliente de la infraestructura
Filebeat → Envía archivos, con ruta de configuración /etc/filebeat/filebeat.yml
Heartbeat → envía pulsos o pings para saber que la máquina está activa. Ruta /etc/heartbeat/heartbeat.yml
Metricbeat → envía metricas de uso como uso de CPU, disco… Ruta similar
Packetbeat → envía información sobre la red. Ruta similar
Winlogbeat → envía eventos de windows.
Auditbeat → envía elementos de auditoría.