Un VPS expuesto a internet sin firewall es una invitación a los atacantes. Cada puerto abierto es una puerta potencial de entrada.
El firewall controla qué tráfico entra y sale de tu servidor. Bien configurado, bloquea el 99% de ataques automatizados antes de que lleguen a tus servicios.
Esta guía te enseña a configurar el firewall correctamente, desde UFW (fácil) hasta iptables (control total).
Por qué necesitas un firewall
Sin firewall
Internet → Todos los puertos abiertos → Tu VPS
Puerto 22 (SSH) ✓
Puerto 80 (HTTP) ✓
Puerto 3306 (MySQL) ✓ ← ¡Peligro!
Puerto 6379 (Redis) ✓ ← ¡Peligro!
... miles de intentos de conexión
Con firewall
Internet → Firewall filtra → Solo lo permitido → Tu VPS
Puerto 22 (SSH) ✓
Puerto 80 (HTTP) ✓
Puerto 443 (HTTPS) ✓
Todo lo demás ✗ BLOQUEADO
Qué bloquea un firewall
| Amenaza | Sin firewall | Con firewall |
|---|---|---|
| Escaneo de puertos | Expuesto | Bloqueado |
| Ataques a MySQL | Vulnerable | Protegido |
| Bots automatizados | Llegan todos | Mayoría bloqueados |
| Servicios internos expuestos | Accesibles | Ocultos |
UFW vs iptables
UFW (Uncomplicated Firewall)
- Qué es: Frontend simplificado para iptables
- Para quién: Principiantes y uso general
- Ventaja: Sintaxis simple y legible
- Desventaja: Menos control granular
iptables
- Qué es: El firewall nativo de Linux
- Para quién: Administradores avanzados
- Ventaja: Control total, muy potente
- Desventaja: Sintaxis compleja
Recomendación: Empieza con UFW. Pasa a iptables solo si necesitas algo que UFW no puede hacer.
UFW: Guía completa
Instalar y activar
# Instalar (ya viene en Ubuntu)
sudo apt install ufw
# Ver estado
sudo ufw status
# Activar (¡CUIDADO! Lee la siguiente sección primero)
sudo ufw enable
⚠️ Antes de activar: permitir SSH
CRÍTICO: Si activas UFW sin permitir SSH, te quedarás fuera del servidor.
# SIEMPRE hacer esto primero
sudo ufw allow ssh
# O especificando puerto
sudo ufw allow 22/tcp
# Ahora sí, activar
sudo ufw enable
Política por defecto
# Bloquear todo el tráfico entrante por defecto
sudo ufw default deny incoming
# Permitir todo el tráfico saliente
sudo ufw default allow outgoing
Esta es la configuración más segura: solo entra lo que permites explícitamente.
Comandos básicos
# Ver estado y reglas
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered
# Activar/desactivar
sudo ufw enable
sudo ufw disable
# Resetear a valores por defecto
sudo ufw reset
Permitir servicios
# Por nombre de servicio
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# Por número de puerto
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Rango de puertos
sudo ufw allow 6000:6007/tcp
Bloquear tráfico
# Bloquear puerto
sudo ufw deny 23/tcp
# Bloquear IP específica
sudo ufw deny from 192.168.1.100
# Bloquear subred
sudo ufw deny from 10.0.0.0/8
Reglas avanzadas
# Permitir desde IP específica
sudo ufw allow from 203.0.113.5
# Permitir desde IP a puerto específico
sudo ufw allow from 203.0.113.5 to any port 22
# Permitir desde subred
sudo ufw allow from 192.168.1.0/24
# Permitir a interfaz específica
sudo ufw allow in on eth0 to any port 80
Eliminar reglas
# Ver reglas numeradas
sudo ufw status numbered
# Eliminar por número
sudo ufw delete 3
# Eliminar por regla
sudo ufw delete allow 80/tcp
Logging
# Activar logging
sudo ufw logging on
# Niveles: off, low, medium, high, full
sudo ufw logging medium
# Ver logs
sudo tail -f /var/log/ufw.log
Configuración recomendada para VPS web
VPS con web + SSH
# Resetear
sudo ufw reset
# Política por defecto
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH (cambia 22 si usas otro puerto)
sudo ufw allow 22/tcp
# HTTP y HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Activar
sudo ufw enable
# Verificar
sudo ufw status verbose
VPS con base de datos (acceso local)
MySQL y Redis no deben estar expuestos a internet:
# NO hagas esto:
# sudo ufw allow 3306/tcp ← MySQL expuesto
# sudo ufw allow 6379/tcp ← Redis expuesto
# MySQL y Redis solo escuchan en localhost por defecto
# Si necesitas acceso remoto, usa SSH tunnel
VPS con FTP (si realmente lo necesitas)
# FTP pasivo
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
# Mejor alternativa: usa SFTP (puerto 22)
VPS con servidor de correo
# SMTP
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
# IMAP/POP3
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw allow 110/tcp
sudo ufw allow 995/tcp
iptables: Control total
Conceptos básicos
iptables usa cadenas (chains) y tablas:
Cadenas principales:
- INPUT: Tráfico que entra al servidor
- OUTPUT: Tráfico que sale del servidor
- FORWARD: Tráfico que pasa a través (routing)
Acciones:
- ACCEPT: Permitir
- DROP: Descartar silenciosamente
- REJECT: Rechazar con respuesta
Ver reglas actuales
sudo iptables -L -n -v
sudo iptables -L -n -v --line-numbers
Reglas básicas
# Permitir tráfico establecido (importante)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Permitir loopback
sudo iptables -A INPUT -i lo -j ACCEPT
# Permitir SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Bloquear todo lo demás
sudo iptables -A INPUT -j DROP
Bloquear IP
# Bloquear IP específica
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# Bloquear subred
sudo iptables -A INPUT -s 10.0.0.0/8 -j DROP
Rate limiting (anti-DDoS básico)
# Limitar conexiones SSH (máx 3 por minuto)
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Guardar reglas
Las reglas de iptables se pierden al reiniciar. Para hacerlas persistentes:
# Instalar iptables-persistent
sudo apt install iptables-persistent
# Guardar reglas actuales
sudo netfilter-persistent save
# Las reglas se guardan en:
# /etc/iptables/rules.v4
# /etc/iptables/rules.v6
Eliminar reglas
# Ver con números de línea
sudo iptables -L INPUT --line-numbers
# Eliminar regla por número
sudo iptables -D INPUT 3
# Eliminar todas las reglas
sudo iptables -F
Casos especiales
SSH en puerto no estándar
Si cambias SSH al puerto 2222:
# UFW
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
Permitir ping (ICMP)
# UFW no bloquea ping por defecto
# iptables - permitir ping
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# iptables - bloquear ping
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Docker y firewall
Docker modifica iptables directamente. UFW puede no funcionar como esperas:
# Para que UFW funcione con Docker, edita /etc/ufw/after.rules
# Y añade al final:
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN
COMMIT
O usa las opciones de red de Docker para controlar exposición.
Fail2ban + firewall
Fail2ban trabaja con el firewall para bloquear IPs automáticamente:
# Fail2ban añade reglas a iptables automáticamente
sudo iptables -L f2b-sshd
Herramientas de diagnóstico
Ver puertos abiertos
# Puertos escuchando
sudo ss -tlnp
sudo netstat -tlnp
# Puertos abiertos desde fuera
nmap -p- tu-ip
Ver conexiones activas
sudo ss -tn
sudo netstat -tn
Ver reglas de firewall
# UFW
sudo ufw status verbose
# iptables
sudo iptables -L -n -v
Probar conectividad
# Desde otro servidor
nc -zv tu-ip 80
telnet tu-ip 80
Errores comunes
Error 1: Activar firewall sin permitir SSH
Te quedas fuera del servidor. Solución: acceso por consola desde el panel del proveedor.
Prevención:
# SIEMPRE primero
sudo ufw allow ssh
# DESPUÉS
sudo ufw enable
Error 2: Bloquear tráfico establecido
Si bloqueas todo sin permitir conexiones establecidas, las respuestas no llegan:
# iptables - SIEMPRE incluir esto
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
UFW lo hace automáticamente.
Error 3: No guardar reglas iptables
sudo apt install iptables-persistent
sudo netfilter-persistent save
Error 4: Exponer servicios internos
MySQL, Redis, Memcached deben escuchar solo en localhost:
# Verificar que MySQL solo escucha local
sudo ss -tlnp | grep 3306
# Debe mostrar 127.0.0.1:3306, NO 0.0.0.0:3306
Error 5: Reglas demasiado permisivas
# ❌ Mal - permite todo desde cualquier sitio
sudo ufw allow from any to any
# ✅ Bien - solo lo necesario
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Checklist de seguridad firewall
Configuración básica
| Tarea | Comando verificación | ✓ |
|---|---|---|
| Firewall activo | sudo ufw status | ☐ |
| SSH permitido | Verificar en reglas | ☐ |
| Política deny por defecto | sudo ufw status verbose | ☐ |
| Solo puertos necesarios | sudo ss -tlnp | ☐ |
Servicios protegidos
| Servicio | Puerto | Expuesto | ✓ |
|---|---|---|---|
| SSH | 22 | Sí (necesario) | ☐ |
| HTTP | 80 | Sí (web) | ☐ |
| HTTPS | 443 | Sí (web) | ☐ |
| MySQL | 3306 | NO (localhost) | ☐ |
| Redis | 6379 | NO (localhost) | ☐ |
Firewall + otras capas de seguridad
El firewall es la primera línea de defensa, pero no la única:
- Firewall: Bloquea puertos innecesarios
- Fail2ban: Bloquea IPs con comportamiento sospechoso
- SSH hardening: Claves, puerto no estándar
- Actualizaciones: Parchea vulnerabilidades
- Monitorización: Detecta anomalías
Preguntas frecuentes
¿UFW o iptables?
UFW para el 90% de casos. iptables solo si necesitas control muy específico o ya lo conoces.
¿Puedo usar ambos?
UFW es un frontend de iptables, así que técnicamente los usas juntos. Pero gestiona todo desde UFW para evitar conflictos.
¿El firewall afecta el rendimiento?
Mínimamente. El impacto es despreciable comparado con la seguridad que aporta.
¿Qué pasa si me bloqueo?
Accede por consola VNC/KVM desde el panel de tu proveedor y corrige las reglas.
Nuestra recomendación
Configuración mínima para cualquier VPS:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Con esto bloqueas el 99% de ataques automatizados.
¿No quieres complicarte? La administración gestionada incluye configuración de firewall profesional y monitorización de seguridad.
Conclusión
El firewall es la primera y más importante línea de defensa de tu VPS. UFW hace que configurarlo sea simple: unos pocos comandos y tu servidor está protegido.
No dejes tu VPS sin firewall. Configúralo hoy, tarda 5 minutos y la diferencia en seguridad es enorme.
¿Quieres un VPS con seguridad preconfigurada? Explora los VPS de Avantys con configuración profesional.
Guías relacionadas
- Securizar un VPS Linux
- Fail2ban: proteger tu VPS de ataques
- Monitorizar tu VPS con Netdata
- Backups en VPS: guía completa
¿Quieres la guía completa con todos los casos de uso?
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.