# AWS

### Índice <a href="#id-6e07265a-2b4d-44f9-80eb-66ef80014e9b" id="id-6e07265a-2b4d-44f9-80eb-66ef80014e9b"></a>

***

***

* 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>
```

<details>

<summary>Docker en AWS con Amazon Linux</summary>

```
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>
```

</details>

<details>

<summary>Montar el cliente nginx con los beats</summary>

Descargamos el zip que contiene el Dockerfile para la generación de nuestro contenedor en el siguiente enlace:

<https://github.com/spujadas/elk-docker/releases/tag/7.16.3>

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
```

#### BIEN, SI QUEREMOS MÁS BEATS, DEBEREMOS HACER LO SIGUIENTE EN EL CLIENTE: <a href="#id-8a6b7c7d-e761-4661-a27a-4a7b6c56a8c4" id="id-8a6b7c7d-e761-4661-a27a-4a7b6c56a8c4"></a>

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.

</details>

<details>

<summary>Aprendido, definiciones</summary>

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.

</details>
