Firewalls en Linux: Configuración Profesional con UFW e iptables
Aprende a proteger tu servidor VPS bloqueando puertos, permitiendo SSH seguro y configurando políticas por defecto de denegación.
Cuando contratas un servidor VPS en la nube y le asignas una dirección IP pública, queda expuesto al instante a todo el Internet mundial. En menos de 10 minutos, escáneres automáticos de hackers y botnets de todo el planeta comenzarán a golpear cada uno de los 65,535 puertos de tu máquina buscando bases de datos abiertas sin contraseña (puertos 3306 de MySQL, 5432 de PostgreSQL o 6379 de Redis) o vulnerabilidades en servicios en segundo plano. Un **Firewall (Cortafuegos)** es una barrera de seguridad que inspecciona cada paquete de datos entrante y saliente a nivel de red y decide si permitirlo o destruirlo según un conjunto de reglas estrictas. En el ecosistema Linux existen dos capas fundamentales: 1. **iptables / nftables**: El subsistema de bajo nivel extremadamente potente y complejo integrado en el kernel de Linux (Netfilter). 2. **UFW (Uncomplicated Firewall)**: Una interfaz amigable y elegante diseñada para Ubuntu y Debian que simplifica la administración de iptables con comandos intuitivos en inglés.
- ✓Principio de Mínimo Privilegio: Cierra absolutamente todos los puertos del servidor por defecto (**Default Deny**) y abre exclusivamente los que tu servicio web necesita (80 y 443).
- ✓Aislamiento de Bases de Datos: Las bases de datos nunca deben escuchar en la IP pública; si necesitas acceder desde otra oficina, el firewall solo permite la conexión desde tu IP estática específica.
- ✓Prevención de Escaneos de Red: Descarta paquetes en silencio (`DROP`) para que los escáneres de puertos crean que la máquina ni siquiera existe o está apagada.
- •Evita que ciberdelincuentes secuestren bases de datos Redis o MongoDB expuestas a Internet por descuidos de desarrolladores.
- •Bloquea intentos de acceso a interfaces de administración interna.
- •Mitiga ataques de fuerza bruta al puerto SSH limitando la tasa de conexiones (Rate Limiting).
Imagina un castillo medieval rodeado por un foso de agua profunda. Si el castillo tuviera 65,000 puertas traseras abiertas sin vigilancia, cualquier ladrón entraría a robar las joyas de la corona. El Rey sabio instala un puente levadizo con un guardia de hierro en la puerta principal (el **Firewall**). La ordenanza suprema del guardia es: *'Nadie entra al castillo a menos que tenga una invitación formal firmada por el Rey'* (Default Deny Incoming). Si llega un campesino con harina para los panaderos (un usuario pidiendo una página web por el puerto 80), el guardia lo revisa y lo deja pasar. Si llega un soldado desconocido intentando entrar por una ventana del piso superior (un escaneo al puerto 5432 de la base de datos), el guardia le dispara una flecha y lo arroja al foso en silencio.
Explicación Paso a Paso del Tema
¡Paso Cero de Supervivencia!: Permitir SSH Antes de Activar el Firewall
Si activas el firewall antes de permitir el puerto de SSH (puerto 22), perderás el acceso a tu servidor VPS de forma instantánea y quedarás bloqueado afuera.
Permite siempre el servicio SSH en primer lugar con `ufw allow ssh`.
# 1. Permitir conexión SSH obligatoria: sudo ufw allow ssh # 2. Configurar políticas predeterminadas de máxima seguridad: sudo ufw default deny incoming sudo ufw default allow outgoing # 3. Activar el firewall con confirmación: sudo ufw enable
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| allow ssh | Regla | Permite tráfico entrante en el puerto TCP 22 (o el puerto SSH configurado). |
| default deny incoming | Política Global | Bloquea todas las conexiones entrantes que no tengan una regla explícita de permiso. |
Si cambiaste el puerto de SSH por defecto (ej. al puerto 2222 por seguridad), ejecuta `sudo ufw allow 2222/tcp` antes de activar UFW.
Abrir Puertos Web y Restringir Accesos por Dirección IP
Para servir páginas web debes abrir los puertos estándar 80 (HTTP) y 443 (HTTPS).
Si tienes un servicio administrativo interno (como la base de datos PostgreSQL), permite la entrada **únicamente desde la dirección IP de tu oficina o casa**.
# Abrir tráfico web público: sudo ufw allow 80/tcp sudo ufw allow 443/tcp # Permitir acceso a PostgreSQL (5432) SÓLO desde tu IP fija de oficina: sudo ufw allow from 203.0.113.50 to any port 5432 proto tcp # Comprobar el estado y las reglas numeradas: sudo ufw status numbered
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| allow from <IP> to any port 5432 | Regla Restrictiva | Solo autoriza la conexión si los paquetes provienen de esa IP pública exacta. |
Escribir `ufw allow 5432`: expondrá tu base de datos a los 4 mil millones de usuarios de Internet.
Reglas de iptables de Bajo Nivel: Inspección con Estado
UFW genera reglas de iptables por debajo. Para entender cómo funciona el filtrado con estado (Stateful Inspection), analiza la tabla filter de iptables.
La regla fundamental permite el tráfico de paquetes que pertenecen a conexiones que ya fueron establecidas previamente.
sudo iptables -L -n -v
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| -L | Comando | Lista todas las cadenas de reglas (INPUT, FORWARD, OUTPUT). |
| -n | Flag | Muestra direcciones IP y puertos numéricos sin traducir a nombres DNS. |
| -v | Flag | Verbose: Muestra contadores de paquetes y bytes procesados por cada regla. |
Activa el limitador de tasa de UFW para SSH con `sudo ufw limit ssh`: si una IP intenta más de 6 conexiones en 30 segundos, será bloqueada automáticamente.
Casos Prácticos Reales en Producción
Situaciones de ingeniería reales sin mención de presupuestos ficticios.
1El Ataque de Ransomware a un Servidor Redis Expuesto
Un desarrollador instaló Redis en un VPS nuevo para acelerar su app. Por defecto, Redis no tenía contraseña. En menos de 2 horas, un bot de Internet encontró el puerto 6379 abierto, borró las claves y dejó una nota de rescate en criptomonedas.
Configuraron UFW con `default deny incoming` y abrieron únicamente los puertos 80 y 443. Redis fue configurado para escuchar exclusivamente en la interfaz de loopback local (`bind 127.0.0.1`).
Fichas Nemotécnicas de Conceptos Clave
Glosario rápido para recordar los términos fundamentales de la lección.
Frontend intuitivo de línea de comandos para administrar las reglas del cortafuegos de Linux.
Principio de seguridad donde todo el tráfico entrante es rechazado por defecto a menos que se autorice explícitamente.
Cortafuegos con estado que recuerda las conexiones activas y permite automáticamente los paquetes de respuesta legítimos.
Firewalls en Linux: Configuración Profesional con UFW e iptables
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Qué error catastrófico puede cometer un administrador al configurar UFW por primera vez en un servidor remoto en la nube?
¿Qué significa la política 'Default Deny Incoming' en un firewall?
¿Cómo debes configurar el firewall para proteger una base de datos PostgreSQL en un servidor de producción?
Preguntas Frecuentes (FAQ)
¿Cuál es la diferencia entre la acción REJECT y la acción DROP en un firewall?
Con **REJECT**, el firewall rechaza el paquete pero le devuelve un mensaje formal al emisor ('Puerto inalcanzable'), avisándole al atacante que la máquina está encendida. Con **DROP**, el firewall destruye el paquete en silencio sin responder absolutamente nada, obligando al atacante a esperar un timeout y haciéndole dudar si la máquina existe.
¿Cómo se elimina una regla de UFW si ya no la necesito?
Ejecuta primero `sudo ufw status numbered` para ver el número asignado a cada regla (ej. `[ 3 ] 8080/tcp ALLOW`), y luego bórrala indicando su número: `sudo ufw delete 3`.