Resumen del Incidente

Durante el despliegue del servidor web, me enfrenté a un fallo crítico: el servidor rechazaba las conexiones. Este documento detalla mi proceso desde detecte el fallo y lo arreglé.

🚩 Incidente

Tras el despliegue inicial del rol de servidor web, he detectado que el servidor rechazaba las conexiones en el puerto 80, a pesar de que el servicio Nginx figuraba como activo y el firewall permitía el tráfico entrante.

🕵️ Análisis de Causa Raíz (RCA)

Investigué la configuración, he identificado que la aplicación del principio de “Reducción de la Superficie de Ataque” fue incompleta. Al eliminar el sitio default de Nginx para mejorar la seguridad, el servicio se quedó sin ninguna directiva listen 80. Nginx estaba funcionando, pero no tenía instrucciones para aceptar peticiones en ningún puerto específico de la capa de aplicación.

🛡️ Solución Aplicada

Para resolver esto, he diseñado e implementado un sitio endurecido desde cero:

  1. He creado una plantilla de la configuración del servidor web (roles/webserver/templates/hardened_site.conf.j2) para que se aplique en el servidor Nginx y escuche explícitamente en el puerto 80.

  2. He vinculado este sitio con mis políticas de seguridad globales (security_hardening.conf) mediante la directiva include.

server {
    listen 80;
    server_name localhost;
 
    root /var/www/html;
    index index.html;
 
    location / {
        try_files $uri $uri/ =404;
    }
 
    # Integración con mis cabeceras de seguridad globales
    include /etc/nginx/conf.d/security_hardening.conf;
}
  1. He automatizado la creación de enlaces simbólicos en sites-enabled, siguiendo el estándar de administración de sistemas Linux para asegurar una configuración limpia, modular y auditable.
- name: "NGINX: Activar el sitio"
  file:
    src: /etc/nginx/sites-available/hardened_site
    dest: /etc/nginx/sites-enabled/hardened_site
    state: link
  notify: restart nginx