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

  1. Actualización Regular de NGINX: Mantener NGINX actualizado para protegerse contra vulnerabilidades conocidas.
  2. Configuración de Permisos de Archivos: Asegurar que los archivos de configuración y los directorios tengan los permisos adecuados.
  3. Deshabilitar Versiones Inseguras de Protocolos: Deshabilitar versiones antiguas e inseguras de protocolos como SSL y TLS.
  4. Configuración de Cabeceras de Seguridad: Implementar cabeceras HTTP para mejorar la seguridad.
  5. Limitación de Acceso: Restringir el acceso a ciertas partes del sitio web o a la configuración de NGINX.
  6. Protección contra Ataques de Fuerza Bruta: Implementar medidas para prevenir ataques de fuerza bruta.

  1. 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:

sudo apt update
sudo apt upgrade nginx

  1. 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:

sudo chown -R root:root /etc/nginx
sudo chmod -R 700 /etc/nginx

  1. 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';
    ...
}

  1. 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;
    ...
}

  1. Limitación de Acceso

Restringe el acceso a ciertas partes del sitio web o a la configuración de NGINX.

Ejemplo de Configuración:

server {
    ...
    location /admin {
        allow 192.168.1.0/24;
        deny all;
    }
    ...
}

  1. 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

  1. Objetivo: Configurar un servidor NGINX con las prácticas básicas de seguridad mencionadas.
  2. 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.

© Copyright 2024. Todos los derechos reservados