Skip to content

Log de Implementación de Firewall UFW

Fecha: 2026-01-09 Ejecutado por: Claude Code + monxas Servidor: 192.168.0.208


Resumen ejecutivo

Firewall UFW activado correctamenteTodos los servicios funcionan normalmenteSin interrupciones en el servicio


Comandos ejecutados (en orden)

# 1. Establecer política por defecto: DENEGAR entrante
sudo ufw default deny incoming
> Default incoming policy changed to 'deny'

# 2. Establecer política por defecto: PERMITIR saliente
sudo ufw default allow outgoing
> Default outgoing policy changed to 'allow'

# 3. Permitir TODO desde la red local (192.168.0.0/24)
sudo ufw allow from 192.168.0.0/24
> Rules updated

# 4. Permitir SSH (puerto 22) desde cualquier IP
sudo ufw allow 22/tcp
> Rules updated (IPv4 e IPv6)

# 5. Activar el firewall
sudo ufw --force enable
> Firewall is active and enabled on system startup

Estado final del firewall

$ sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
8082/tcp                   ALLOW IN    Anywhere
Anywhere                   ALLOW IN    192.168.0.0/24
22/tcp                     LIMIT IN    Anywhere
Anywhere                   ALLOW IN    172.16.0.0/12
8082/tcp (v6)              ALLOW IN    Anywhere (v6)
22/tcp (v6)                LIMIT IN    Anywhere (v6)

Nota: La regla 8082/tcp (ntfy) ya existía previamente. La mantuvimos.


Verificación post-implementación

1. Contenedores Docker siguen corriendo

$ sudo docker ps --format "{{.Names}}: {{.Status}}" | head -10

metube: Up 8 hours
speedtest-tracker: Up 8 hours
plundrio-scanner: Up 14 hours
changedetection: Up 32 hours
tunarr: Up 32 hours
prometheus: Up 32 hours
dozzle: Up 32 hours
bazarr: Up 3 days

Ningún contenedor se reinició o falló

2. Servicios web respondiendo

$ curl http://localhost:8096/health
Healthy 
$ curl http://localhost:9090/-/healthy
Prometheus Server is Healthy. 

Servicios principales operativos


¿Qué protege ahora?

Tráfico BLOQUEADO:

  • ❌ Conexiones desde internet directamente a puertos Docker
  • ❌ Escaneo de puertos desde IPs externas
  • ❌ Intentos de conexión a servicios sin autenticación desde fuera de la red local

Tráfico PERMITIDO:

  • ✅ TODO desde la red local (192.168.0.1 - 192.168.0.254)
  • ✅ SSH desde cualquier IP (puerto 22)
  • ✅ Cloudflare Tunnels (conexiones salientes)
  • ✅ Comunicación entre contenedores Docker (red bridge interna)
  • ✅ Descarga de actualizaciones, imágenes Docker, APIs externas

Impacto en servicios

✅ Sin impacto:

  • Cloudflare Tunnels: Funcionan igual (usan conexiones salientes)
  • Jellyfin, Sonarr, Radarr: Accesibles desde red local y vía *.monxas.casa
  • Docker Compose: Stacks arrancan sin cambios
  • Watchtower: Descarga actualizaciones normalmente
  • Home Assistant (192.168.0.171): Puede comunicarse con el servidor
  • Acceso desde tu PC/móvil en WiFi: Sin cambios

⚠️ Cambio (positivo):

  • Intentos de acceso directo desde internet: Ahora bloqueados
  • Protección adicional: En caso de misconfigración de router o vulnerabilidad

Próximos pasos (opcionales)

Mejora 1: Limitar intentos de SSH (anti brute-force)

sudo ufw limit 22/tcp
# Bloquea IPs que intenten >6 conexiones en 30 segundos

Mejora 2: Restringir SSH solo a tu IP pública (si tienes IP fija)

# Obtener tu IP pública
curl ifconfig.me

# Reemplazar regla
sudo ufw delete allow 22/tcp
sudo ufw allow from TU_IP_PUBLICA to any port 22

Mejora 3: Monitorizar logs de UFW

# Ver intentos de conexión bloqueados en tiempo real
sudo tail -f /var/log/ufw.log | grep BLOCK

Mejora 4: Integrar con alertas de Prometheus

# Instalar ufw_exporter para métricas
# https://github.com/cablespaghetti/ufw_exporter

Rollback (si es necesario)

Desactivar el firewall completamente:

sudo ufw disable

Desactivar temporalmente (para debug):

sudo ufw disable
# ... probar cosas ...
sudo ufw enable

Ver qué está bloqueando UFW:

sudo tail -100 /var/log/ufw.log | grep BLOCK

Eliminar una regla específica:

# Listar reglas con números
sudo ufw status numbered

# Eliminar regla #3 (ejemplo)
sudo ufw delete 3

Archivos modificados

Archivo Cambio
/etc/ufw/ufw.conf ENABLED=yes
/etc/ufw/user.rules Reglas IPv4 añadidas
/etc/ufw/user6.rules Reglas IPv6 añadidas
firewall-ufw.md Documentación creada

Comandos útiles de referencia

# Ver estado actual
sudo ufw status verbose

# Ver reglas numeradas
sudo ufw status numbered

# Ver logs en tiempo real
sudo tail -f /var/log/ufw.log

# Recargar configuración
sudo ufw reload

# Resetear a configuración por defecto (PELIGROSO)
sudo ufw --force reset

Notas de seguridad

  1. UFW se activa automáticamente al reiniciar - No necesitas volver a habilitarlo
  2. Las reglas persisten entre reinicios - Guardadas en /etc/ufw/
  3. Los logs se rotan automáticamente - Ver /etc/logrotate.d/ufw
  4. Regla de red local (192.168.0.0/24) es clave - Sin ella, no accederías a los servicios

Documentación relacionada


Actualización 2026-07-12

  • Aplicado sudo ufw limit 22/tcp: la regla SSH pasó de 22/tcp ALLOW a 22/tcp LIMIT (IPv4 e IPv6). UFW bloquea IPs que superen 6 conexiones en 30 s. Se mantiene junto a fail2ban como defensa en profundidad.
  • Regla allow from 172.16.0.0/12 documentada en el estado vivo (rango Docker/overlay de contenedores). Reflejada arriba en «Estado final».

FIN DEL LOG DE IMPLEMENTACIÓN