En este módulo, aprenderemos sobre las prácticas básicas de seguridad que se deben implementar al configurar NGINX. La seguridad es un aspecto crucial para cualquier servidor web, y NGINX no es una excepción. A continuación, desglosaremos los conceptos clave y proporcionaremos ejemplos prácticos para asegurar tu servidor NGINX.
Conceptos Clave
- Actualización Regular de NGINX: Mantener NGINX actualizado para protegerse contra vulnerabilidades conocidas.
- Configuración de Permisos de Archivos: Asegurar que los archivos de configuración y los directorios tengan los permisos adecuados.
- Deshabilitar Versiones Inseguras de Protocolos: Deshabilitar versiones antiguas e inseguras de protocolos como SSL y TLS.
- Configuración de Cabeceras de Seguridad: Implementar cabeceras HTTP para mejorar la seguridad.
- Limitación de Acceso: Restringir el acceso a ciertas partes del sitio web o a la configuración de NGINX.
- Protección contra Ataques de Fuerza Bruta: Implementar medidas para prevenir ataques de fuerza bruta.
- Actualización Regular de NGINX
Es fundamental mantener NGINX actualizado para protegerse contra vulnerabilidades conocidas. Puedes actualizar NGINX utilizando el gestor de paquetes de tu sistema operativo.
Ejemplo en Ubuntu:
- Configuración de Permisos de Archivos
Asegúrate de que los archivos de configuración y los directorios tengan los permisos adecuados para evitar accesos no autorizados.
Ejemplo:
- Deshabilitar Versiones Inseguras de Protocolos
Deshabilita versiones antiguas e inseguras de SSL y TLS en tu configuración de NGINX.
Ejemplo de Configuración:
server { listen 443 ssl; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'HIGH:!aNULL:!MD5'; ... }
- Configuración de Cabeceras de Seguridad
Implementa cabeceras HTTP para mejorar la seguridad de tu sitio web.
Ejemplo de Configuración:
server { ... add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; ... }
- Limitación de Acceso
Restringe el acceso a ciertas partes del sitio web o a la configuración de NGINX.
Ejemplo de Configuración:
- Protección contra Ataques de Fuerza Bruta
Implementa medidas para prevenir ataques de fuerza bruta, como la limitación de la tasa de peticiones.
Ejemplo de Configuración:
http { ... limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location /login { limit_req zone=one burst=5 nodelay; } ... } }
Ejercicio Práctico
Ejercicio 1: Configuración de Seguridad Básica
- Objetivo: Configurar un servidor NGINX con las prácticas básicas de seguridad mencionadas.
- Instrucciones:
- Actualiza NGINX a la última versión.
- Configura los permisos de los archivos de configuración.
- Deshabilita versiones inseguras de SSL/TLS.
- Añade cabeceras de seguridad.
- Restringe el acceso a una ubicación específica.
- Implementa la limitación de la tasa de peticiones.
Solución:
# Actualización de NGINX sudo apt update sudo apt upgrade nginx # Configuración de permisos sudo chown -R root:root /etc/nginx sudo chmod -R 700 /etc/nginx # Configuración de NGINX server { listen 443 ssl; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'HIGH:!aNULL:!MD5'; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location /admin { allow 192.168.1.0/24; deny all; } limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; location /login { limit_req zone=one burst=5 nodelay; } }
Conclusión
En esta sección, hemos cubierto las prácticas básicas de seguridad para NGINX, incluyendo la actualización regular, la configuración de permisos, la deshabilitación de versiones inseguras de protocolos, la configuración de cabeceras de seguridad, la limitación de acceso y la protección contra ataques de fuerza bruta. Implementar estas prácticas ayudará a asegurar tu servidor NGINX y protegerlo contra amenazas comunes. En el próximo módulo, exploraremos cómo NGINX puede servir contenido estático de manera eficiente.
Curso de NGINX
Módulo 1: Introducción a NGINX
Módulo 2: NGINX como Servidor Web
- Sirviendo Contenido Estático
- Listados de Directorios
- Páginas de Error Personalizadas
- Registro y Formatos de Registro
Módulo 3: NGINX como Proxy Inverso
- Introducción al Proxy Inverso
- Configurando un Proxy Inverso
- Balanceo de Carga
- Verificaciones de Salud