Skip to content

Introducción

Kerberos SSO (Single Sign-On) permite una autenticación sin problemas de sus agentes a través de Active Directory, sin que se transmitan contraseñas en texto plano. En una instalación de OTOBO basada en Docker, se utiliza NGINX como proxy web con el módulo SPNEGO, que se compila en un contenedor "builder" separado. Luego, el módulo generado dinámicamente (ngx_http_auth_spnego_module.so) se transfiere al contenedor NGINX real y se reemplaza la configuración estándar con una configuración compatible con Kerberos :contentReference[oaicite:0]{index=0}.
De esta manera, seguimos el procedimiento establecido en el proyecto de Docker de OTOBO oficial, que realiza 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 hasta la creación de Keytab y la configuración de Docker.
  • Consejos para depuración, configuración del navegador y 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 OTRS original), existen ajustes finos en el contexto de Kerberos:

  • Rutas de configuración: OTOBO utiliza de forma predeterminada /opt/otobo-docker/nginx-conf/krb5.conf, mientras que Znuny utiliza generalmente /opt/znuny/nginx-conf/krb5.conf.
  • Archivos de plantilla: Las plantillas de NGINX difieren ligeramente en nombre y sintaxis de marcadores; OTOBO proporciona un archivo otobo_nginx-kerberos.conf.template, mientras que Znuny ofrece uno similar llamado znuny_nginx-kerberos.conf.template.
  • Versionado: OTOBO 11.x introduce parámetros SSO extendidos ("KerberosAdminServer", "KerberosDefaultDomain") que faltan en Znuny 6.x.

Requisitos previos

  1. Active Directory con Kerberos (Realm y KDC ya configurados).
  2. Una instalación de OTOBO con Docker según la documentación oficial de instalación 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 del host, para que funcionen las resoluciones de SPN de Kerberos.

1. Usuario y SPN de Active Directory

1.1 Crear usuario

Cree en su AD una cuenta de servicio dedicada, 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][1]).
  • -out: Ruta a la Keytab en el DC.

Luego, 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 constructor 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/

De esta manera, se compila el módulo SPNEGO compatible con su versión de NGINX ([extras.getpagespeed.com][2]).

2.2 Configuración en el contenedor de 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 del módulo: load_module en la línea 4.
  • Scripts de envsubst: generan /etc/krb5.conf a partir de datos de plantilla.

3. Volúmenes de Docker y plantillas de NGINX

3.1 Crear un 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 Anulación de docker-compose

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

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

Active en el archivo .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. Ajustes de .env

  1. Guarde 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. Certificados SSL y contraseñas de base de datos desde 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'} = '^(.+?)@.+?$';
```
De esta manera, `REMOTE_USER` se interpreta correctamente como inicio de sesión ([doc.otobo.de][1]).

### 5.2 Activación en la interfaz de administración

* **Configuración del sistema**:

    * Establezca `Customer::AuthModule` en `HTTPBasicAuth`.
    * Establezca `AuthModule::HTTPBasicAuth::ReplaceRegExp`.
* **Kernel/Config** -> **Implementar**.

## 6. Configuración del navegador

Para que funcione SPNEGO, su navegador debe aceptar el host como **de confianza**:

### Chrome / Edge / IE

* „Opciones de Internet“ → **Seguridad** → **Sitios de intranet local** → **Sitios**
* Agregue el dominio `https://otobo.example.com` y active la „Autenticación integrada de Windows“ ([doc.otobo.de][1]).

### Firefox

* `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. **Revisar registros de NGINX**

   ```bash
   docker logs otobo_nginx_1 -f
   ```
2. **Ingresar 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][3]).

## 8. Mejores prácticas y seguridad

* **Keytab propio**: Nunca reutilice la cuenta de servicio de sincronización de LDAP; evite colisiones de contraseñas.
* **Privilegios mínimos**: Otorgue solo los derechos de AD mínimamente necesarios para la cuenta de SSO.
* **Rotación de Keytab**: Renueve el Keytab cada 90 días.
* **TLS para KDC**: Active `ldaps://` o GSSAPI sobre TLS si es posible.
* **Monitoreo**: Monitoree con herramientas como `klist` y `kvno` los tickets de Kerberos de forma automática.

---

Con esta guía completa, su instalación de OTOBO Docker está óptimamente preparada para Kerberos SSO – autenticación segura, mantenible y escalable incluida!

---

**Fuentes:**

* rotheross/otobo-nginx-kerberos-webproxy en Docker Hub ([hub.docker.com][4])
* Módulo SPNEGO HTTP Auth NGINX (stnoonan) ([extras.getpagespeed.com][2])
* Documentación oficial de instalación de OTOBO (11.0 SSO Kerberos) ([doc.otobo.de][1])
* Problema #81 de GitHub: NGINX Kerberos roto ([github.com][5])
* Guía de configuración de Kerberos SSO de miniOrange ([plugins.miniorange.com][3])
* Anulación de OTOBO Docker para HTTPS-Kerberos ([github.com][6])
* Manuales de desarrollo y administración de OTOBO
* Microsoft Docs: ktpass.exe ([community.znuny.org][7])
* MDN de Mozilla: SPNEGO en Firefox ([doc.otobo.de][1])
* Documentos de NGINX: módulos dinámicos ([extras.getpagespeed.com][2])

[1]: https://doc.otobo.de/manual/installation/11.0/es/content/sso-kerberos.html?utm_source=chatgpt.com "Kerberos Single Sign On en la instalación de OTOBO Docker"
[2]: https://extras.getpagespeed.com/redhat/9/x86_64/repoview/nginx-module-spnego-http-auth.html?utm_source=chatgpt.com "nginx-module-spnego-http-auth en CentOS/RHEL 9 (x86_64)"
[3]: https://plugins.miniorange.com/guide-to-setup-kerberos-single-sign-sso?utm_source=chatgpt.com "Configuración de Kerberos SSO: una guía de configuración completa"
[4]: https://hub.docker.com/r/rotheross/otobo-nginx-kerberos-webproxy?utm_source=chatgpt.com "rotheross/otobo-nginx-kerberos-webproxy - Docker Hub"
[5]: https://github.com/RotherOSS/otobo-docker/issues/81?utm_source=chatgpt.com "NGINX Kerberos parece estar roto · Issue #81 · RotherOSS/otobo-docker"
[6]: https://github.com/RotherOSS/otobo-docker/blob/rel-10_1/.docker_compose_env_https_kerberos?utm_source=chatgpt.com "otobo-docker/.docker_compose_env_https_kerberos at rel-10_1"
[7]: https://community.znuny.org/viewtopic.php?t=28160&utm_source=chatgpt.com "Autenticación SSO del cliente no funciona, Kerberos funciona"