Saltar al contenido
Linux 2024-12-28 9 min de lectura

Implementación de un Reverse Proxy con Nginx para Ocultar la IP del Servidor

En un entorno donde la seguridad y la resiliencia frente a ataques son prioritarias, un **reverse proxy** es una de las piezas de infraestructura con mayor impacto y menor complejidad de implementar. Actúa como intermediario entre tus usuarios y tu servidor backend real, ocultando su dirección IP, filtrando tráfico malicioso antes de que llegue a tu aplicación, y habilitando funcionalidades como balanceo de carga y caché. En esta guía configuramos un reverse proxy completo con **Nginx**, desde la instalación básica hasta reglas de seguridad avanzadas.

Implementación de un Reverse Proxy con Nginx para Ocultar la IP del Servidor
#Linux#Nginx#Seguridad#Reverse Proxy
T
Equipo Terranode
Editorial

¿Qué necesitas antes de empezar?

  • Dos servidores (pueden ser VPS separados o instancias distintas): uno actuará como reverse proxy con Nginx, y el otro como servidor backend real.
  • Acceso SSH con privilegios de administrador a ambos servidores.
  • Un dominio apuntando a la IP del servidor proxy, necesario para configurar HTTPS correctamente (opcional pero muy recomendado).

Ventajas de usar un reverse proxy

  • Ocultación de la IP real del backend: los clientes solo interactúan con el proxy; la IP del servidor donde vive realmente tu aplicación permanece privada.
  • Protección contra ataques directos: el proxy puede filtrar tráfico malicioso, aplicar límites de tasa y bloquear IPs sospechosas antes de que lleguen al servidor principal.
  • Balanceo de carga: distribuye las peticiones entre varios servidores backend, mejorando rendimiento y disponibilidad.
  • Caché de contenido estático: reduce la carga del servidor principal almacenando temporalmente recursos que no cambian con frecuencia.

Paso 1: Instalar Nginx

En distribuciones basadas en Debian/Ubuntu:

bash
sudo apt update
sudo apt install nginx -y

En distribuciones basadas en Red Hat/CentOS:

bash
sudo yum install nginx -y

Paso 2: Configuración básica del reverse proxy

Edita el archivo de configuración del sitio:

bash
sudo nano /etc/nginx/sites-available/default

Y define el bloque server que redirige el tráfico hacia tu backend real:

nginx
server {
    listen 80;
    server_name tu-dominio.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Verifica que la sintaxis sea correcta y reinicia Nginx para aplicar los cambios:

bash
sudo nginx -t
sudo systemctl restart nginx

Paso 3: Habilitar HTTPS con Let's Encrypt

Instala Certbot, la herramienta oficial para obtener certificados SSL gratuitos de Let's Encrypt:

bash
sudo apt install certbot python3-certbot-nginx -y

Genera y aplica el certificado automáticamente para tu dominio:

bash
sudo certbot --nginx -d tu-dominio.com

Programada la renovación automática, ya que los certificados de Let's Encrypt expiran cada 90 días:

bash
sudo crontab -e
text
0 0 * * * certbot renew --quiet

Filtrado de tráfico malicioso por IP

Nginx permite bloquear o permitir direcciones IP específicas directamente en el bloque location:

nginx
location / {
    deny 192.168.1.1;           # Bloquea una IP específica
    allow 192.168.1.0/24;       # Permite solo un rango de IPs
    deny all;                   # Bloquea todo lo demás

    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Limitación de solicitudes (rate limiting)

Para protegerte de ataques de fuerza bruta o scraping agresivo, define una zona de limitación de tasa en el bloque http y aplícala en el location:

nginx
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;

    server {
        location / {
            limit_req zone=one burst=10;
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

Esta configuración permite hasta 30 solicitudes por segundo por IP, con un margen (burst) de 10 solicitudes adicionales antes de empezar a rechazar peticiones.

Añadir ModSecurity como firewall de aplicación web (WAF)

Para una capa de seguridad adicional a nivel de aplicación, puedes integrar ModSecurity, un firewall de aplicación web de código abierto:

bash
sudo apt install libnginx-mod-security -y

Habilita el módulo en la configuración principal de Nginx:

bash
sudo nano /etc/nginx/nginx.conf
nginx
load_module modules/ngx_http_modsecurity_module.so;

Y configura las reglas base en el archivo dedicado:

bash
sudo nano /etc/nginx/modsec/main.conf

Configuración de balanceo de carga

Si tienes más de un servidor backend, Nginx puede distribuir el tráfico entre ellos automáticamente con un bloque upstream:

nginx
upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
    }
}

Por defecto, Nginx usa un algoritmo round-robin (distribuye las peticiones de forma secuencial entre los servidores). También soporta balanceo por menor número de conexiones activas (least_conn) o por IP del cliente (ip_hash), según lo que mejor se adapte a tu caso de uso.

Consideraciones de seguridad adicionales

  • Habilita el firewall del sistema para permitir únicamente los puertos necesarios:
bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
  • Añade Fail2Ban para protegerte de intentos de fuerza bruta contra el propio panel o servicios expuestos:
bash
sudo apt install fail2ban -y
  • Mantén Nginx y los certificados SSL actualizados, ya que las vulnerabilidades en el software del proxy afectan a todo el tráfico que pasa por él.

Un reverse proxy bien configurado con Nginx te da tres beneficios que rara vez se consiguen con tan poco esfuerzo: anonimato real de tu infraestructura backend, una capa de filtrado de tráfico malicioso antes de que llegue a tu aplicación, y la base necesaria para escalar horizontalmente con balanceo de carga. Combínalo con HTTPS, límites de tasa y Fail2Ban para una configuración de seguridad completa y lista para producción. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.

¿Listo para llevar tu sitio al siguiente nivel?

Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.

Ver planes de hosting

Preguntas frecuentes