← Blog

Alexis · 2026-09-29

SSO autoalojado con Authentik y Samba 4 AD

El single sign-on suena como un lujo empresarial hasta que gestionas un homelab con quince servicios y una contraseña diferente para cada uno. En ese momento deja de ser algo agradable y se convierte en un problema de seguridad real. Una credencial comprometida puede dar a un atacante acceso a todo; una revocación olvidada deja a un antiguo miembro del equipo con acceso mucho después de lo que debería.

La solución que uso combina Samba 4 Active Directory en Linux como almacén central de identidades, y Authentik como proveedor OIDC/OAuth2 que conecta el directorio AD con cada aplicación que necesita autenticación.

¿Por qué Samba 4 AD?

Samba 4 en Linux ofrece un controlador de dominio Active Directory completamente funcional — realm Kerberos, directorio LDAP, DNS y Group Policy — sin licencia de Windows Server. Cualquier servicio que sepa hablar LDAP (que es la mayoría) puede consultarlo directamente. Cualquier aplicación moderna que soporte OIDC puede pasar por Authentik, que a su vez consulta el mismo directorio Samba mediante su outpost LDAP.

El resultado: una cuenta de usuario, una contraseña, un único lugar para desactivar el acceso.

Arquitectura

flowchart TD
    classDef user fill:#f9f9f9,stroke:#333,stroke-width:2px;
    classDef auth fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;
    classDef app fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
    classDef dir fill:#e1f5fe,stroke:#01579b,stroke-width:2px;

    User([Navegador])

    subgraph Identity [Capa de Identidad]
        Samba["Samba 4 AD\nKerberos · LDAP · DNS"]
        Authentik["Authentik\nOIDC · OAuth2 · SAML · Forward Auth"]
    end

    subgraph Apps [Aplicaciones]
        Forgejo["Forgejo"]
        Grafana["Grafana"]
        Proxmox["Proxmox VE"]
        Other["Cualquier app\nvía Forward Auth"]
    end

    NGINX["NGINX\nProxy Forward Auth"]

    User -->|login| Authentik
    Authentik -->|LDAP bind| Samba
    Authentik -->|token OIDC| Forgejo
    Authentik -->|token OIDC| Grafana
    Authentik -->|token OIDC| Proxmox
    User --> NGINX
    NGINX -->|auth_request| Authentik
    NGINX -->|autenticado| Other

    class User user;
    class Samba,Authentik auth;
    class Forgejo,Grafana,Proxmox,Other app;
    class NGINX dir;

Configurar Samba 4 AD

Samba 4 corre como contenedor LXC en Proxmox. El aprovisionamiento se realiza con un único comando samba-tool domain provision:

samba-tool domain provision \
  --domain=HOME \
  --realm=HOME.INTERNAL \
  --server-role=dc \
  --dns-backend=SAMBA_INTERNAL \
  --adminpass='TuContraseñaSegura'

Tras el aprovisionamiento, el contenedor proporciona un KDC Kerberos, un servidor LDAP en el puerto 389 y DNS para la zona home.internal. El host Proxmox y todos los nodos LXC/VM apuntan su DNS a este contenedor.

Pasos clave posteriores al aprovisionamiento:

Conectar Authentik

Authentik corre como contenedor separado. Tras la configuración inicial, configura una fuente LDAP apuntando al contenedor Samba:

Authentik sincroniza usuarios y grupos desde AD de forma programada. Cuando un usuario inicia sesión a través de Authentik, la contraseña se valida contra Kerberos mediante el bind LDAP — Authentik nunca almacena la contraseña.

OIDC para integraciones nativas

Para aplicaciones con soporte OIDC nativo, crea un Proveedor OAuth2/OIDC en Authentik y una Aplicación correspondiente:

Cada aplicación obtiene su propio client ID y secret. El acceso está controlado por políticas de Authentik — puedes exigir MFA para Proxmox mientras permites solo contraseña para Grafana.

Forward Auth para todo lo demás

Para aplicaciones sin soporte OIDC, NGINX Forward Auth es la solución. Cada petición pasa por NGINX, que llama al endpoint /outpost.goauthentik.io/auth/nginx de Authentik antes de reenviar al upstream:

location / {
    auth_request /outpost.goauthentik.io/auth/nginx;
    auth_request_set $authentik_username $upstream_http_x_authentik_username;
    error_page 401 = @authentik_redirect;
    proxy_pass http://upstream;
}

El outpost de Authentik gestiona el flujo de login y establece cabeceras de identidad. La aplicación upstream recibe X-Authentik-Username y X-Authentik-Groups sin necesitar saber nada sobre OIDC.

Revocación

Cuando alguien se va, deshabilita su cuenta de AD. Esa única acción:

Sin tener que buscar por los paneles de administración de cada aplicación. Un cambio, revocación completa.

Stack

Samba 4 · Authentik · NGINX Forward Auth · Proxmox LXC · Kerberos · LDAP