• Para esta práctica vamos a usar las claves y certificados que generamos en la práctica de seguridad de https

      [root@quijote ~]# scp /etc/ssl/certs/gonzalonazareno.crt debian@10.0.1.9
      [root@quijote ~]# scp /etc/ssl/certs/openstack.crt debian@10.0.1.9
      [root@quijote ~]# scp /etc/ssl/private/openstack.key debian@10.0.1.9
    
  • Vamos a mover estos certificados a un sitio apropiado.

      debian@freston:~$ sudo mv gonzalonazareno.crt /etc/ssl/certs/
      debian@freston:~$ sudo mv openstack.crt /etc/ssl/certs/
      debian@freston:~$ sudo mv openstack.key /etc/ssl/private/
    
  • Vamos a crear unas acl para que el usuario openldap que es el encargado de ejecutar los servicios de sldap tenga permisos sobre estos certificados.

      debian@freston:~$ sudo setfacl -m u:openldap:r-x /etc/ssl/private
      debian@freston:~$ sudo setfacl -m u:openldap:r-x /etc/ssl/private/openstack.key
    
  • Vamos a crear un fichero donde especificaremos las modificaciones de seguridad que se llevarán a cabo.

      debian@freston:~$ cat seguro.ldif 
      dn: cn=config
      changetype: modify
      replace: olcTLSCACertificateFile
      olcTLSCACertificateFile: /etc/ssl/certs/gonzalonazareno.crt           
      -
      replace: olcTLSCertificateKeyFile
      olcTLSCertificateKeyFile: /etc/ssl/private/openstack.key
      -
      replace: olcTLSCertificateFile
      olcTLSCertificateFile: /etc/ssl/certs/openstack.crt
    
  • Ahora importaremos este archivo para modificar la configuración:

      debian@freston:~$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f seguro.ldif 
      SASL/EXTERNAL authentication started
      SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
      SASL SSF: 0
      modifying entry "cn=config"
    
  • Vamos a añadir en el fichero de configuración /etc/default/sldap el protocolo ldaps.

      SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
    
  • Reiniciaremos el servicio y comprobamos su estado.

      debian@freston:~$ sudo systemctl restart slapd.service
    
      debian@freston:~$ sudo systemctl status slapd.service 
      ● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
         Loaded: loaded (/etc/init.d/slapd; generated)
         Active: active (running) since Tue 2021-06-01 11:17:18 UTC; 12s ago
           Docs: man:systemd-sysv-generator(8)
        Process: 19378 ExecStart=/etc/init.d/slapd start (code=exited, status=0/SUCCESS)
          Tasks: 3 (limit: 562)
         Memory: 3.3M
         CGroup: /system.slice/slapd.service
                 └─19387 /usr/sbin/slapd -h ldap:/// ldapi:/// ldaps:/// -g openldap -u openldap -F /etc/ldap/s
    
      Jun 01 11:17:18 freston systemd[1]: Starting LSB: OpenLDAP standalone server (Lightweight Directory Acces
      Jun 01 11:17:18 freston slapd[19383]: @(#) $OpenLDAP: slapd  (Feb 14 2021 18:32:34) $
                                                    Debian OpenLDAP Maintainers <pkg-openldap-devel@lists.aliot
      Jun 01 11:17:18 freston slapd[19387]: slapd starting
      Jun 01 11:17:18 freston slapd[19378]: Starting OpenLDAP: slapd.
      Jun 01 11:17:18 freston systemd[1]: Started LSB: OpenLDAP standalone server (Lightweight Directory Access
    
  • Podemos comprobar que se está usando el puerto 636, que es el puerto que usa ldap para funcionar de forma segura.

      debian@freston:~$ sudo netstat -tlnp | egrep 'slapd'
      tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      19387/slapd         
      tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      19387/slapd         
      tcp6       0      0 :::389                  :::*                    LISTEN      19387/slapd         
      tcp6       0      0 :::636                  :::*                    LISTEN      19387/slapd
    
  • Por supuesto necesitamos importar estos certificados al cliente, aunque el cliente en este caso es el propio freston también realizaremos el proceso, en primero lugar copiando el certificado a la carpeta que se especifica abajo y crear un enlace simbólico, para ello haremos uso del comando update-ca-certificates.

      root@freston:~# cp /etc/ssl/certs/gonzalonazareno.crt /usr/local/share/ca-certificates/
    
      root@freston:~# update-ca-certificates 
      Updating certificates in /etc/ssl/certs...
      rehash: warning: skipping duplicate certificate in gonzalonazareno.pem
      1 added, 0 removed; done.
      Running hooks in /etc/ca-certificates/update.d...
      done.
    
  • Vamos a comprobar su funcionamiento haciendo una busqueda anónima y especificando que use la funcionalidad ldaps y el puerto 636.

      root@freston:~# sudo ldapsearch -x -b "dc=alegv,dc=gonzalonazareno,dc=org" -H ldaps://localhost:636
      # extended LDIF
      #
      # LDAPv3
      # base <dc=alegv,dc=gonzalonazareno,dc=org> with scope subtree
      # filter: (objectclass=*)
      # requesting: ALL
      #
    
      # alegv.gonzalonazareno.org
      dn: dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: top
      objectClass: dcObject
      objectClass: organization
      o: alegv.gonzalonazareno.org
      dc: alegv
    
      # admin, alegv.gonzalonazareno.org
      dn: cn=admin,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: simpleSecurityObject
      objectClass: organizationalRole
      cn: admin
      description: LDAP administrator
    
      # Usuarios, alegv.gonzalonazareno.org
      dn: ou=Usuarios,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: organizationalUnit
      ou:: VXN1YXJpb3Mg
    
      # Grupos, alegv.gonzalonazareno.org
      dn: ou=Grupos,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: organizationalUnit
      ou: Grupos
    
      # search result
      search: 2
      result: 0 Success
    
      # numResponses: 5
      # numEntries: 4
    
  • Funciona, pero hemos tenido que especificar que use el puerto que queremos, para que ldap use ldaps por defecto debemos ir al fichero /etc/ldap/ldap.conf donde encotraremos la siguiente línea comentada:

      #URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
    
  • La descomentamos y la modifcamos de la siguiente forma:

      URI     ldaps://localhost
    
  • Comprobamos que al hacer una busqueda se hace por defecto con ldaps.

      root@freston:~# ldapsearch -x -b "dc=alegv,dc=gonzalonazareno,dc=org"
      # extended LDIF
      #
      # LDAPv3
      # base <dc=alegv,dc=gonzalonazareno,dc=org> with scope subtree
      # filter: (objectclass=*)
      # requesting: ALL
      #
        
      # alegv.gonzalonazareno.org
      dn: dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: top
      objectClass: dcObject
      objectClass: organization
      o: alegv.gonzalonazareno.org
      dc: alegv
        
      # admin, alegv.gonzalonazareno.org
      dn: cn=admin,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: simpleSecurityObject
      objectClass: organizationalRole
      cn: admin
      description: LDAP administrator
        
      # Usuarios, alegv.gonzalonazareno.org
      dn: ou=Usuarios,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: organizationalUnit
      ou:: VXN1YXJpb3Mg
        
      # Grupos, alegv.gonzalonazareno.org
      dn: ou=Grupos,dc=alegv,dc=gonzalonazareno,dc=org
      objectClass: organizationalUnit
      ou: Grupos
        
      # search result
      search: 2
      result: 0 Success
        
      # numResponses: 5
      # numEntries: 4