Configurar UFW¶
Ubuntu/Debian
Esta página usa UFW, el firewall por defecto en Ubuntu/Debian. Si tu servidor usa Fedora/RHEL, consulta Configurar firewalld.
Un servidor sin firewall expone todos los puertos que tenga abiertos — servicios que ni siquiera estás usando pueden convertirse en puntos de entrada. UFW simplifica la gestión de iptables con una interfaz directa: defines qué puertos abrir y el resto queda bloqueado por defecto.
Cómo funciona¶
UFW funciona como una lista blanca de tráfico permitido:
- Política por defecto: denegar todo lo entrante, permitir todo lo saliente.
- Excepciones: solo los puertos que abras explícitamente (SSH, HTTP, HTTPS).
- Integración con Fail2ban: las jaulas de Fail2ban crean reglas de UFW automáticamente para bloquear IPs sospechosas.
Firewall: solo SSH y HTTP/HTTPS (y el panel de control, si usas uno).
Enfoque por niveles¶
Cada nivel abre lo necesario según el servicio. Puedes parar en el que quieras — los niveles 1 y 2 son obligatorios (sin ellos no entras ni trabajas).
| Nivel | Qué configura | ¿Aplicarlo? |
|---|---|---|
| 1 | Política por defecto | Obligatorio |
| 2 | SSH | Obligatorio |
| 3 | HTTP/HTTPS | Según servidor web |
| 4 | Puertos extra y límites | Opcional |
Nivel 1 — Política por defecto¶
Obligatorio. Niega todo el tráfico entrante y permite el saliente — la base de la lista blanca.
-
Comprobar si ya está instalado:
dpkg -l | grep ufw -
Instalar si hace falta:
sudo apt install ufw -
Ver estado actual:
sudo ufw status verbose -
Política por defecto (denegar entrante, permitir saliente):
sudo ufw default deny incoming sudo ufw default allow outgoingLa política se guarda aunque UFW siga inactivo. No lo actives todavía: primero abre SSH en el Nivel 2, o te quedarás fuera en el intento.
Nivel 2 — SSH¶
Obligatorio. Sin esta excepción, activar el firewall te deja sin acceso al servidor.
-
Abrir SSH:
sudo ufw allow sshSi tu SSH no usa el puerto 22, abre el puerto real:
sudo ufw allow 2222/tcp -
Revisar las reglas antes de activar (con UFW todavía inactivo, las reglas ya están guardadas aunque no se apliquen aún):
sudo ufw show addedConfirma que solo está lo que quieres — sobre todo que
allow sshestá en la lista, para no quedarte fuera al activar. -
Activar y confirmar que las reglas están aplicadas:
sudo ufw enable sudo ufw status numbered
Nivel 3 — HTTP/HTTPS¶
Según el servidor web que tengas. Abre 80/443 para que el tráfico web llegue.
-
Abrir los puertos según el servidor web:
UFW trae un perfil de aplicación que abre 80 y 443 a la vez:
sudo ufw allow 'Apache Full'Abre los puertos a mano:
sudo ufw allow http sudo ufw allow httpsSi Traefik hace de proxy dentro de Docker, abre los puertos que publiques en el host (normalmente 80/443 mapeados desde el contenedor):
sudo ufw allow http sudo ufw allow httpsUFW filtra el tráfico que llega al host; una vez dentro, Docker/Traefik gestionan el enrutado interno.
Nivel 4 — Puertos extra y límites¶
Opcional, según los servicios que corran en el servidor (agentes de monitorización, paneles, APIs) y si quieres frenar la fuerza bruta sobre SSH.
-
Abrir el puerto de los servicios que lo necesiten — ejemplo del agente Beszel:
sudo ufw allow 45876/tcp -
Rate limiting sobre SSH — UFW limita a 6 conexiones nuevas por 30 segundos; IPs que lo superen quedan bloqueadas temporalmente:
sudo ufw limit sshEs una capa adicional a Fail2ban a nivel de conexiones. Cuida que un script con muchas conexiones legítimas no se quede fuera.
-
Comprobar el estado final:
sudo ufw status numbered
Verificar¶
-
Confirmar el estado y las reglas aplicadas:
sudo ufw status verbose
Para una prueba en vivo, intenta conectar desde fuera a un puerto no abierto (debe rechazarse) y a SSH (debe funcionar).
Y ahora qué
UFW está activo con las reglas mínimas. El siguiente paso es Fail2ban para bloquear intentos de intrusión repetidos.