SafeLine: WAF autohospedado para proteger aplicaciones web

Publicado por


SafeLine
WAF Open Source

SafeLine: WAF autohospedado para proteger aplicaciones web

Firewall de aplicaciones web autohospedado con detección de ataques, limitación de tasa, anti-bot y protección dinámica de código

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar SafeLine: WAF autohospedado para proteger aplicaciones web en el canal GENBYTE:

¿Qué es SafeLine: WAF autohospedado para proteger aplicaciones web?

SafeLine es un WAF (Web Application Firewall) autohospedado que actúa como proxy inverso para proteger aplicaciones web frente a ataques y exploits. Se despliega delante de la aplicación web, filtrando y monitorizando el tráfico HTTP/HTTPS entre la aplicación e Internet. Protege contra inyección SQL, XSS, inyección de código, inyección de comandos del sistema, CRLF, LDAP, XPath, RCE, XXE, SSRF, traversal de rutas, backdoors, fuerza bruta, flood HTTP, abuso de bots y otras amenazas. El proyecto está escrito en Go, licenciado bajo GPL-3.0 y cuenta con más de 22.000 estrellas en GitHub.

SafeLine combina detección de ataques con tasa de falsos positivos del 0,07% en modo Balance, superando a ModSecurity y Cloudflare Free en precisión (99,45%). Está listo para producción con más de 700.000 instalaciones globales protegiendo 2 millones de sitios y procesando 50.000 millones de peticiones diarias.

Características principales

Bloqueo de ataques web

Defensa contra inyección SQL, XSS, inyección de código, inyección de comandos del sistema, CRLF, XXE, SSRF, traversal de rutas, backdoors y otras vulnerabilidades comunes.

Limitación de tasa (Rate Limiting)

Protege contra ataques DoS, intentos de fuerza bruta, picos de tráfico y abusos mediante throttling de tráfico que supera límites definidos.

Desafío Anti-Bot

Desafíos CAPTCHA para diferenciar usuarios legítimos de bots y crawlers maliciosos, permitiendo el acceso a humanos y bloqueando automatizaciones.

Desafío de autenticación

Cuando se activa, los visitantes deben introducir una contraseña para acceder; de lo contrario son bloqueados.

Protección dinámica

Cifrado dinámico de código HTML y JavaScript en cada visita, ofuscando la lógica del lado del cliente frente a análisis automatizados.

Lista de control de acceso web (Web ACL)

Reglas basadas en IP, geolocalización, cabeceras y otros criterios para permitir o denegar tráfico antes de que llegue a la aplicación.

Requisitos del sistema

  • Docker Engine
  • Docker Compose (v2 o superior)
  • Variables de entorno obligatorias: SUBNET_PREFIX, POSTGRES_PASSWORD, IMAGE_TAG, SAFELINE_DIR
  • Arquitectura compatible con imágenes multiarch (amd64/arm64)
  • Puertos libres: 9443 (gestión), 80/443 (tráfico HTTP/HTTPS si se usa network_mode: host en tengine)

Instalación con Docker Compose

Clonar repositorio y preparar entorno

Clona el repositorio oficial y sitúate en el directorio raíz donde se encuentra compose.yaml.

git clone https://github.com/chaitin/SafeLine.git
cd SafeLine

Configurar variables de entorno

Crea un archivo .env con las variables requeridas por compose.yaml. SUBNET_PREFIX define la subred interna (ej. 172.22.0), POSTGRES_PASSWORD la contraseña de PostgreSQL, IMAGE_TAG la etiqueta de imagen (ej. latest), SAFELINE_DIR el directorio de datos persistentes (ej. /opt/safeline).

cat > .env <<'EOF'
SUBNET_PREFIX=172.22.0
POSTGRES_PASSWORD=tu_password_seguro
IMAGE_TAG=latest
SAFELINE_DIR=/opt/safeline
EOF

Levantar la pila con Docker Compose

Ejecuta docker compose up -d para iniciar todos los servicios: postgres, mgt (gestión), detect (motor de detección), tengine (proxy inverso), luigi (procesamiento de logs), fvm (gestión de versiones) y chaos (base de datos de amenazas).

docker compose up -d

Acceder al proyecto

Consola de gestión web

Accede a la interfaz de administración en https://<IP_SERVIDOR>:9443 (puerto configurable mediante MGT_PORT). El primer acceso requiere vinculación de cuenta mediante token de bootstrap generado en los logs del contenedor safeline-mgt.

Casos de uso

  • Protección de aplicaciones web autohospedadas frente a OWASP Top 10
  • Defensa de APIs y microservicios mediante proxy inverso con inspección de tráfico
  • Mitigación de ataques de fuerza bruta en formularios de login y endpoints de autenticación
  • Bloqueo de bots maliciosos y scrapers en sitios públicos
  • Ofuscación de código frontend (HTML/JS) para dificultar ingeniería inversa
  • Cumplimiento de requisitos de seguridad en entornos on-premise sin depender de WAF cloud

Configuración avanzada

Configuración de tokens gRPC y bootstrap

Variables MGT_GRPC_TOKEN, MGT_BOOTSTRAP_TOKEN y MGT_BOOTSTRAP_WINDOW permiten personalizar la seguridad del canal de control y la ventana de vinculación inicial de la cuenta admin.

MGT_GRPC_TOKEN=token_personalizado
MGT_BOOTSTRAP_TOKEN=token_bootstrap
MGT_BOOTSTRAP_WINDOW=30m

Integración con Kubernetes (Ingress-NGINX)

El proyecto provee un plugin para Ingress-NGINX que permite proteger tráfico de ingress en clústeres Kubernetes.

# Ver sdk/ingress-nginx/README.md en el repositorio para instrucciones de despliegue

Plugin para Kong Gateway

Integración nativa con Kong API Gateway para proteger APIs y servicios gestionados por Kong.

# Ver sdk/kong/Readme.md en el repositorio para configuración

Servidor MCP para gestión asistida por IA

SafeLine MCP Server permite gestión y control asistidos por IA mediante protocolo MCP.

# Ver mcp_server/README.md en el repositorio

Gestión y mantenimiento

Actualización de imágenes

Actualiza la variable IMAGE_TAG en .env y vuelve a levantar la pila para descargar nuevas versiones.

sed -i 's/IMAGE_TAG=.*/IMAGE_TAG=nueva_version/' .env
docker compose pull
docker compose up -d

Gestión de logs

Los contenedores mgt, luigi, fvm y chaos usan driver json-file con rotación (max-size 100m, max-file 5 o 10). Los logs de nginx y detector se almacenan en volúmenes bajo SAFELINE_DIR/logs.

docker compose logs -f mgt
# O inspeccionar archivos en /opt/safeline/logs/nginx

Healthchecks y reinicio automático

Todos los servicios tienen restart: always y healthchecks definidos (pg_isready para postgres, curl HTTPS para mgt). Docker reinicia contenedores fallidos automáticamente.

docker compose ps
# Ver estado de salud: docker inspect –format='{{.State.Health.Status}}' safeline-mgt

Backup de base de datos

PostgreSQL almacena datos en volumen SAFELINE_DIR/resources/postgres/data. Realiza backups periódicos con pg_dump desde el contenedor.

docker exec safeline-pg pg_dump -U safeline-ce safeline-ce > backup_$(date +%F).sql

Stack técnico

  • Go (lenguaje principal)
  • PostgreSQL 15.2 (base de datos)
  • Tengine / Nginx (proxy inverso y terminación TLS)
  • Docker / Docker Compose (orquestación)
  • Arquitectura multi-contenedor: mgt, detect, tengine, luigi, fvm, chaos, postgres

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

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