Agente para servidores Linux
Vigila fail2ban y comparte las IPs atacantes con la red. Se instala con un comando.
¿No has usado nunca una consola? Tranquilo. Son 4 pasos y te explicamos cada uno como si fuera la primera vez.
Consigue tu «llave» (API key)
Entra en tu panel de ALMC SHIELD → Ajustes. Verás un código que empieza por
ab_live_…. Esa es tu API key: cópiala, la usarás en el paso 3. ¿Aún no tienes cuenta? Créala gratis aquí.Entra en tu servidor
«Entrar en el servidor» significa abrir una ventana negra donde se escriben comandos. Tienes dos formas:
- Si tu servidor tiene panel (aaPanel, Plesk, cPanel, ISPConfig…): busca el botón «Terminal» y ábrelo. Ya estás dentro.
- Si no tienes panel: en tu ordenador abre una terminal y escribe
ssh root@LA-IP-DE-TU-SERVIDOR(sustituye por la IP que te dio tu proveedor). Te pedirá la contraseña.
En Windows usaPowerShell(ya viene incluido) o el programa gratuito PuTTY. En Mac/Linux, la app «Terminal».Pega este único comando
Copia la línea de abajo, cambia
ab_live_XXXXXXXpor tu API key del paso 1, pégala en la ventana y pulsa Enter:curl -sSL https://almc.es/abuse-shield/install.sh | sudo bash -s -- --api-key=ab_live_XXXXXXXEso es todo. El instalador hace el resto solo: detecta tu sistema, instala el agente, lo arranca y lo deja vigilando.
Comprueba que funciona
Escribe esto para ver si está en marcha (debe decir
active (running)):systemctl status almc-shieldO más fácil: vuelve a tu panel de ALMC SHIELD → sección Servidores. En menos de un minuto verás aparecer tu servidor en la lista. 🎉
¡Listo! Tu servidor ya comparte y recibe IPs atacantes de toda la red ALMC SHIELD.
Requisitos y distribuciones soportadas
- Linux con
fail2ban ≥ 0.10instalado y funcionando. - Python 3.8+ (sin dependencias compiladas).
- systemd (bare-metal/VM) o Docker / Kubernetes.
- Salida HTTPS al puerto 443 hacia
almc.es. NO requiere puertos entrantes.
Configuración avanzada (config.ini)
El archivo /etc/almc-shield/config.ini permite ajustes finos:
[agent]
api_key = ab_live_XXXXXXX
api_url = https://almc.es/api/v1/abuse
hostname = web-01.example.com
[fail2ban]
log_path = /var/log/fail2ban.log
poll_seconds = 30
report_jails = sshd, nginx-botsearch, recidive
default_bantime = 3600
[blocklist]
download_enabled = true
refresh_seconds = 600
output_file = /etc/almc-shield/blocklist.txt
on_update_command = /usr/sbin/ipset restore -! < /etc/almc-shield/blocklist.txt
[network]
timeout_seconds = 30
retry_max = 5
proxy = | Sección | Clave | Default | Descripción |
|---|---|---|---|
| fail2ban | poll_seconds | 30 | Intervalo entre lecturas del log fail2ban. |
| fail2ban | default_bantime | 3600 | Bantime sugerido para reports sin valor explícito. |
| fail2ban | log_path | /var/log/fail2ban.log | Auto-detect en Alpine. |
| blocklist | refresh_seconds | 600 | Mín. recomendado: 300. |
| blocklist | on_update_command | (vacío) | Comando tras actualizar blocklist (ej. ipset restore). |
| network | retry_max | 5 | Reintentos con backoff exponencial antes del circuit breaker. |
systemctl reload almc-shield) sin perder la outbox de reports pendientes.Docker / Kubernetes
El agente también se distribuye como imagen Docker:
# docker-compose.yml
services:
almc-shield:
image: ghcr.io/almc-security/almc-shield:1.0
restart: unless-stopped
network_mode: host
volumes:
- /var/log/fail2ban.log:/var/log/fail2ban.log:ro
- /etc/almc-shield:/etc/almc-shield:ro
- almc-shield-state:/var/lib/almc-shield
environment:
- ALMC_API_KEY=ab_live_XXXXXXX
volumes:
almc-shield-state: Problemas frecuentes
Error auth_blocked
El servidor central rechazó la API key: tenant suspendido por billing, API key rotada/revocada (actualiza config.ini), o cuenta en quarantined (contacta soporte). Revisa /en/dash/abuse-shield.
Error tls_failures creciente
- Reloj del sistema desfasado (
timedatectl status). - Firewall outbound bloqueando 443 hacia
almc.es. - Proxy corporativo sin configurar — establece
proxy = http://....
El agente no detecta nuevos bans
- Verifica que
log_pathapunta al log activo (Alpine:/var/log/fail2ban/fail2ban.log). - Permisos:
setfacl -m u:almc-shield:r /var/log/fail2ban.log. - Los
jailsque monitorizas deben estar enreport_jails.
Desinstalar
Eliminación limpia con un solo comando:
curl -sSL https://almc.es/abuse-shield/uninstall.sh | sudo bash Detiene el servicio, borra /opt/almc-shield/, /etc/almc-shield/ y /var/lib/almc-shield/, y elimina el usuario. NO toca tu fail2ban ni tus reglas iptables/ipset.
API REST y privacidad
| Método | Endpoint | Descripción | Auth |
|---|---|---|---|
| POST | /api/v1/abuse/report | El agente reporta un ban | Bearer |
| POST | /api/v1/abuse/heartbeat | Keepalive del servidor | Bearer |
| GET | /api/v1/abuse/blocklist | Blocklist del tenant | Bearer |
| GET | /abuse/feed.txt | Feed global público (texto) | — |
| GET | /abuse/feed.json | Feed global público (JSON) | — |
El agente solo envía {ip baneada, jail, timestamp, hostname reportador}. NO enviamos logs raw, paths, contraseñas, payloads ni datos de tus usuarios. Base legal: interés legítimo (Art. 6.1.f RGPD). Detalle en Política de privacidad y DPA.









