Proyecto Opensource: Sistema de Auto-Desbloqueo para Firewalls CSF

Unblock CSF Ip de Aicha digital

Contexto y motivación del proyecto

Tras 25 años gestionando infraestructuras de hosting, he identificado un problema recurrente que consume recursos innecesarios del equipo de soporte: los bloqueos automáticos de firewall CSF.

El problema actual

En entornos de hosting compartido con cPanel o DirectAdmin:

  • CSF bloquea IPs legítimas por intentos fallidos de login, escaneos automáticos de plugins, etc.
  • Los usuarios no entienden por qué no pueden acceder
  • Generan tickets de soporte preguntando «¿por qué no puedo entrar?»
  • El técnico debe: investigar logs → identificar el bloqueo → explicar la causa → desbloquear
  • Este ciclo se repite docenas de veces al día
  • Los hosting usan WHMCS, herramienta que lleva años sufi¡riendo carencia, incluida la gestión del firewall.

La solución: Autonomía informada

He desarrollado Unblock, un sistema opensource que permite a los usuarios:

  1. Auto-diagnosticarse: Consultar si su IP está bloqueada
  2. Entender el motivo: Ver logs detallados y educativos sobre qué causó el bloqueo
  3. Desbloquearse: Si el bloqueo es por causa legítima (contraseña olvidada, etc.), levantarlo ellos mismos
  4. Reducir tickets: El usuario resuelve su problema sin intervención del soporte

Arquitectura del proyecto

┌─────────────────────────────────────────────────────────┐
│                    Panel de Hosting                      │
│              (cPanel / DirectAdmin)                      │
└────────────────────┬────────────────────────────────────┘
                     │
                     │ CSF bloquea IP
                     ↓
┌─────────────────────────────────────────────────────────┐
│                   CSF Firewall                           │
│            /var/log/lfd.log                              │
│            /etc/csf/csf.deny                             │
└────────────────────┬────────────────────────────────────┘
                     │
                     │ Usuario intenta acceder
                     ↓
┌─────────────────────────────────────────────────────────┐
│              Unblock Web Interface                       │
│   • Consulta estado de su IP                            │
│   • Lee logs de CSF de forma comprensible               │
│   • Botón "Desbloquear mi IP"                           │
└────────────────────┬────────────────────────────────────┘
                     │
                     │ API segura
                     ↓
┌─────────────────────────────────────────────────────────┐
│               Backend (PHP/Python)                       │
│   • Valida identidad del usuario                        │
│   • Verifica que el bloqueo es reversible               │
│   • Ejecuta: csf -dr [IP]                               │
│   • Registra la acción en logs                          │
└─────────────────────────────────────────────────────────┘

Características principales

1. Seguridad por capas

  • Autenticación: Solo usuarios legítimos de dominios alojados pueden desbloquear
  • Rate limiting: Previene abuso del sistema de desbloqueo
  • Whitelist automática: IPs de oficina y servicios críticos nunca se bloquean
  • Logs auditables: Cada desbloqueo queda registrado con usuario/IP/timestamp

2. Interfaz educativa

No solo desbloquea, sino que explica:

❌ Tu IP 203.0.113.45 está bloqueada

Motivo: 5 intentos fallidos de login FTP en 10 minutos
Servicio: ProFTPD (puerto 21)
Hora del bloqueo: 2025-10-21 14:32:18
Duración: Temporal (se levanta automáticamente en 1 hora)

💡 ¿Por qué pasó esto?
- Posible contraseña incorrecta guardada en cliente FTP
- Revisa FileZilla, WinSCP u otro cliente que uses

🔓 ¿Qué puedo hacer?
1. Corregir la contraseña en tu cliente FTP
2. Hacer clic en "Desbloquear ahora" (disponible en 30 segundos)

3. Integración transparente

  • Sin modificar CSF: Lee configuración existente, no la altera
  • Compatible con: cPanel, DirectAdmin, Plesk (próximamente)
  • Sin dependencias pesadas: PHP básico
  • Instalación simple: Script automatizado de deployment

Casos de uso reales

Escenario 1: Cliente con password olvidado

Antes:

  1. Usuario intenta entrar a webmail → bloqueado tras 5 intentos
  2. Abre ticket: «No puedo entrar a mi email»
  3. Técnico investiga → encuentra bloqueo CSF
  4. Técnico explica y desbloquea (20 minutos)

Con Unblock:

  1. Usuario intenta entrar → bloqueado
  2. Ve mensaje: «Acceso desde tu IP bloqueado, visita unblock.tuhosting.com»
  3. Sistema le explica el motivo
  4. Usuario hace clic en «Desbloquear» (2 minutos)

Escenario 2: Desarrollador con deployment automatizado

Antes:

  1. Script de deploy hace 10 conexiones SSH rápidas → bloqueado por «port scan»
  2. Deploy falla, abre ticket urgente
  3. Técnico debe actuar inmediatamente (interrumpe otras tareas)

Con Unblock:

  1. Script detecta fallo de conexión
  2. Llama a API: curl -X POST unblock.tuhosting.com/api/unblock -d "ip=X&domain=Y"
  3. Sistema valida y desbloquea
  4. Deploy continúa automáticamente

Escenario 3: Office IP que cambia periódicamente

Antes:

  1. IP de oficina rota por DHCP del ISP
  2. CSF no reconoce la nueva IP
  3. Empleados bloqueados, ticket urgente cada vez

Con Unblock:

  1. Sistema detecta que el dominio pertenece a usuario autorizado
  2. Auto-whitelist temporal de la nueva IP
  3. Notificación al admin para añadir a whitelist permanente

Roadmap técnico

Fase 1 (actual – MVP)

  • [x] Lectura de /etc/csf/csf.deny y /var/log/lfd.log
  • [x] Interfaz web básica de consulta
  • [x] Comando de desbloqueo manual
  • [x] Logs de auditoría

Fase 2 (Q1 2026)

  • [ ] App móvil para usuarios
  • [ ] Estadísticas de bloqueos recurrentes

Fase 3 (Q2 2026)

  • [ ] Sistema de whitelist dinámica
  • [ ] Machine learning para detectar falsos positivos
  • [ ] Notificaciones push/email automáticas

Fase 4 (futuro)

  • [ ] Soporte para Fail2ban

Consideraciones de seguridad

Lo que NO hace (intencionalmente)

  • No deshabilita CSF: Es una capa adicional, no un bypass
  • No desbloquea IPs peligrosas: Analiza el tipo de bloqueo antes
  • No permite desbloqueos ilimitados: Rate limit estricto
  • No expone información sensible: Solo el usuario ve sus propios logs

Medidas implementadas

// Ejemplo de validación antes de desbloquear
function canUnblock($ip, $domain) {
    // 1. ¿El dominio existe en este servidor?
    if (!domainExistsInServer($domain)) return false;
    
    // 2. ¿La IP pertenece al usuario del dominio?
    if (!validateOwnership($ip, $domain)) return false;
    
    // 3. ¿Es un bloqueo temporal o permanente?
    $blockType = getBlockType($ip);
    if ($blockType === 'PERMANENT') return false;
    
    // 4. ¿Cuántos desbloqueos ha hecho hoy?
    $unblockCount = getUnblockCount($ip, today());
    if ($unblockCount >= MAX_DAILY_UNBLOCKS) return false;
    
    // 5. ¿Es una IP de ataque conocida?
    if (isInGlobalBlacklist($ip)) return false;
    
    return true;
}

Stack tecnológico

Backend

  • PHP 8.3>+
  • Framework: Laravel
  • Base de datos: Sqlite (Opcional Mysql/MariaDB)

Frontend

  • Tailwindcss 4.1
  • Alpine.js para reactividad
  • FilamentPHP 4.1 para dashboard admin

Contribuciones bienvenidas

Este proyecto es opensource porque creo que:

  1. La comunidad de hosting gana: Menos carga en soportes = mejor servicio
  2. Los usuarios ganan: Autonomía y transparencia
  3. La seguridad gana: Más ojos revisando el código

Áreas donde necesito ayuda

  • Traducciones: Interfaz actualmente en español/inglés
  • Testing: Casos edge en diferentes configuraciones CSF
  • Otros paneles de Hosting
  • Documentación: Casos de uso, troubleshooting

Cómo contribuir

# 1. Fork del repositorio
# 2. Crear rama de feature
git checkout -b feature/nueva-funcionalidad

# 3. Desarrollar con tests
# 4. Commit siguiendo Conventional Commits
git commit -m "feat: añade soporte para Plesk"

# 5. Push y Pull Request

Licencia y filosofía

  • Licencia: MIT (máxima libertad)
  • Sin CLA: Tus contribuciones son tuyas
  • Sin telemetría: Cero recolección de datos

Por qué opensource

A mis 60 años he visto suficientes soluciones propietarias que se abandonan. Este proyecto debe sobrevivirme. Si mañana no estoy, cualquiera puede:

  1. Mantener el código
  2. Adaptarlo a nuevas tecnologías
  3. Comercializarlo si lo desea (respetando MIT)

Métricas y resultados esperados

En producción (Castris)

Después de 3 meses:

  • Reducción de tickets: 95% menos consultas sobre bloqueos
  • Tiempo medio de resolución: De 20 minutos → 2 minutos
  • Satisfacción de usuarios: +45 puntos NPS
  • Bloqueos recurrentes identificados: Identificados mas de 20 reglas especificas de ModSecurity que han permitido generar los exoludes necesarios en un tiempo mínimo de análisis efectuado por el propio unblock.

Objetivo para la comunidad

Si 100 empresas de hosting adoptan Unblock:

  • Ahorro agregado: ~2,000 horas/mes de soporte técnico
  • Mejora en SLA: Respuesta instantánea vs tickets pendientes
  • Reducción de fricciones: Usuarios más autónomos y satisfechos

Llamado a la acción

Para empresas de hosting

  1. Prueba piloto: Instala en un servidor no crítico
  2. Mide el impacto: Compara tickets antes/después
  3. Comparte feedback: Issues en GitHub

Para desarrolladores

  1. Revisa el código: https://github.com/AichaDigital/unblock
  2. Propón mejoras: Security, UX, performance
  3. Integra en tus proyectos: API disponible

Para usuarios finales

  1. Pide a tu hosting: «¿Tienen sistema de auto-desbloqueo?»
  2. Comparte este proyecto: Ayuda a que más hostings lo adopten

Contacto y recursos

  • Repositorio: https://github.com/AichaDigital/unblock
  • Documentación: https://github.com/AichaDigital/unblock/wiki
  • Issues: https://github.com/AichaDigital/unblock/issues
  • Discusiones: https://github.com/AichaDigital/unblock/discussions

Pull requests bienvenidos. El código está esperando.


Proyecto iniciado: Octubre 2025
Autor: @AichaDigital
Licencia: MIT
Estado: 1.0, en desarrollo activo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.