Arquitectura
Diagrama de componentes
Sección titulada «Diagrama de componentes»Cliente Wi-Fi ──> Punto de Acceso (hostapd) ──> Catsplash │ │ │ ┌────┴────┐ │ │ Firewall│ │ │(iptables)│ │ └─────────┘ │ │ │ ┌────┴────┐ │ │ SQLite │ │ │ (WAL) │ │ └─────────┘ │ │ │ ┌────┴────┐ │ │ Portal │ │ │ Web │ │ └─────────┘Componentes principales
Sección titulada «Componentes principales»main.go (Punto de entrada)
Sección titulada «main.go (Punto de entrada)»- Carga configuración (TOML + flags de CLI).
- Abre base de datos SQLite con WAL.
- Inicializa firewall (iptables).
- Configura redirección DNAT.
- Inicia el Reaper (gestor de expiración de sesiones).
- Inicia el monitor de tráfico.
- Arranca el servidor web del portal.
- Espera señal de terminación para limpiar recursos.
config/ (Configuración)
Sección titulada «config/ (Configuración)»Carga y valida la configuración desde un archivo TOML. Soporta sobrescritura mediante flags de CLI (--iface, --wan, --port, --db).
firewall/ (Firewall)
Sección titulada «firewall/ (Firewall)»Módulo que gestiona iptables:
- Init(): Crea cadena personalizada
CATS_PREROUTING, NAT Masquerade, reglas FORWARD. - SetupRedirect(): Añade regla DNAT para redirigir tráfico HTTP al portal.
- AllowClient(): Inserta 2 reglas FORWARD (subida/bajada) + 1 regla NAT (bypass).
- BlockClient(): Elimina las reglas anteriores.
- Teardown(): Limpieza completa al salir.
state/ (Estado)
Sección titulada «state/ (Estado)»Gestión de sesiones con SQLite:
- DB: Abre conexión SQLite con WAL, migraciones automáticas.
- Reaper: Hilo que cada 10 segundos revisa sesiones expiradas y las cierra.
- Client: Estructura con MAC, IP, estado, tiempos, tráfico y límites.
server/ (Servidor web)
Sección titulada «server/ (Servidor web)»Sirve el portal cautivo y la administración:
/portal- Página de bienvenida con formulario de autenticación y token CSRF./auth- Procesa la autenticación y libera al cliente./admin- Panel de administración con autenticación, gestión de clientes y vista de sesiones./privacy- Política de privacidad accesible desde el portal./data-request- Endpoint ARCO+: solicitud de acceso a datos personales./data-deletion- Endpoint ARCO+: solicitud de eliminación de datos personales./(catch-all) - Intercepta cualquier petición HTTP y redirige al portal.
state/ (Estado)
Sección titulada «state/ (Estado)»Gestión de sesiones con SQLite:
- DB: Abre conexión SQLite con WAL, migraciones automáticas.
- Reaper: Hilo que cada 10 segundos revisa sesiones expiradas y las cierra.
- Client: Estructura con MAC, IP, estado, tiempos, tráfico y límites.
- Audit: Registro de eventos de auditoría (accesos a datos, eliminaciones, autenticación).