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.confpor 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 similarznuny_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
- Active Directory con Kerberos (Realm y KDC ya configurados).
- Una configuración de OTOBO Docker según Instalación oficial con Docker :contentReference[oaicite:2]{index=2}.
- 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.
- Un registro A para su FQDN de OTOBO (¡no un CNAME!), por ejemplo,
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:
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:
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab2. 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:
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
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_moduleen la línea 4. - Los scripts Envsubst generan
/etc/krb5.confa partir de datos de plantilla.
3. Volúmenes de Docker y plantillas de Nginx
3.1 Crear volumen personalizado
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-nginx3.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-customHabilítelo en el .env principal:
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom4. Modificaciones de .env
Haga una copia de seguridad de su antiguo
/opt/otobo-docker/.env:bashmv .env .env.bak cp .docker_compose_env_https_kerberos .envAgregue las variables de Kerberos:
dotenvOTOBO_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.comCopie los certificados SSL y las contraseñas de la base de datos 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 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::AuthModuleenHTTPBasicAuth. - Copie
AuthModule::HTTPBasicAuth::ReplaceRegExp.
- Establezca
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" → Seguridad → Sitios de la Intranet local → Sitios
- Agregue el dominio
https://otobo.example.comy active la "Autenticación integrada de Windows" (doc.otobo.de).
Firefox
- Ingrese
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 solución de problemas
Verificar registros de NGINX
bashdocker logs otobo_nginx_1 -fAcceder al contenedor
bashdocker exec -it otobo_nginx_1 bash cat /etc/krb5.conf klist -eObtener token SPN
bashenv KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COMProbar Keytab
bashkinit -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
- 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
klistykvno.
Con esta guía completa, su instancia de OTOBO Docker estará óptimamente preparada para Kerberos SSO: ¡autenticación segura, mantenible y escalable incluida!
Fuentes:
- rotheross/otobo-nginx-kerberos-webproxy en Docker Hub (hub.docker.com)
- Módulo SPNEGO HTTP Auth NGINX (stnoonan) (extras.getpagespeed.com)
- Documentación oficial de instalación de OTOBO (11.0 SSO Kerberos) (doc.otobo.de)
- Issue de GitHub #81: NGINX Kerberos roto (github.com)
- Guía de configuración de Kerberos SSO de miniOrange (plugins.miniorange.com)
- OTOBO Docker Override HTTPS-Kerberos (github.com)
- Manuales para desarrolladores y administradores de OTOBO
- Microsoft Docs: ktpass.exe (community.znuny.org)
- Mozilla MDN: SPNEGO en Firefox (doc.otobo.de)
- Documentación de NGINX: módulos dinámicos (extras.getpagespeed.com)