Skip to content

Introducción

Kerberos SSO (Single Sign-On) permite un inicio de sesión sin interrupciones para sus agentes a través de Active Directory, sin necesidad de transmitir contraseñas en texto plano. En una instalación de OTOBO basada en Docker, esto se logra ejecutando NGINX como proxy web con el módulo SPNEGO, que se compila en un contenedor "builder" separado. Posteriormente, el módulo generado dinámicamente (ngx_http_auth_spnego_module.so) se transfiere al contenedor NGINX real y la configuración predeterminada se reemplaza por una compatible con Kerberos :contentReference[oaicite:0]{index=0}. De esta manera, seguimos las mejores prácticas del proyecto oficial de Docker de OTOBO, que implementa una clara separación entre las etapas de compilación y ejecución.

En este artículo obtendrá:

  • Una visión general completa de las diferencias entre OTOBO y Znuny en el contexto de Kerberos SSO.
  • Una guía paso a paso desde la preparación de AD, la creación de keytab hasta la configuración de Docker.
  • Consejos para la depuración, la configuración del navegador y las mejores prácticas para diferentes versiones de OTOBO.

Diferencias entre OTOBO y Znuny

Aunque OTOBO y Znuny son funcionalmente muy similares (ambos provienen del proyecto original OTRS), existen los siguientes ajustes finos en el contexto de Kerberos:

  • Rutas de configuración: OTOBO utiliza /opt/otobo-docker/nginx-conf/krb5.conf por defecto, mientras que Znuny suele utilizar /opt/znuny/nginx-conf/krb5.conf.
  • Archivos de plantilla: Las plantillas de NGINX difieren ligeramente en nombres y sintaxis de marcadores de posición; OTOBO proporciona un archivo otobo_nginx-kerberos.conf.template, mientras que Znuny proporciona un archivo con nombre similar znuny_nginx-kerberos.conf.template.
  • Versionado: OTOBO 11.x incluye parámetros SSO ampliados ("KerberosAdminServer", "KerberosDefaultDomain"), que aún faltan en Znuny 6.x.

Requisitos previos

  1. Active Directory con Kerberos (Realm y KDC ya configurados).
  2. Una configuración de OTOBO Docker según Instalación oficial con Docker :contentReference[oaicite:2]{index=2}.
  3. Registros DNS:
    • Un registro A para su FQDN de OTOBO (¡no un CNAME!), por ejemplo, otobo.example.com → 192.0.2.10.
    • Búsqueda inversa para el nombre de host, para que las resoluciones SPN de Kerberos funcionen.

1. Usuarios de Active Directory y SPN

1.1 Crear usuario

Cree una cuenta de servicio dedicada en su AD, por ejemplo, HTTP/otobo.example.com (UserPrincipalName). Tenga en cuenta:

  • Mayúsculas en HTTP/; Kerberos espera exactamente este prefijo :contentReference[oaicite:3]{index=3}.
  • No utilice caracteres especiales en la contraseña (por ejemplo, &).

1.2 Generar SPN y Keytab

Inicie sesión en un DC con derechos de administrador y utilice ktpass.exe:

bash
ktpass.exe \
 -princ HTTP/otobo.example.com@EXAMPLE.COM \
 -mapUser EXAMPLE\\otobo-svc \
 -crypto All \
 -pass SvcUserPassword \
 -ptype KRB5_NT_PRINCIPAL \
 -out C:\krb5.keytab
  • -princ: SPN con Realm en mayúsculas.
  • -mapUser: Nombre de cuenta SAM (pre-W2K), por ejemplo, otobo-svc (doc.otobo.de).
  • -out: Ruta a la keytab en el DC.

A continuación, mueva la keytab al host de Docker:

bash
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab

2. NGINX con módulo SPNEGO

2.1 Etapa de compilación en Dockerfile

El Dockerfile oficial utiliza un compilador separado con los paquetes de desarrollo necesarios:

dockerfile
FROM nginx:mainline AS builder-for-kerberos
...
RUN apt-get update && apt-get install -y gcc libc-dev make libpcre3-dev zlib1g-dev libkrb5-dev wget
WORKDIR /usr/src
RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \
 && wget https://github.com/stnoonan/spnego-http-auth-nginx-module/archive/${SPNEGO_AUTH_COMMIT_ID}.tar.gz
RUN tar -xzf nginx.tar.gz \
 && tar -xzf spnego-http-auth.tar.gz \
 && cd nginx-${NGINX_VERSION} \
 && ./configure --with-compat ${NGINX_CONFIG} --add-dynamic-module=../spnego-http-auth-nginx-module-${SPNEGO_AUTH_COMMIT_ID_FILE} \
 && make modules \
 && cp objs/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules/

Esto compila el módulo SPNEGO de forma compatible con su versión de NGINX (extras.getpagespeed.com).

2.2 Configuración en el contenedor en tiempo de ejecución

dockerfile
FROM nginx:mainline AS otobo-nginx-kerberos-webproxy

COPY --from=builder-for-kerberos /usr/lib/nginx/modules/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules

RUN apt-get update && apt-get install -y krb5-user libpam-krb5 libpam-ccreds krb5-multidev libkrb5-dev

COPY templates/ kerberos/templates
COPY docker-entrypoint.d/21-envsubst-on-krb5-conf.sh /docker-entrypoint.d/
RUN sed -i '4i load_module modules/ngx_http_auth_spnego_module.so;' /etc/nginx/nginx.conf
  • Carga de módulo: Inserte load_module en la línea 4.
  • Los scripts Envsubst generan /etc/krb5.conf a partir de datos de plantilla.

3. Volúmenes de Docker y plantillas de Nginx

3.1 Crear volumen personalizado

bash
docker volume create otobo_nginx_custom_config
mp=$(docker volume inspect --format '{{ .Mountpoint }}' otobo_nginx_custom_config)
docker create --name tmp-nginx rotheross/otobo-nginx-webproxy:latest-11_0
docker cp tmp-nginx:/etc/nginx/templates/otobo_nginx-kerberos.conf.template.hidden $mp/otobo_nginx.conf.template
docker rm tmp-nginx

3.2 docker-compose-Override

Cree docker-compose/otobo-nginx-custom-config.yml:

yaml
version: '3.7'
services:
  nginx:
    volumes:
      - otobo_nginx_custom_config:/etc/nginx/config/template-custom

Habilítelo en el .env principal:

dotenv
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom

4. Modificaciones de .env

  1. Haga una copia de seguridad de su antiguo /opt/otobo-docker/.env:

    bash
    mv .env .env.bak
    cp .docker_compose_env_https_kerberos .env
  2. Agregue las variables de Kerberos:

    dotenv
    OTOBO_NGINX_KERBEROS_KEYTAB=/opt/otobo-docker/nginx-conf/krb5.keytab
    OTOBO_NGINX_KERBEROS_CONFIG=/opt/otobo-docker/nginx-conf/krb5.conf
    OTOBO_NGINX_KERBEROS_SERVICE_NAME=HTTP/otobo.example.com
    OTOBO_NGINX_KERBEROS_REALM=EXAMPLE.COM
    OTOBO_NGINX_KERBEROS_KDC=dc1.example.com
    OTOBO_NGINX_KERBEROS_ADMIN_SERVER=dc1.example.com
    OTOBO_NGINX_KERBEROS_DEFAULT_DOMAIN=example.com
  3. Copie los certificados SSL y las contraseñas de la base de datos de su antiguo .env.bak.

Luego, inicie con:

bash
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.

## 5. Configuración de OTOBO

### 5.1 Módulo de autenticación en `Kernel/Config.pm`

Comente la autenticación LDAP/DB y agregue en su `Kernel/Config.pm`:
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';

Esto interpreta REMOTE_USER correctamente como inicio de sesión (doc.otobo.de).

5.2 Activación en la interfaz de administración

  • Configuración del sistema:

    • Establezca Customer::AuthModule en HTTPBasicAuth.
    • Copie AuthModule::HTTPBasicAuth::ReplaceRegExp.
  • Kernel/Config -> Ejecute Deploy.

6. Configuración del navegador

Para que SPNEGO funcione, su navegador debe aceptar el host como confiable:

Chrome / Edge / IE

  • "Opciones de Internet" → SeguridadSitios de la Intranet localSitios
  • Agregue el dominio https://otobo.example.com y active la "Autenticación integrada de Windows" (doc.otobo.de).

Firefox

  • Ingrese about:config en la barra de direcciones.
  • network.negotiate-auth.trusted-uris = https://otobo.example.com
  • network.negotiate-auth.delegation-uris = https://otobo.example.com

7. Depuración y solución de problemas

  1. Verificar registros de NGINX

    bash
    docker logs otobo_nginx_1 -f
  2. Acceder al contenedor

    bash
    docker exec -it otobo_nginx_1 bash
    cat /etc/krb5.conf
    klist -e
  3. Obtener token SPN

    bash
    env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
  4. Probar Keytab

    bash
    kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM

    Error KDC cannot fulfill request → DNS/SPN incorrecto (plugins.miniorange.com).

8. Mejores prácticas y seguridad

  • Keytab propia: Nunca reutilice la cuenta de servicio de sincronización LDAP, evite colisiones de contraseñas.
  • Principio de menor privilegio: Otorgue solo los derechos de AD mínimos necesarios para la cuenta SSO.
  • Rotación de Keytab: Renueve periódicamente la keytab cada 90 días.
  • TLS para KDC: Si es posible, active ldaps:// o GSSAPI sobre TLS.
  • Monitoreo: Supervise automáticamente los tickets de Kerberos con herramientas como klist y kvno.

Con esta guía completa, su instancia de OTOBO Docker estará óptimamente preparada para Kerberos SSO: ¡autenticación segura, mantenible y escalable incluida!


Fuentes: