Contenidos
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:
- Auto-diagnosticarse: Consultar si su IP está bloqueada
- Entender el motivo: Ver logs detallados y educativos sobre qué causó el bloqueo
- Desbloquearse: Si el bloqueo es por causa legítima (contraseña olvidada, etc.), levantarlo ellos mismos
- 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:
- Usuario intenta entrar a webmail → bloqueado tras 5 intentos
- Abre ticket: «No puedo entrar a mi email»
- Técnico investiga → encuentra bloqueo CSF
- Técnico explica y desbloquea (20 minutos)
Con Unblock:
- Usuario intenta entrar → bloqueado
- Ve mensaje: «Acceso desde tu IP bloqueado, visita unblock.tuhosting.com»
- Sistema le explica el motivo
- Usuario hace clic en «Desbloquear» (2 minutos)
Escenario 2: Desarrollador con deployment automatizado
Antes:
- Script de deploy hace 10 conexiones SSH rápidas → bloqueado por «port scan»
- Deploy falla, abre ticket urgente
- Técnico debe actuar inmediatamente (interrumpe otras tareas)
Con Unblock:
- Script detecta fallo de conexión
- Llama a API:
curl -X POST unblock.tuhosting.com/api/unblock -d "ip=X&domain=Y"
- Sistema valida y desbloquea
- Deploy continúa automáticamente
Escenario 3: Office IP que cambia periódicamente
Antes:
- IP de oficina rota por DHCP del ISP
- CSF no reconoce la nueva IP
- Empleados bloqueados, ticket urgente cada vez
Con Unblock:
- Sistema detecta que el dominio pertenece a usuario autorizado
- Auto-whitelist temporal de la nueva IP
- 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:
- La comunidad de hosting gana: Menos carga en soportes = mejor servicio
- Los usuarios ganan: Autonomía y transparencia
- 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:
- Mantener el código
- Adaptarlo a nuevas tecnologías
- 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
- Prueba piloto: Instala en un servidor no crítico
- Mide el impacto: Compara tickets antes/después
- Comparte feedback: Issues en GitHub
Para desarrolladores
- Revisa el código: https://github.com/AichaDigital/unblock
- Propón mejoras: Security, UX, performance
- Integra en tus proyectos: API disponible
Para usuarios finales
- Pide a tu hosting: «¿Tienen sistema de auto-desbloqueo?»
- 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