Sso Kerberos
Introducción
Sección titulada «Introducción»Kerberos SSO (Single Sign-On) permite un inicio de sesión fluido 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, para esto se utiliza NGINX como Webproxy con el módulo SPNEGO, el cual se compila en un contenedor “builder” independiente. Posteriormente, el módulo generado dinámicamente (ngx_http_auth_spnego_module.so) se transfiere al contenedor NGINX real y la configuración estándar se reemplaza por una compatible con Kerberos :contentReference[oaicite:0]{index="0"}.
Con esto, seguimos el procedimiento probado en el proyecto oficial de OTOBO Docker, que implementa una clara separación entre las etapas de Build y Runtime.
En este artículo obtendrá:
- Una visión general completa sobre las diferencias entre OTOBO y Znuny en el contexto de Kerberos SSO.
- Una guía paso a paso desde la preparación de AD y la creación de Keytab hasta la configuración de Docker.
- Consejos sobre depuración, configuración del navegador y mejores prácticas para diferentes versiones de OTOBO.
Diferencias con otros sistemas
Sección titulada «Diferencias con otros sistemas»Aunque OTOBO y Znuny son funcionalmente muy similares (ambos provienen del proyecto original OTRS), existen los siguientes ajustes específicos en el contexto de Kerberos:
- Rutas de configuración: OTOBO utiliza por defecto
/opt/otobo-docker/nginx-conf/krb5.conf, mientras que Znuny generalmente utiliza/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, Znuny uno similar llamadoznuny_nginx-kerberos.conf.template. - Versionado: OTOBO 11.x incluye parámetros de SSO extendidos (“KerberosAdminServer”, “KerberosDefaultDomain”) que aún no están presentes en Znuny 6.x.
Requisitos previos
Sección titulada «Requisitos previos»- Active Directory con Kerberos (Realm y KDC ya configurados).
- Una configuración de OTOBO Docker según la Instalación oficial con Docker :contentReference[oaicite:2]{index="2"}.
- Entradas DNS:
- Un registro A para su FQDN de OTOBO (¡no un CNAME!), p. ej.,
otobo.example.com → 192.0.2.10. - Búsqueda inversa (Reverse-Lookup) para el nombre de host, para que las resoluciones SPN de Kerberos funcionen.
- Un registro A para su FQDN de OTOBO (¡no un CNAME!), p. ej.,
1. Usuario de Active Directory y SPN
Sección titulada «1. Usuario de Active Directory y SPN»1.1 Crear usuario
Sección titulada «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 utilizar caracteres especiales en la contraseña (p. ej.,
&).
1.2 Generar SPN y Keytab
Sección titulada «1.2 Generar SPN y Keytab»Inicie sesión en un DC con privilegios de administrador y utilice ktpass.exe:
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), p. ej.,otobo-svc(doc.otobo.de).-out: Ruta a la Keytab en el DC.
A continuación, mueva la Keytab al host de Docker:
docker_admin> mkdir -p /opt/otobo-docker/nginx-confdocker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab2. NGINX con módulo SPNEGO
Sección titulada «2. NGINX con módulo SPNEGO»2.1 Etapa de Build en Dockerfile
Sección titulada «2.1 Etapa de Build en Dockerfile»El Dockerfile oficial utiliza un builder independiente con los paquetes de desarrollo necesarios:
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 wgetWORKDIR /usr/srcRUN 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.gzRUN 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/Con esto, el módulo SPNEGO se compila de forma compatible con su versión de NGINX (extras.getpagespeed.com).
2.2 Configuración en el contenedor de Runtime
Sección titulada «2.2 Configuración en el contenedor de Runtime»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/templatesCOPY 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: Insertar
load_moduleen la línea 4. - Scripts Envsubst: Generan
/etc/krb5.confa partir de los datos de la plantilla.
3. Volúmenes de Docker y plantillas de NGINX
Sección titulada «3. Volúmenes de Docker y plantillas de NGINX»3.1 Crear volumen personalizado
Sección titulada «3.1 Crear volumen personalizado»docker volume create otobo_nginx_custom_configmp=$(docker volume inspect --format '{{ .Mountpoint }}' otobo_nginx_custom_config)docker create --name tmp-nginx rotheross/otobo-nginx-webproxy:latest-11_0docker cp tmp-nginx:/etc/nginx/templates/otobo_nginx-kerberos.conf.template.hidden $mp/otobo_nginx.conf.templatedocker rm tmp-nginx3.2 docker-compose-Override
Sección titulada «3.2 docker-compose-Override»Cree docker-compose/otobo-nginx-custom-config.yml:
version: '3.7'services: nginx: volumes: - otobo_nginx_custom_config:/etc/nginx/config/template-customActive en el .env principal:
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.ymlNGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom4. Ajustes en .env
Sección titulada «4. Ajustes en .env»-
Haga una copia de seguridad de su antiguo
/opt/otobo-docker/.env:Ventana de terminal mv .env .env.bakcp .docker_compose_env_https_kerberos .env -
Añada las variables de Kerberos:
OTOBO_NGINX_KERBEROS_KEYTAB=/opt/otobo-docker/nginx-conf/krb5.keytabOTOBO_NGINX_KERBEROS_CONFIG=/opt/otobo-docker/nginx-conf/krb5.confOTOBO_NGINX_KERBEROS_SERVICE_NAME=HTTP/otobo.example.comOTOBO_NGINX_KERBEROS_REALM=EXAMPLE.COMOTOBO_NGINX_KERBEROS_KDC=dc1.example.comOTOBO_NGINX_KERBEROS_ADMIN_SERVER=dc1.example.comOTOBO_NGINX_KERBEROS_DEFAULT_DOMAIN=example.com -
Importe los certificados SSL y las contraseñas de DB de su antiguo
.env.bak.
Luego inicie con:
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 añada en su `Kernel/Config.pm`:```perl$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';Con esto, REMOTE_USER se interpreta correctamente como inicio de sesión (doc.otobo.de).
5.2 Activación en la interfaz de administración
Sección titulada «5.2 Activación en la interfaz de administración»-
Configuración del sistema:
- Establecer
Customer::AuthModuleenHTTPBasicAuth. - Aplicar
AuthModule::HTTPBasicAuth::ReplaceRegExp.
- Establecer
-
Kernel/Config -> Ejecutar Deploy.
6. Configuración del navegador
Sección titulada «6. Configuración del navegador»Para que SPNEGO funcione, su navegador debe aceptar el host como de confianza:
Chrome / Edge / IE
Sección titulada «Chrome / Edge / IE»- “Opciones de Internet” → Seguridad → Sitios de intranet local → Sitios
- Añadir el dominio
https://otobo.example.comy activar “Autenticación integrada de Windows” (doc.otobo.de).
Firefox
Sección titulada «Firefox»- Escriba
about:configen la barra de direcciones. network.negotiate-auth.trusted-uris = https://otobo.example.comnetwork.negotiate-auth.delegation-uris = https://otobo.example.com
7. Depuración y resolución de problemas
Sección titulada «7. Depuración y resolución de problemas»-
Comprobar logs de NGINX
Ventana de terminal docker logs otobo_nginx_1 -f -
Acceder al contenedor
Ventana de terminal docker exec -it otobo_nginx_1 bashcat /etc/krb5.confklist -e -
Obtener token SPN
Ventana de terminal env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM -
Probar Keytab
Ventana de terminal kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COMError
KDC cannot fulfill request→ DNS/SPN incorrecto (plugins.miniorange.com).
8. Mejores prácticas y seguridad
Sección titulada «8. Mejores prácticas y seguridad»- Keytab propia: Nunca reutilice la cuenta de servicio de sincronización LDAP, evite colisiones de contraseñas.
- Least Privilege: Asigne solo los derechos de AD mínimos necesarios para la cuenta de SSO.
- Rotación de Keytab: Renueve la Keytab regularmente cada 90 días.
- TLS para KDC: Si es posible, active
ldaps://o GSSAPI sobre TLS. - Monitoreo: Supervise los tickets de Kerberos de forma automatizada con herramientas como
klistykvno.
¡Con esta guía completa, su instancia de OTOBO Docker está óptimamente preparada para Kerberos SSO, incluyendo una autenticación segura, mantenible y escalable!
Fuentes:
- rotheross/otobo-nginx-kerberos-webproxy en Docker Hub (hub.docker.com)
- SPNEGO HTTP Auth NGINX Module (stnoonan) (extras.getpagespeed.com)
- Documentación oficial de instalación de OTOBO (11.0 SSO Kerberos) (doc.otobo.de)
- GitHub Issue #81: NGINX Kerberos broken (github.com)
- miniOrange Kerberos SSO Guide (plugins.miniorange.com)
- OTOBO Docker Override HTTPS-Kerberos (github.com)
- Manuales de desarrollador y administrador de OTOBO
- Microsoft Docs: ktpass.exe (community.znuny.org)
- Mozilla MDN: SPNEGO en Firefox (doc.otobo.de)
- NGINX Docs: dynamic modules (extras.getpagespeed.com)