bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Configuración de Authelia

calendar_month Aug 01, 2026 schedule 22 min de lectura visibility 10 vistas
Настройка Authelia на VPS для централизованной аутентификации и двухфакторной защиты веб-приложений
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

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é

Diagrama: Qué configuramos y por qué
Diagrama: 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

Diagrama: Qué configuración de VPS se necesita para esta tarea
Diagrama: 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

Diagrama: Preparación del servidor
Diagrama: 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

Diagrama: Instalación de software — paso a paso
Diagrama: 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.

Configuración

Diagrama: Configuración
Diagrama: Configuración

Ahora que los componentes principales están instalados, es hora de configurar Authelia y Caddy.

1. Configuración de Authelia (configuration.yml)

Cree el archivo configuration.yml en el directorio ~/authelia/config/. Este archivo contiene todas las configuraciones de Authelia.


nano ~/authelia/config/configuration.yml

Pegue el siguiente ejemplo de configuración. Tenga en cuenta que usamos SQLite para la base de datos y un archivo local para los usuarios, lo que simplifica la configuración inicial. Reemplace your_domain.com con su dominio real.


# configuration.yml
# Estructura actual para Authelia v4.x en 2026

server:
  host: 0.0.0.0
  port: 9091
  tls:
    enabled: false # Caddy manejará TLS

log:
  level: debug # Cambie a 'info' o 'warn' para producción
  format: json

authentication_backend:
  file:
    path: /config/users_database.yml # Ruta al archivo de usuarios

session:
  domain: your_domain.com # Reemplace con su dominio
  secret: "$AUTHELIA_SESSION_SECRET" # Se toma de la variable de entorno
  name: authelia_session
  expiration: 1h
  inactivity: 5m
  remember_me_duration: 1d

TOTP:
  issuer: authelia.your_domain.com # Reemplace con su dominio

access_control:
  default_policy: deny # Por defecto, denegamos todo
  rules:
    - domain: "authelia.your_domain.com" # Acceso a Authelia misma
      policy: bypass # No requiere autenticación para la página de inicio de sesión
    - domain: "auth.your_domain.com" # Dominio a través del cual Authelia estará disponible
      policy: bypass # No requiere autenticación para la página de inicio de sesión
    - domain: ".your_domain.com" # Protegemos todos los subdominios
      policy: two_factor # Requerimos autenticación de dos factores
      # users: ["john", "jane"] # Se puede restringir el acceso a usuarios específicos

identity_providers:
  oidc:
    enabled: false # OIDC se puede habilitar más tarde para la integración con otros IdP

notifier:
  smtp:
    host: "smtp.mail.com" # Reemplace con su servidor SMTP
    port: 587
    username: "authelia@your_domain.com" # Reemplace con su dirección
    password: "your_smtp_password" # Contraseña para SMTP
    sender: "Authelia " # Remitente
    disable_starttls: false
    disable_require_tls: false

storage:
  sqlite:
    path: /config/db.sqlite3 # Ruta al archivo de la base de datos SQLite

jwt_secret: "$AUTHELIA_JWT_SECRET" # Se toma de la variable de entorno

duo_api:
  secret: "$AUTHELIA_DUO_API_SECRET" # Si usa Duo Security

Asegúrese de reemplazar:

  • your_domain.com con su dominio real (por ejemplo, example.com).
  • La configuración del servidor SMTP en la sección notifier, de lo contrario, Authelia no podrá enviar correos electrónicos para restablecer la contraseña o 2FA.
  • Asegúrese de que las variables de entorno $AUTHELIA_SESSION_SECRET y $AUTHELIA_JWT_SECRET coincidan con las que configuró en docker-compose.yml.

2. Creación del archivo de usuarios (users_database.yml)

Cree el archivo users_database.yml en el mismo directorio ~/authelia/config/. Aquí se almacenarán los usuarios y sus contraseñas (en formato hash).


nano ~/authelia/config/users_database.yml

Para generar el hash de la contraseña, use la utilidad Authelia. Primero, inicie el contenedor:


# Inicie Authelia si no está en ejecución, o actualícela:
docker compose pull authelia
docker compose up -d authelia

# Luego ejecute el comando para generar el hash de la contraseña
docker compose exec authelia authelia hash-password your_strong_password
# Ejemplo de salida: $argon2id$v=19$m=65536,t=3,p=4$some_salt$some_hash

Copie el hash obtenido y péguelo en el archivo users_database.yml:


# users_database.yml
users:
  john:
    display_name: John Doe
    password: "your_hashed_password_for_john" # Pegue el hash obtenido anteriormente
    email: john.doe@your_domain.com
    groups:
      - admins
      - developers
  jane:
    display_name: Jane Smith
    password: "your_hashed_password_for_jane" # Pegue el hash
    email: jane.smith@your_domain.com
    groups:
      - users

Guarde el archivo.

3. Configuración de Caddy (Caddyfile)

Cree el archivo Caddyfile en el directorio ~/authelia/. Caddy escuchará en los puertos 80 y 443, obtendrá automáticamente certificados SSL y redirigirá el tráfico.


nano ~/authelia/Caddyfile

Pegue la siguiente configuración. Reemplace your_domain.com con su dominio real y app.your_domain.com con el dominio de su aplicación que desea proteger. Asegúrese de que los registros DNS para auth.your_domain.com y app.your_domain.com apunten a la IP de su VPS.


# Caddyfile
# Estructura actual para Caddy v2.x en 2026

# Dominio para Authelia
auth.your_domain.com {
  # HTTPS automático
  tls internal # Use 'tls your_email@your_domain.com' para Let's Encrypt

  # Redirección a Authelia
  reverse_proxy authelia:9091 {
    # Encabezados necesarios para Authelia
    header_up X-Original-URL {uri}
    header_up X-Forwarded-Proto {scheme}
    header_up X-Forwarded-Host {host}
    header_up X-Forwarded-For {remote_host}
  }

  # Encabezados de seguridad adicionales
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    X-XSS-Protection "1; mode=block"
    Referrer-Policy "same-origin"
  }
}

# Ejemplo de aplicación protegida (por ejemplo, GitLab, Mattermost, Grafana)
app.your_domain.com {
  # HTTPS automático
  tls internal # Use 'tls your_email@your_domain.com' para Let's Encrypt

  # Verificación de autenticación a través de Authelia
  handle_errors {
    @authelia {
      expression {http.response.status} in [401, 403]
    }
    rewrite @authelia /authelia
    reverse_proxy @authelia authelia:9091 {
      # Encabezados para Authelia
      header_up Remote-User {env.Remote-User}
      header_up Remote-Groups {env.Remote-Groups}
      header_up Remote-Name {env.Remote-Name}
      header_up Remote-Email {env.Remote-Email}
    }

    # Si la autenticación es exitosa, hacemos proxy a la aplicación
    reverse_proxy localhost:8080 # Reemplace con la dirección de su aplicación (por ejemplo, localhost:3000 para Grafana)
  }

  # Si la aplicación no requiere autenticación, pero desea agregarla
  # handle {
  #   # Verificación de autenticación a través de Authelia
  #   reverse_proxy authelia:9091 {
  #     # Encabezados para Authelia
  #     header_up Remote-User {env.Remote-User}
  #     header_up Remote-Groups {env.Remote-Groups}
  #     header_up Remote-Name {env.Remote-Name}
  #     header_up Remote-Email {env.Remote-Email}
  #   }
  #
  #   # Si la autenticación es exitosa, hacemos proxy a la aplicación
  #   reverse_proxy localhost:8080 # Reemplace con la dirección de su aplicación
  # }

  # Encabezados de seguridad adicionales
  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "SAMEORIGIN"
    X-XSS-Protection "1; mode=block"
    Referrer-Policy "same-origin"
  }
}

Puntos importantes en Caddyfile:

  • tls internal: Caddy generará certificados autofirmados para HTTPS. Para producción, reemplace con tls your_email@your_domain.com para que Caddy obtenga automáticamente certificados de Let's Encrypt. Asegúrese de que los puertos 80 y 443 estén abiertos y accesibles desde Internet.
  • authelia:9091: Apunta al contenedor de Authelia por el nombre del servicio y su puerto interno.
  • localhost:8080: Reemplace con la dirección y el puerto reales de su aplicación que desea proteger. Si la aplicación se ejecuta en otro contenedor Docker en la misma red de Docker Compose, use su nombre de servicio (por ejemplo, gitlab:80). Si es una aplicación en el host, entonces localhost:PORT.
  • handle_errors: Este bloque intercepta los errores 401/403 (no autorizado/prohibido) de Authelia y redirige a la página de inicio de sesión de Authelia.
  • header_up Remote-User ...: Authelia agrega información sobre el usuario autenticado a los encabezados de la solicitud HTTP, que luego se pasan a su aplicación protegida. Esto permite que la aplicación "sepa" quién ha iniciado sesión.

Guarde el archivo.

4. Reinicio de los servicios de Docker Compose

Después de todos los cambios en la configuración, reinicie los servicios de Docker Compose para que tomen las nuevas configuraciones.


cd ~/authelia                   # Asegúrese de estar en el directorio con docker-compose.yml
docker compose down             # Detenemos y eliminamos los contenedores antiguos
docker compose up -d            # Iniciamos nuevos contenedores con la configuración actualizada
docker compose logs -f authelia # Verificamos los logs de Authelia en busca de errores
docker compose logs -f caddy    # Verificamos los logs de Caddy

En los logs de Authelia, debería ver mensajes de inicialización exitosa. En los logs de Caddy, mensajes sobre la obtención exitosa de certificados (si usa Let's Encrypt) y el proxy.

5. Verificación de la funcionalidad

Después de iniciar todos los servicios:

  1. Verifique el DNS: Asegúrese de que los registros DNS para auth.your_domain.com y app.your_domain.com apunten a la IP de su VPS.
  2. Acceso a Authelia: Abra https://auth.your_domain.com en su navegador. Debería ver la página de inicio de sesión de Authelia. Intente iniciar sesión con el usuario creado (por ejemplo, john y su contraseña).
  3. Configuración de 2FA: Después del primer inicio de sesión, Authelia le pedirá que configure la autenticación de dos factores (por ejemplo, a través de Google Authenticator). Siga las instrucciones.
  4. Acceso a la aplicación protegida: Abra https://app.your_domain.com en su navegador. Si ya ha iniciado sesión a través de Authelia, debería ser redirigido automáticamente a la aplicación. De lo contrario, será redirigido a la página de inicio de sesión de Authelia.
  5. Comprobación de estado (Healthcheck): Puede verificar el estado de Authelia a través de curl:
  6. 
    curl -k https://auth.your_domain.com/api/health # -k para certificados autofirmados
    

    Debería devolver un estado 200 OK.

Copias de seguridad y mantenimiento

Esquema: Copias de seguridad y mantenimiento
Esquema: Copias de seguridad y mantenimiento

Configurar Authelia es solo el principio. Es crucial asegurar copias de seguridad regulares y un mantenimiento oportuno para garantizar la fiabilidad y seguridad de su sistema.

1. Qué respaldar

Para Authelia y sus componentes relacionados, es necesario respaldar los siguientes datos:

  • Archivos de configuración de Authelia: ~/authelia/config/configuration.yml
  • Base de datos de usuarios de Authelia: ~/authelia/config/users_database.yml (si usa el backend de archivos) o datos de la BD (por ejemplo, ~/authelia/config/db.sqlite3 para SQLite). Si utiliza una base de datos externa (PostgreSQL, MySQL), deberá configurar la copia de seguridad de esa base de datos.
  • Configuración de Caddy: ~/authelia/Caddyfile
  • Datos de Caddy: ~/authelia/caddy_data (contiene certificados Let's Encrypt y otros datos de Caddy).

En esencia, necesita respaldar todo el directorio ~/authelia/.

2. Script simple de copia de seguridad automática

Crearemos un script simple que archivará los directorios necesarios y los guardará con una marca de tiempo. Para almacenar las copias de seguridad, se recomienda utilizar un almacenamiento externo, no el mismo VPS.


nano ~/authelia/backup_authelia.sh

Pegue el siguiente contenido:


#!/bin/bash

# Ruta al directorio de Authelia
AUTHELIA_DIR="/home/authelia_admin/authelia" # Reemplace con su ruta

# Directorio para el almacenamiento temporal de copias de seguridad en el VPS
BACKUP_TEMP_DIR="/tmp/authelia_backups"

# Directorio para el almacenamiento de copias de seguridad en un almacenamiento externo (ejemplo para compatible con S3)
# S3_BUCKET="s3://your-s3-bucket/authelia-backups/"
# AWS_CLI_PROFILE="your-aws-profile" # Si usa AWS CLI con un perfil

# Creamos el directorio temporal si no existe
mkdir -p "$BACKUP_TEMP_DIR"

# Formamos el nombre del archivo de copia de seguridad con marca de tiempo
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="authelia_backup_${TIMESTAMP}.tar.gz"
FULL_BACKUP_PATH="${BACKUP_TEMP_DIR}/${BACKUP_FILE}"

echo "Starting Authelia backup at ${TIMESTAMP}..."

# Creamos el archivo
tar -czvf "$FULL_BACKUP_PATH" -C "$(dirname "$AUTHELIA_DIR")" "$(basename "$AUTHELIA_DIR")"

if [ $? -eq 0 ]; then
    echo "Backup created successfully: $FULL_BACKUP_PATH"

    # Ejemplo de subida a almacenamiento compatible con S3 (requiere awscli instalado)
    # sudo apt install awscli -y
    # aws s3 cp "$FULL_BACKUP_PATH" "$S3_BUCKET" --profile "$AWS_CLI_PROFILE"

    # Ejemplo de copia a otro servidor por SCP (requiere clave SSH configurada)
    # scp "$FULL_BACKUP_PATH" user@remote_server:/path/to/remote/backups/

    # Ejemplo de eliminación de copias de seguridad antiguas (mantenemos las últimas 7 días)
    find "$BACKUP_TEMP_DIR" -name "authelia_backup_*.tar.gz" -type f -mtime +7 -delete
    echo "Old backups cleaned from $BACKUP_TEMP_DIR"

else
    echo "Error creating backup."
    exit 1
fi

echo "Authelia backup script finished."

Haga el script ejecutable:


chmod +x ~/authelia/backup_authelia.sh

3. Configuración de Cron para el inicio automático de la copia de seguridad

Agregue una tarea a Cron para que el script de copia de seguridad se ejecute automáticamente, por ejemplo, diariamente a las 3 de la mañana.


crontab -e

Agregue la siguiente línea al final del archivo (si usa authelia_admin):


0 3 * * * /home/authelia_admin/authelia/backup_authelia.sh >> /var/log/authelia_backup.log 2>&1

Esta línea ejecuta el script todos los días a las 03:00 y redirige la salida al archivo de registro /var/log/authelia_backup.log.

4. Dónde almacenar las copias de seguridad

Nunca almacene las copias de seguridad en el mismo servidor donde se encuentran los datos originales. Esto anula el propósito de la copia de seguridad en caso de fallo del disco o compromiso del servidor. Opciones recomendadas:

  • Almacenamiento externo compatible con S3: Barato, fiable, escalable (por ejemplo, MinIO, Wasabi, Backblaze B2). Para trabajar con el script, necesitará awscli.
  • VPS separado: Puede alquilar un VPS pequeño específicamente para almacenar copias de seguridad y copiar archivos allí mediante SCP/SFTP.
  • NAS/almacenamiento local: Si tiene su propio almacenamiento en red, puede configurar la copia allí.

5. Actualizaciones: rolling vs maintenance window

Las actualizaciones regulares son extremadamente importantes para la seguridad y estabilidad de Authelia y Docker.

  • Actualización del SO: Ejecute regularmente sudo apt update && sudo apt upgrade -y. Puede configurar actualizaciones automáticas (unattended-upgrades) para parches de seguridad.
  • Actualización de Docker: Actualice Docker Engine y Docker Compose, siguiendo la documentación oficial. Esto generalmente se hace a través de apt upgrade, ya que hemos agregado el repositorio de Docker.
  • Actualización de Authelia y Caddy: Dado que funcionan en contenedores Docker, la actualización se reduce a actualizar las imágenes y reiniciar los servicios.
  • 
    cd ~/authelia
    docker compose pull authelia caddy # Descarga las últimas versiones de las imágenes
    docker compose up -d               # Recrea los contenedores con las nuevas imágenes
    
  • Estrategia de actualizaciones:
    • Rolling updates (continuas): Para cambios no críticos o si tiene un clúster. En el contexto de un solo VPS, esto significa una actualización sin un tiempo de inactividad prolongado. Para Authelia, esto puede ser una pequeña ventana de inactividad (unos segundos/minutos).
    • Maintenance window (ventana de mantenimiento): Para actualizaciones importantes, migraciones o si tiene servicios críticos. Programe un tiempo, avise a los usuarios y realice la actualización, teniendo la posibilidad de revertir.

Siempre consulte la documentación oficial de Authelia sobre migración antes de actualizaciones importantes, ya que puede haber cambios en la configuración o la base de datos que requieran intervención manual.

Solución de problemas + Preguntas frecuentes

Durante la configuración y operación de Authelia, pueden surgir varios problemas. Aquí se recopilan preguntas típicas y sus soluciones.

1. ¿Qué configuración mínima de VPS es adecuada para Authelia y las aplicaciones protegidas?

Una configuración mínima suficiente para Authelia, Caddy y una o dos aplicaciones ligeras (por ejemplo, Grafana, una pequeña wiki) incluirá 1 vCPU, 1 GB de RAM y 25 GB de SSD. Esto será suficiente para experimentos y una carga baja. Sin embargo, para un trabajo más cómodo y la posibilidad de expansión, se recomienda 2 vCPU, 2-4 GB de RAM y 50 GB de SSD, especialmente si planea proteger servicios más intensivos en recursos o tener varios usuarios activos. Asegúrese de tener suficiente espacio en disco para las imágenes de Docker, los registros y los datos de todas sus aplicaciones.

2. ¿Qué elegir: VPS o dedicado para esta tarea?

Para la mayoría de los escenarios de uso de Authelia (proyectos personales, equipos de hasta 50-100 personas, protección de varios servicios internos), un VPS es la opción óptima. Es significativamente más barato, más fácil de administrar y proporciona un rendimiento suficiente. Un servidor dedicado solo debe considerarse en casos de carga muy alta (miles de usuarios activos), requisitos estrictos de aislamiento de recursos, la necesidad de ejecutar aplicaciones extremadamente intensivas en recursos en el mismo host, o si desea tener control total sobre el hardware y su configuración. Para empezar, siempre es mejor elegir un VPS y, si es necesario, escalar a un dedicado.

3. ¿Por qué Authelia no se inicia o el contenedor se reinicia constantemente?

Qué verificar:

  • Registros del contenedor de Authelia: docker compose logs authelia. Este es el primer lugar donde buscar.
  • Archivo configuration.yml: La mayoría de las veces, los problemas surgen debido a errores de sintaxis (indentación, errores tipográficos) en el archivo YAML o rutas de archivo incorrectas.
  • Variables de entorno: Asegúrese de que AUTHELIA_JWT_SECRET y AUTHELIA_SESSION_SECRET estén configuradas en docker-compose.yml y no estén vacías.
  • Permisos de acceso: Asegúrese de que el contenedor Docker tenga permisos para leer archivos en /config y escribir en /config/db.sqlite3.

Cómo solucionarlo: Corrija los errores en configuration.yml. Utilice validadores YAML en línea. Asegúrese de que todos los secretos estén generados e insertados correctamente. Reinicie los contenedores después de las correcciones: docker compose down && docker compose up -d.

4. ¿No puedo acceder a Authelia por dominio (Caddy no funciona)?

Qué verificar:

  • Registros DNS: Asegúrese de que el dominio (por ejemplo, auth.your_domain.com) apunte a la IP de su VPS. Verifique con dig auth.your_domain.com.
  • Puertos del Firewall: Asegúrese de que los puertos 80 y 443 estén abiertos en su VPS (sudo ufw status).
  • Registros de Caddy: docker compose logs caddy. Busque errores relacionados con TLS o el proxy.
  • Caddyfile: Verifique la sintaxis y la corrección de los dominios y las direcciones de proxy (authelia:9091).
  • Certificados TLS: Si usa Let's Encrypt (tls your_email@your_domain.com), asegúrese de que el dominio sea accesible desde Internet a través de HTTP, de lo contrario Caddy no podrá obtener el certificado.

Cómo solucionarlo: Corrija el DNS, abra los puertos, verifique el Caddyfile. Si hay un problema con Let's Encrypt, use temporalmente tls internal para verificar, y luego vuelva a Let's Encrypt después de resolver los problemas de accesibilidad del dominio.

5. ¿Después de iniciar sesión en Authelia no me redirige a la aplicación, o la aplicación no ve al usuario?

Qué verificar:

  • Caddyfile para la aplicación: Asegúrese de que el bloque para su aplicación (por ejemplo, app.your_domain.com) esté configurado correctamente para el proxy a través de Authelia y que transmita los encabezados necesarios (Remote-User, Remote-Email, etc.).
  • Dirección de la aplicación protegida: Asegúrese de que reverse_proxy localhost:PORT o service_name:PORT apunte a la dirección y puerto correctos de su aplicación.
  • Configuración de Authelia (access_control): Asegúrese de que las reglas de acceso en configuration.yml estén configuradas correctamente para el dominio de su aplicación.
  • Registros de la aplicación: Verifique los registros de su aplicación protegida. Es posible que no esté configurada para leer los encabezados transmitidos por Authelia, o que espere un formato diferente.

Cómo solucionarlo: Verifique el Caddyfile y configuration.yml. Asegúrese de que su aplicación admita la autenticación basada en encabezados HTTP (Header-based authentication) o OpenID Connect (OIDC), si ha configurado Authelia para OIDC. Muchas aplicaciones tienen opciones para la integración con la autenticación de proxy (por ejemplo, Nginx/Caddy auth_request).

6. ¿No funciona 2FA (TOTP) o el restablecimiento de contraseña?

Qué verificar:

  • Configuración de SMTP: En configuration.yml, verifique la sección notifier.smtp. Asegúrese de que el host, puerto, nombre de usuario, contraseña y remitente estén especificados correctamente. Verifique los registros de Authelia en busca de errores de envío de correo.
  • TOTP Issuer: Asegúrese de que TOTP.issuer en configuration.yml sea correcto, esto afecta la visualización en el autenticador.
  • Sincronización de tiempo: Asegúrese de que la hora en su VPS esté sincronizada (timedatectl). Las discrepancias pueden causar problemas con TOTP.

Cómo solucionarlo: Corrija la configuración de SMTP. Instale ntp o systemd-timesyncd para sincronizar la hora en el VPS. Si hay un problema con TOTP, intente reconfigurarlo en Authelia.

Conclusiones y próximos pasos

Esquema: Conclusiones y próximos pasos
Esquema: Conclusiones y próximos pasos

¡Felicidades! Ha configurado Authelia con éxito en su VPS, proporcionando autenticación centralizada y protección de doble factor para sus aplicaciones web. Ahora sus servicios están protegidos por un único punto de entrada, lo que mejora significativamente la seguridad y simplifica la gestión de acceso para usted y su equipo.

¿Qué sigue?

  1. Integración de más aplicaciones: Continúe integrando todos sus servicios web (GitLab, Nextcloud, Grafana, Prometheus, Portainer, etc.) con Authelia, añadiendo los bloques correspondientes en Caddyfile y las reglas en access_control de Authelia.
  2. Funcionalidades de autenticación avanzadas: Considere integrar Authelia con proveedores de identidad externos, como OpenLDAP, Active Directory o incluso servicios compatibles con OIDC, si necesita gestionar un gran número de usuarios o utilizar una infraestructura existente.
  3. Monitorización y registro: Configure el registro centralizado (por ejemplo, con Loki/Promtail o ELK Stack) para Authelia y Caddy, para rastrear intentos de inicio de sesión, errores y actividad de los usuarios. Esto ayudará a identificar y resolver rápidamente los problemas de seguridad.

Authelia es una herramienta potente que le otorga control total sobre la seguridad de sus aplicaciones self-hosted. Continúe explorando sus capacidades para fortalecer aún más la protección de sus activos digitales.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Configuración de Authelia en VPS para autenticación centralizada y protección de dos factores
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.