Configuración de Authelia en un VPS para autenticación centralizada y protección de dos factores para aplicaciones web
TL;DR
En esta guía detallada, configuraremos Authelia paso a paso en su VPS para proporcionar autenticación centralizada y una sólida protección de dos factores para cualquiera de sus aplicaciones web. Aprenderá a usar Docker y Caddy para implementar Authelia, integrarla con sus servicios y protegerlos del acceso no autorizado.
- Instalación y configuración de Authelia usando Docker Compose.
- Integración de Authelia con el proxy inverso Caddy para HTTPS automático.
- Protección de sus aplicaciones web mediante un único punto de autenticación.
- Implementación de autenticación de dos factores (2FA) para mejorar la seguridad.
- Recomendaciones para copias de seguridad, mantenimiento y resolución de problemas comunes.
- Comandos detallados y ejemplos de archivos de configuración, actualizados para 2026.
Qué configuramos y por qué
En el mundo moderno, donde cada desarrollador, fundador individual o incluso jugador gestiona múltiples servicios web en su VPS, la tarea de garantizar la seguridad y la comodidad de acceso se vuelve críticamente importante. A menudo hay que lidiar con decenas de inicios de sesión y contraseñas para GitLab, Mattermost, Grafana, Nextcloud, un servidor de Minecraft o incluso un nodo de blockchain propio. Esto no solo es incómodo, sino también inseguro, especialmente si hay que configurar una autenticación de dos factores (2FA) separada para cada servicio.
Aquí es donde Authelia viene al rescate. Authelia es una solución gratuita de código abierto que actúa como una puerta de enlace de autenticación (Authentication Gateway) para sus aplicaciones web. Permite centralizar el proceso de autenticación y autorización, y también agregar un segundo factor de protección (2FA) para acceder a cualquier servicio detrás de ella. En pocas palabras, usted configura Authelia una vez, y ella se encarga de verificar a los usuarios antes de que accedan a sus aplicaciones.
¿Qué obtendrá al final? Podrá proteger cualquier aplicación web que se ejecute en su VPS, ya sea una herramienta interna, un panel de control o un servicio público. Los usuarios solo necesitarán autenticarse una vez a través de Authelia para acceder a todas las aplicaciones permitidas (Single Sign-On, SSO). Además, Authelia habilita forzosamente 2FA para todos los servicios protegidos, aumentando significativamente su seguridad sin necesidad de configurar 2FA en cada aplicación por separado. Esto es especialmente valioso para servicios críticos, como paneles de administración o herramientas financieras.
Existen alternativas a Authelia, como soluciones en la nube (Okta, Auth0, Google Identity Platform) u otras opciones autoalojadas (Keycloak, Pomerium, Authentik). Los servicios en la nube son convenientes, pero pueden ser costosos, limitan el control sobre los datos y pueden no ser adecuados para proyectos confidenciales o experimentales. Las soluciones autoalojadas, como Authelia, por el contrario, le brindan control total sobre los datos, la configuración y la seguridad, sin requerir una inversión financiera significativa, aparte del costo del VPS. La elección de autoalojar en un VPS es ideal para quienes valoran la independencia, el ahorro y la flexibilidad, especialmente si ya utiliza un VPS para alojar sus servicios.
Qué configuración de VPS se necesita para esta tarea
Authelia en sí misma no es una aplicación que consuma muchos recursos, especialmente si se utiliza con una base de datos de usuarios local y SQLite para almacenar datos internos. Sin embargo, funcionará en conjunto con un servidor proxy inverso (por ejemplo, Caddy o Nginx) y, posiblemente, con otras de sus aplicaciones web. Por lo tanto, es importante elegir la configuración de VPS adecuada.
Requisitos mínimos para Authelia y Caddy:
- CPU: 1-2 vCPU. Authelia y Caddy están bien optimizados y no requieren mucho tiempo de CPU, excepto durante las cargas máximas de autenticación.
- RAM: 1-2 GB. Authelia en un contenedor Docker suele consumir de 50 a 200 MB de RAM, Caddy de manera similar. Se necesita RAM libre para el sistema operativo y otros procesos en segundo plano.
- Disco: 25-50 GB SSD. Para el sistema operativo, las imágenes de Docker, los registros y los archivos de configuración, esto será más que suficiente. El SSD es importante para una carga y un funcionamiento rápidos.
- Red: 100 Mbps. Para la autenticación, el tráfico es mínimo. Si otras aplicaciones de alta carga van a funcionar a través del mismo VPS, se requerirá un canal más amplio.
Plan de VPS recomendado para una tarea típica (hasta 50-100 usuarios activos):
Para un funcionamiento cómodo de Authelia, Caddy y varias aplicaciones protegidas (por ejemplo, GitLab, Mattermost), se recomienda el siguiente plan de configuración:
- CPU: 2 vCPU
- RAM: 2-4 GB
- Disco: 50-100 GB NVMe SSD (preferible para un mejor rendimiento)
- Red: Puerto de 1 Gbps con tráfico ilimitado o un límite alto
Para alquilar un VPS con las características indicadas, puede considerar proveedores que ofrezcan planes con 2 vCPU, 2-4 GB de RAM y más de 50 GB de SSD. Esta configuración garantizará un funcionamiento estable de Authelia y los servicios protegidos.
¿Cuándo se necesita un servidor dedicado en lugar de un VPS?
Un servidor dedicado puede ser necesario si:
- Un número muy grande de usuarios: Si planea proteger a cientos o miles de usuarios activos, especialmente con solicitudes frecuentes de autenticación.
- Aplicaciones protegidas de alta carga: Si Authelia va a funcionar en el mismo servidor que aplicaciones extremadamente intensivas en recursos (por ejemplo, una instancia grande de GitLab, Elasticsearch, bases de datos con alta carga), un servidor dedicado proporcionará un rendimiento garantizado.
- Requisitos de rendimiento y aislamiento: Para sistemas corporativos críticos, donde es importante el aislamiento completo de los "vecinos" del hipervisor y un rendimiento garantizado de E/S de disco y red.
- Integraciones complejas: Si Authelia se va a integrar con varios servidores externos LDAP/Active Directory u otros proveedores de SSO, lo que puede aumentar la carga.
Para la mayoría de los proyectos personales, equipos pequeños o fundadores individuales de SaaS, un VPS con las características descritas anteriormente será más que suficiente.
Ubicación del VPS: qué factores influyen
La elección de la ubicación del VPS influye en varios aspectos clave:
- Latencia: Cuanto más cerca esté el servidor de sus usuarios principales, menor será la latencia. Esto es crítico para las aplicaciones interactivas y la experiencia general del usuario. Para la autenticación, esto significa una carga más rápida de las páginas de inicio de sesión.
- Requisitos regulatorios: Dependiendo de dónde se encuentre su audiencia y qué datos procese, pueden aplicarse diferentes leyes de protección de datos (por ejemplo, GDPR en Europa). Elegir un servidor en una jurisdicción específica puede ayudar a cumplir con estos requisitos.
- Costo: Los precios de los VPS pueden variar según la ubicación.
- Disponibilidad de servicios: Algunos almacenamientos en la nube o servicios externos pueden ser más accesibles o funcionar más rápido desde ciertas regiones.
Elija una ubicación que esté geográficamente más cerca de la mayoría de sus usuarios para minimizar las latencias al acceder a las aplicaciones protegidas.
Preparación del servidor
Antes de proceder con la instalación de Authelia, es necesario preparar su VPS. En esta guía utilizaremos Ubuntu Server 24.04 LTS, ya que es una versión actual y estable del sistema operativo para 2026, ampliamente utilizada en producción.
1. Conexión por SSH
Conéctese a su nuevo VPS mediante SSH. Utilice el usuario root o el usuario proporcionado por su proveedor de hosting.
ssh user@your_vps_ip_address
2. Actualización del sistema
Lo primero es siempre actualizar el sistema para asegurarse de que todos los paquetes estén al día y se hayan corregido las vulnerabilidades conocidas.
sudo apt update # Actualizar la lista de paquetes
sudo apt upgrade -y # Actualizar los paquetes instalados a las últimas versiones
sudo apt autoremove -y # Eliminar dependencias innecesarias
3. Creación de un nuevo usuario y configuración de sudo (opcional, pero recomendado)
Trabajar como usuario root es inseguro. Cree un nuevo usuario con privilegios limitados y otórguele la capacidad de ejecutar comandos con sudo.
sudo adduser authelia_admin # Crear un nuevo usuario
sudo usermod -aG sudo authelia_admin # Añadir el usuario al grupo sudo
Ahora, salga de la sesión de root e inicie sesión con el nuevo usuario:
exit
ssh authelia_admin@your_vps_ip_address
4. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Si aún no las ha configurado, copie su clave SSH pública al servidor.
ssh-copy-id authelia_admin@your_vps_ip_address # Ejecutar en su máquina local
Después de copiar las claves, puede deshabilitar la autenticación por contraseña en el archivo /etc/ssh/sshd_config, estableciendo PasswordAuthentication no y reiniciando el servicio SSH.
sudo nano /etc/ssh/sshd_config
# Encuentre la línea "PasswordAuthentication yes" y cámbiela a "no"
# Guarde y cierre el archivo (Ctrl+X, Y, Enter)
sudo systemctl restart sshd
5. Configuración del Firewall (UFW)
Uncomplicated Firewall (UFW) es una interfaz fácil de usar para iptables. Configúrelo para permitir solo los puertos necesarios (SSH, HTTP, HTTPS).
sudo apt install ufw -y # Instalar UFW
sudo ufw default deny incoming # Denegar todas las conexiones entrantes por defecto
sudo ufw default allow outgoing # Permitir todas las conexiones salientes por defecto
sudo ufw allow OpenSSH # Permitir SSH (puerto 22)
sudo ufw allow http # Permitir HTTP (puerto 80)
sudo ufw allow https # Permitir HTTPS (puerto 443)
sudo ufw enable # Habilitar UFW (confirmar con 'y')
sudo ufw status verbose # Verificar el estado de UFW
6. Instalación de Fail2ban
Fail2ban protege su servidor contra ataques de fuerza bruta, bloqueando las direcciones IP que realizan demasiados intentos fallidos de inicio de sesión.
sudo apt install fail2ban -y # Instalar Fail2ban
sudo systemctl enable fail2ban # Habilitar Fail2ban al inicio del sistema
sudo systemctl start fail2ban # Iniciar el servicio Fail2ban
La configuración básica de Fail2ban ya incluye protección SSH. Para una configuración más detallada, puede copiar y editar el archivo /etc/fail2ban/jail.conf en /etc/fail2ban/jail.local.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# En este archivo puede configurar, por ejemplo, el tiempo de bloqueo (bantime) o el número de intentos (maxretry)
# Guarde y cierre, luego reinicie Fail2ban:
sudo systemctl restart fail2ban
Ahora su servidor está listo para la instalación de Authelia y el software asociado.
Instalación de software — paso a paso
Para desplegar Authelia, utilizaremos Docker y Docker Compose. Esto proporciona aislamiento, simplifica la gestión de dependencias y facilita las actualizaciones. Como servidor proxy inverso, que redirigirá las solicitudes a Authelia y proporcionará HTTPS, elegiremos Caddy debido a su facilidad de configuración y su funcionamiento automático con Let's Encrypt.
1. Instalación de Docker Engine
Docker Engine de la versión actual (por ejemplo, v25.x o posterior para 2026) es necesario para ejecutar los contenedores de Authelia y Caddy.
# Eliminamos versiones antiguas de Docker, si las hay
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
# Instalamos las dependencias necesarias
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
# Añadimos la clave GPG oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Añadimos el repositorio de Docker a las fuentes de APT
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Actualizamos la lista de paquetes e instalamos Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Añadimos el usuario actual al grupo docker para no usar sudo antes de cada comando docker
sudo usermod -aG docker $USER
# Cierre sesión y vuelva a iniciarla para que los cambios surtan efecto:
# exit
# ssh authelia_admin@your_vps_ip_address
# Verificamos la instalación de Docker
docker run hello-world
Si el comando docker run hello-world se ejecutó correctamente, Docker está instalado y funcionando.
2. Creación de la estructura de directorios para Authelia
Crearemos un directorio separado para todos los archivos de Authelia, incluyendo la configuración, los datos y el archivo Docker Compose.
mkdir -p ~/authelia/config # Creamos el directorio principal y un subdirectorio para la configuración
cd ~/authelia # Nos movemos al directorio authelia
3. Creación del archivo docker-compose.yml
Este archivo definirá nuestros servicios: Authelia y Caddy.
nano docker-compose.yml
Pegue el siguiente contenido (válido para Docker Compose v3.x y Authelia v4.x):
version: "3.8"
services:
authelia:
image: authelia/authelia:4.37.0 # Versión actual para 2026, por ejemplo, 4.37.0
container_name: authelia
restart: unless-stopped
volumes:
- ./config:/config
environment:
- AUTHELIA_CONFIG=/config/configuration.yml
# Variables de entorno para secretos (se crearán más tarde)
- AUTHELIA_JWT_SECRET=replace_with_a_strong_jwt_secret
- AUTHELIA_SESSION_SECRET=replace_with_a_strong_session_secret
- AUTHELIA_DUO_API_SECRET=replace_with_a_duo_api_secret # Si usa Duo Security
- AUTHELIA_AUTHENTICATION_BACKEND_LDAP_PASSWORD=replace_with_ldap_bind_password # Si usa LDAP
ports:
- "9091:9091" # Puerto predeterminado para Authelia, será proxy por Caddy
healthcheck:
test: ["CMD", "authelia", "healthcheck"]
interval: 5s
timeout: 3s
retries: 5
caddy:
image: caddy:2.7.6-alpine # Versión actual de Caddy para 2026, por ejemplo, 2.7.6
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data # Para almacenar certificados Let's Encrypt
depends_on:
- authelia # Caddy depende de Authelia
networks:
default:
name: authelia_network # Opcional, para una mejor organización
Guarde el archivo (Ctrl+X, Y, Enter).
4. Generación de secretos
Authelia requiere secretos robustos para los tokens JWT y las sesiones. Genérelos con el siguiente comando (puede hacerlo varias veces para diferentes secretos):
openssl rand -base64 64 # Genera un secreto de 64 bytes en Base64
Copie las cadenas resultantes. Necesitará al menos dos: para AUTHELIA_JWT_SECRET y AUTHELIA_SESSION_SECRET. Reemplácelas en el archivo docker-compose.yml.
IMPORTANTE: Nunca use los mismos secretos. Genere uno único para cada uno.
5. Inicio de Docker Compose (primera vez)
Inicie los contenedores. Es probable que no se inicien completamente, ya que Authelia aún no está configurada, pero esto permitirá crear los directorios necesarios y verificar la funcionalidad básica de Docker.
docker compose up -d # Inicio de servicios en segundo plano
docker compose ps # Verificación del estado de los contenedores
Verá que los contenedores authelia y caddy están en ejecución, pero Authelia puede estar en estado "unhealthy" o "restarting" debido a la falta de configuración.