Configuraciones avanzadas para servidores LDAP en Debian

De WikiSalud
Revisión a fecha de 10:27 12 jul 2019; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Contenido

Resumen

Configuración de características avanzadas en un servidor LDAP con OpenLDAP sobre Debian, tales como conexiones cifradas, registro de autenticación y replicación

Introducción

Las siguientes configuraciones no son esencialmente necesaria para el funcionamiento de un servidor con openLDAP, pero son vitales para cualquier organización que tenga un mínimo cuidado de la seguridad de sus servicios. LDAP, en su mayoría, puede llegar a tener bastante información sensible.

Configuración previa del Servidor

Configuración de SSL/TLS

Independiente de la forma en que decida firmarlos (O lo que es casi lo mismo, la forma en que va a administrarlos), usted debe poseer los siguiente ficheros:

$server.crt
$server.key
CA-autoridad_certificadora.crt

Este último puede venir en un .bundle. En cualquier caso, Certificados Digitales con GNUTLS puede servirle como referencia.

Con un certificado directo

Suponga que un administrador, confiable, le pasa los tres ficheros anteriores. Lo que necesita es asegurarse de tener instalado el paquete

aptitude install ssl-cert

Con un proceso para firma de certificado

Usted debe solicitar a una autoridad certificadora (Que puede ser usted mismo) que le firme un certificado, así que instale los paquetes necesarios

aptitude install ssl-cert gnutls-bin

E inicie todo el proceso para solicitar la firma a su Autoridad Certificadora

Procedimiento

Agregue el usuario openldap al grupo ssl-cert, facilitará la concesión de permisos

usermod -a -G ssl-cert openldap

Reiniciamos el servidor LDAP para dar cuenta del cambio en los permisos

systemctl restart slapd.service

Cree un directorio para crear y almacenar sus certificados. Recuerde que ya que son la base para el cifrado de sus servidores, la seguridad de los mismos debe ser su prioridad.

mkdir -p /root/srv/certs
cd /root/srv/certs

Cuando los tenga, prepare los permisos:

chown root:ssl-cert *{crt,key}
chmod 640 *{crt,key}

Ahora, copie hace los lugares adecuados. Verifique de usar la opción -p para preservar los permisos antes concedidos:

cp -p *crt /etc/ssl/certs/
cp -p *key /etc/ssl/private/

Cree el fichero certificado.ldif, con el que habrá de configurar el servidor los certificados digitales en el servidor LDAP Cuide de modificar el nombre de los ficheros

certificado.ldif
dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CA-autoridad_certificadora.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/$server.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/$server.key

Aplique la configuración:

ldapmodify -Y EXTERNAL -H ldapi:/// -f certificado.ldif

Modificamos el arranque del servidor LDAP para que escuche por el puerto 636 (ldaps)

sed -i -E 's%(SLAPD_SERVICES="ldap:/// ldapi:///)"%\1 ldaps\:///"%g' /etc/default/slapd 

Reinicie el servidor

service slapd restart

Agregamos el certificado de nuestra entidad para que sea reconocido

cp ca-salud.gob.sv.crt /usr/local/share/ca-certificates/
update-ca-certificates

Pruebe que este funcionando correctamente:

ldapsearch -x -b dc=cobros,dc=gob,dc=sv -H ldaps://`hostname -f`

Replicación y Registro de Autenticación

Cree un directorio para trabajar esta sección de la configuración mkdir /root/srv/avanzado cd /root/srv/avanzado Cree los nuevos directorios para las nuevas bases LDAP

mkdir /var/lib/ldap/deltalog
chown openldap:openldap /var/lib/ldap/deltalog

Configure el uso de recursos del sistema:

cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/auditlog

Usuario y credenciales para replicación

Necesitamos un usuario replicador con algunos privilegios especiales de lectura (Sin límites en cuanto volumen de datos obtenidos y atributos de entradas). Obtenga una contraseña a configurar:

slappasswd -h '{SHA}' -s 'password-a-configurar'

Y el contenido lo configura en el siguiente:

replicador.ldif
dn: cn=replicante,dc=salud,dc=gob,dc=sv
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: replicador
description: Usuario Replicador LDAP
userPassword: 'Resultado de ejecutar slappasswd -s 'contraseña' -h {SHA}'

Luego ejecuta el siguiente comando para agregar el usuario al ldap. Le pedirá la contraseña especificada cuando configuró el servidor LDAP:

ldapadd -x -D cn=admin,dc=salud,dc=gob,dc=sv -W -f replicador.ldif

Límites y ACL para replicación

Cree el archivo seguridad.ldif con el contenido sugerido, y modifique según su caso:

seguridad.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcLimits
olcLimits: anonymous time.soft=500 time.hard=500 size.soft=500 size.hard=500
-
add: olcLimits
olcLimits: dn.exact="cn=admin,dc=salud,dc=gob,dc=sv" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
-
add: olcLimits
olcLimits: dn.exact="cn=replicante,dc=salud,dc=gob,dc=sv" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
-
add: olcLimits
olcLimits: users time.soft=1000 time.hard=1000 size.soft=1000 size.hard=1000
-
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword
  by self write by anonymous auth
  by dn.exact="cn=admin,dc=salud,dc=gob,dc=sv" write
  by dn.exact="cn=replicante,dc=salud,dc=gob,dc=sv" read
  by * none
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by self write by dn="cn=admin,dc=salud,dc=gob,dc=sv" write by * read

Aplique la configuración anterior con

ldapmodify -Y EXTERNAL -H ldapi:/// -f seguridad.ldif

Módulos e índices

Lo siguiente ha de configurar ACL y límites para cada usuario. Como verá, admin, replicador y lectura tienen permisos muy diferentes. Aprovechando, configuramos los índices necesarios para todas nuestras configuraciones.

Nota: Es importante que cuide que al final de cada línea no queden espacios en blanco adicionales. 
configuraciones.ldif
# Agregamos los módulos que permiten los atributos necesarios
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog

# Configuramos los índices más usuales.
dn: olcDatabase={1}hdb,cn=config 
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
olcDbIndex: contextCSN eq
...

Se aplica con:

ldapmodify -Y EXTERNAL -H ldapi:/// -f configuraciones.ldif

Configuración del proveedor de la replicación

De hecho, la siguiente configuración debería ser llamada sincronización, pues es lo que realmente hace.

sincronizacion.ldif
dn: olcDatabase={2}hdb,cn=config
objectClass: olcHdbConfig
olcDatabase: hdb
olcDbDirectory: /var/lib/ldap/deltalog
olcSuffix: cn=deltalog
olcAccess: {0}to * by dn.exact="cn=replicante,dc=salud,dc=gob,dc=sv" write
olcLimits: {0}dn.exact="cn=replicante,dc=salud,dc=gob,dc=sv" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
olcLimits: {1}dn.exact="cn=admin,dc=salud,dc=gob,dc=sv" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
olcDbIndex: entryCSN eq
olcDbIndex: objectClass eq
olcDbIndex: reqEnd eq
olcDbIndex: reqResult eq
olcDbIndex: reqStart eq

dn: olcOverlay={0}accesslog,olcDatabase={1}hdb,cn=config
objectclass: olcAccessLogConfig
olcOverlay: {0}accesslog
olcAccessLogDb: cn=deltalog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
olcAccessLogPurge: 4+00:00 1+00:00

dn: olcOverlay={1}syncprov, olcDatabase={1}hdb,cn=config
objectclass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10

dn: olcOverlay={0}syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectclass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE

Aplicar la configuración anterior con

ldapadd -Y EXTERNAL -H ldapi:/// -f sincronizacion.ldif

Ahora necesita configurar un servidor que recogerá las actualizaciones que se hagan en este servidor.

Configuración del servidor de Replicación (Consumidor)

Es posible que si quiera usar esta configuración es porque su organización sea extensa, y seguramente, tenga varios establecimientos a su cargo. Sí ese es su caso, le recomendamos que revise Extendiendo el servidor LDAP para grandes organizaciones.

Caso contrario, suponemos que el servidor que actúa como consumidor en la réplica tiene al menos una base LDAP que coincida con la que va a replicar desde el servidor proveedor.

serverid.ldif
dn: cn=config
changetype: modify
add: olcServerID
# Usar el propio 
olcServerID: 1 ldap://ldap1.org.sv

Aplique el cambio con

ldapmodify -Y EXTERNAL -H ldapi:///serverid.ldif

En el servidor consumidor, agregue los módulos necesarios para la sincronización, y configurelos sobre la base de datos que contenga el árbol LDAP que va a recibir las réplicas.

consumidor.ldif
# Agregar los modulos necesarios y la configuración para sincronizar
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f consumidor.ldif

Por cada servidor del cual vaya a recibir réplicas, tome la siguiente configuración como ejemplo.
Estamos usando provider=ldaps://ldap2.dominio.gob.sv para que las réplicas viajen cifradas mediante SSL. Si optó por no realizar esta configuración, puede cambiarlo sin problema el protocolo al LDAP de toda la vida

proveedor.ldif

dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=002 provider=ldaps://ldap2.dominio.gob.sv

 binddn="cn=replicante,dc=dominio,dc=gob,dc=sv"
 bindmethod=simple
 credentials=contraseniaa-replicante
 searchbase="dc=dominio,dc=gob,dc=sv"
 logbase="cn=deltalog"
 logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
 type=refreshAndPersist
 retry="5 5 300 +"
 syncdata=accesslog

Aplique la configuración anterior de la siguiente forma: ldapmodify -Y EXTERNAL -H ldapi:/// -f proveedor.ldif

Configuración del Acceslog

Basta con crear usar la siguiente configuración: Crear los directorios para la nueva base LDAP:

mkdir /var/lib/ldap/auditlog
chown openldap:openldap /var/lib/ldap/auditlog

Configure el uso de recursos del sistema:

cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/auditlog

Basta con crear usar la siguiente configuración:

sincronizacion.ldif
# Cuidar la numeración de las base
dn: olcDatabase={3}hdb,cn=config
objectClass: olcHdbConfig
olcDatabase: hdb
olcDbDirectory: /var/lib/ldap/auditlog
olcSuffix: cn=auditlog
# TODO: Mejorar esta ACL. ¿Será bueno el hecho que nadie pueda leer por acá?
olcAccess: {0}to * by dn.exact="cn=admin,dc=salud,dc=gob,dc=sv" read
olcDbIndex: entryCSN eq
olcDbIndex: objectClass eq
olcDbIndex: reqEnd eq
olcDbIndex: reqResult eq
olcDbIndex: reqStart eq

dn: olcOverlay={0}accesslog,olcDatabase={1}hdb,cn=config
objectclass: olcAccessLogConfig
olcOverlay: {0}accesslog
olcAccessLogDb: cn=auditlog
# olcAccessLogOps: session, que incluye bind, unbind
olcAccessLogOps: bind
olcAccessLogSuccess: TRUE
olcAccessLogPurge: 10+00:00 1+00:00

Aplicar la configuración anterior con

ldapadd -Y EXTERNAL -H ldapi:/// -f accesslog.ldif
Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas