Fase 3: Implementació de la Solució
Introducció
La Fase 3 és el cor del projecte: la implementació real de la solució dissenyada a la Fase 2. L'entorn de producció és Docker (tal com ho seria en un laboratori professional), però el disseny i la documentació reflectiran com seria en un entorn real.
La implementació ha de ser funcional, demostrable i documentada.
Lliurables de la Fase 3
L3.1 - Repositori de codi de la infraestructura
Tot el codi d'infraestructura (Docker Compose, fitxers de configuració, scripts) s'ha de guardar en un repositori Git:
repositori-projecte-NOMCOGNOM/
├── README.md
├── docker-compose.yml # Orquestació principal
├── .env.example # Variables d'entorn (sense valors reals)
├── .gitignore # Excloure .env, secrets
├── docs/
│ ├── arquitectura.md
│ └── runbook.md # Manual d'operació
├── siem/
│ ├── wazuh/
│ │ ├── docker-compose.yml
│ │ └── config/
│ └── grafana/
│ └── dashboards/
├── firewall/
│ ├── nftables.conf
│ └── suricata.rules
├── vpn/
│ └── wg0.conf.template
└── scripts/
├── setup.sh # Script d'instal·lació inicial
├── backup.sh # Script de backup
└── health-check.sh # Verificació de l'estat
L3.2 - Implementació del SIEM
# siem/docker-compose.yml - Stack Wazuh complet
version: '3.8'
services:
# Wazuh Manager - cervell del SIEM
wazuh-manager:
image: wazuh/wazuh-manager:4.8.0
container_name: wazuh-manager-NOMCOGNOM
hostname: wazuh-manager
restart: always
ports:
- "1514:1514" # Agent communication (UDP)
- "1515:1515" # Agent enrollment
- "55000:55000" # API REST
volumes:
- wazuh_data:/var/ossec/data
- wazuh_logs:/var/ossec/logs
- ./config/wazuh_manager.conf:/var/ossec/etc/ossec.conf
environment:
- INDEXER_URL=https://wazuh-indexer:9200
- INDEXER_USERNAME=admin
- INDEXER_PASSWORD=${WAZUH_INDEXER_PASSWORD}
# OpenSearch (substitut d'Elasticsearch)
wazuh-indexer:
image: wazuh/wazuh-indexer:4.8.0
container_name: wazuh-indexer-NOMCOGNOM
hostname: wazuh-indexer
restart: always
ports:
- "9200:9200"
volumes:
- wazuh_indexer_data:/var/lib/wazuh-indexer
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
# Dashboard (interfície web)
wazuh-dashboard:
image: wazuh/wazuh-dashboard:4.8.0
container_name: wazuh-dashboard-NOMCOGNOM
hostname: wazuh-dashboard
restart: always
ports:
- "443:5601"
depends_on:
- wazuh-indexer
- wazuh-manager
# Agent simulant un servidor Linux monitorat
monitored-server:
image: ubuntu:22.04
container_name: monitored-server-NOMCOGNOM
hostname: servidor-monitorat
command: >
bash -c "
apt-get update -qq && apt-get install -y -qq wget &&
wget -q https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.8.0-1_amd64.deb &&
WAZUH_MANAGER='wazuh-manager' WAZUH_REGISTRATION_PASSWORD='agent-password' \
dpkg -i wazuh-agent_4.8.0-1_amd64.deb &&
service wazuh-agent start &&
tail -f /var/ossec/logs/ossec.log
"
depends_on:
- wazuh-manager
volumes:
wazuh_data:
wazuh_logs:
wazuh_indexer_data:
L3.3 - Regles d'alertes personalitzades
<!-- config/custom-rules.xml - Regles de detecció personalitzades -->
<group name="custom_rules_NOMCOGNOM">
<!-- Alerta per a múltiples fallades de login -->
<rule id="100001" level="10" frequency="5" timeframe="120">
<if_matched_sid>5503</if_matched_sid>
<description>Possible atac de força bruta SSH</description>
<group>authentication_failures,</group>
</rule>
<!-- Alerta per a modificació de fitxers crítics -->
<rule id="100002" level="12">
<if_sid>550</if_sid>
<field name="file">/etc/passwd|/etc/shadow|/etc/sudoers</field>
<description>Modificació de fitxer crític del sistema</description>
<group>rootcheck,</group>
</rule>
<!-- Alerta per a comandes sospitoses -->
<rule id="100003" level="14">
<if_sid>5715</if_sid>
<match>wget|curl|nc|netcat|python -c|perl -e|bash -i</match>
<description>Possible shell reversa o descàrrega de malware</description>
<group>attack,</group>
</rule>
</group>
L3.4 - Dashboard de seguretat
# Iniciar el stack
docker compose -f siem/docker-compose.yml up -d
# Esperar que el sistema iniciï (~3 minuts)
sleep 180
# Accedir al dashboard
echo "Wazuh Dashboard: https://localhost:443"
echo "Usuari: admin / Contrasenya: ${WAZUH_INDEXER_PASSWORD}"
# Verificar que l'agent s'ha registrat
docker exec wazuh-manager-NOMCOGNOM \
/var/ossec/bin/agent_control -la
# Generar events de prova
docker exec monitored-server-NOMCOGNOM bash -c "
# Simular intents de login fallits
for i in {1..10}; do
ssh wrong_user@localhost 2>/dev/null || true
done
# Simular modificació de fitxer crític (prova)
echo 'test' >> /tmp/test-critical.txt
"
# Verificar les alertes al dashboard
echo "Verificar alertes a https://localhost:443"
L3.5 - Documentació operacional (Runbook)
# Runbook - Operació del Sistema de Seguretat
**Organització**: [Nom de l'organització fictícia]
**Versió**: 1.0
**Autor**: NOMCOGNOM
## Tasques d'operació diàries
### Revisió d'alertes (SIEM)
1. Accedir a https://wazuh-dashboard
2. Navegar a Security Events → Last 24 hours
3. Filtrar per Level >= 12 (alertes crítiques)
4. Per cada alerta crítica:
- Verificar si és un fals positiu
- Si no ho és: iniciar procediment de resposta a incidents
5. Documentar en el registre diari d'alertes
### Verificació del backup
1. Connectar-se al servidor de backup
2. Executar: `./scripts/backup.sh --verify`
3. Verificar que el hash del backup coincideix
4. Documentar en el registre de backups
## Procediments d'escalada
### Alerta crítica (Level 14-15 a Wazuh)
1. Notificar immediatament al responsable de seguretat
2. Preservar logs (no reiniciar sistemes)
3. Activar el playbook corresponent al tipus d'incident
4. Notificar al client si hi ha dades personals afectades (RGPD 72h)
### Fallada del SIEM
1. Verificar l'estat: `docker compose ps`
2. Si el manager ha caigut: `docker compose restart wazuh-manager`
3. Si el indexer ha caigut: (risc de pèrdua de dades) → escalar
4. Documentar la finestra de temps sense monitoratge
Demostració en Viu
La Fase 3 inclou una demostració en viu de 20 minuts davant del grup:
- Mostrar l'arquitectura Docker funcionant (
docker compose ps) - Demostrar una alerta en temps real (simular un atac i veure-ho al dashboard)
- Mostrar el runbook i explicar un procediment d'operació
- Respondre preguntes dels companys
Criteris d'avaluació
- Tots els components del disseny de la Fase 2 estan implementats?
- L'entorn funciona sense errors?
- El codi és net, documentat i reproduïble?
- La demostració és clara i fluida?
- El runbook és complet i operacional?
Nom de l'arxiu del repositori: projecte-NOMCOGNOM (a GitHub o similar)
Data d'entrega: [Indicada pel professor]