Con las USE flags que se definieron en el archivo por default se tiene soporte para LDAP, por lo que desde la instalación ya se instalo OpenLDAP./etc/make.conf
En el archivo descimentar la linea:/etc/conf.d/slapd
# vim /etc/conf.d/slapd OPTS="-h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'" :wq
# vim /etc/openldap/slapd.conf
#######################################################################
# Schemas
#######################################################################
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/phamm.schema
include /etc/openldap/schema/ISPEnv2.schema
include /etc/openldap/schema/amavis.schema
include /etc/openldap/schema/dnsdomain2.schema
include /etc/openldap/schema/pureftpd.schema
#######################################################################
# ACL's
#######################################################################
include /etc/openldap/phamm-mod.acl
schemacheck on
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
#######################################################################
# Logging Options (disable when everything is working fine)
#######################################################################
loglevel 256
#######################################################################
# LDBM database definitions
#######################################################################
database ldbm
directory "/var/lib/openldap-directory"
lastmod on
suffix "dc=calcom,dc=com,dc=mx"
rootdn "cn=manager,dc=calcom,dc=com,dc=mx"
password-hash {md5}
###password-crypt-salt-format "$1$%.8$"
rootpw {MD5}JfnnlDI7RTiF9RgfG2JNCw==
# Index specific for mail
index objectClass eq
index cn,mail eq,subinitial
index vd,delete eq,pres
index accountActive,forwardActive eq,pres
index smtpAuth eq,pres
index associatedDomain pres,eq,sub
index aAAARecord pres,eq
index aRecord pres,eq
index sn,uid,displayName pres,eq,sub
index uidNumber,gidNumber eq
index default sub
#######################################################################
# Other Options
#######################################################################
###idletimeout 120
:wqComo vimos se agregaron varios schemas, los schemas son los archivos donde se definen los tipos de atributos que se usaran para los datos almacenados en el directorio. Estos schemas se obtuvieron de las fuentes de Phamm, bajarlas, por ejemplo:
# cd # wget http://open.rhx.it/phamm/phamm-0.4.7.tar.gz # tar -zxvf phamm-0.4.7.tar.gz # cd phamm-0.4.7 # cd schema/ # cp -v ISPEnv2.schema amavis.schema phamm.schema pureftpd.schema samba.schema /etc/openldap/schema/
Agregaremos las definiciones de la base de datos que usaremos, lo configuraremos así:
####################################################################### # LDBM database definitions ####################################################################### database ldbm directory "/var/lib/openldap-directory" lastmod on suffix "dc=calcom,dc=com,dc=mx" rootdn "cn=manager,dc=calcom,dc=com,dc=mx"
El tipo de base de datos que elegimos es ldbm, el directorio donde se guardaran los archivos de la base de datos sera: , hay que notar que este directorio no existe, por lo que hay que crearlo y que dicho directorio tenga privilegios solo para el usuario y grupo LDAP que es con el que corre el servicio slapd.//var/lib/openldap-directory
# mkdir /var/lib/openldap-directory # chown ldap:ldap /var/lib/openldap-directory # chmod 700 /var/lib/openldap-directory
El sufijo es la base de nuestro directorio LDAP, en este caso lo usaremos dc=calcom,dc=com,dc=mx, el rootdn es el usuario privilegiado de el directorio cn=manager,dc=calcom,dc=com,dc=mx, es como root en un sistema Unix.
El valor de rootpw, es obtenido con la herramienta slappasswd, el cual se pondra en formato hash con el algoritmo MD5, de esta manera no sera almacenado en texto plano:
# slappasswd -h {md5}
New password: PASSWORD_MANAGER
Re-enter new password: PASSWORD_MANAGER
{MD5}JfnnlDI7RTiF9RgfG2JNCw==Toma la salida de este comando y pegalo en el archivo en el valor de rootpw, por ejemplo:/etc/openldap/slapd.conf
rootpw {MD5}JfnnlDI7RTiF9RgfG2JNCw==Para agilizar las búsquedas, debes de crear índices para los atributos comúnmente buscados, En OpenLDAP, no solo puedes elegir que atributos indexar, si no que también puedes elegir que tipo de búsquedas indexar, por ejemplo, si indexas el campo "mail", tienes la opción de crear índices para búsquedas de "precense (press), equiality (eq), approximate, y/o substrings (sub)".
Así crearemos la siguiente política para los índices:
# Index specific for mail index objectClass eq index cn,mail eq,subinitial index vd,delete eq,pres index accountActive,forwardActive eq,pres index smtpAuth eq,pres index associatedDomain pres,eq,sub index aAAARecord pres,eq index aRecord pres,eq index sn,uid,displayName pres,eq,sub index uidNumber,gidNumber eq index default sub
El ultimo paso en la configuración de el archivo es el control de accesos, Puedes definir tu propia política, pero aquí se usa una que se adopte a el uso de Phamm. Copiar el archivo phamm.acl de el directorio examples de las fuentes de Phamm a: /etc/openldap/slapd.conf/etc/openldap/
# cp examples/phamm.acl /etc/openldap/phamm-mod.acl
Este archivo define las siguientes políticas:
Las cuentas pueden editar su contraseña, nivel de spam, forward, vacation, y su nombre.
El postmaster con editAccounts=FALSE hace lo mismo para su dominio.
El postmaster con editAccounts=TRUE puede agregar cuentas/alias y también editar amavisBypassVirusChecks, quota and smtpAuth.
vadmin puede hacer lo mismo que postmaster con editAccounts=TRUE para algunos dominios.
Ya que el archivo recién copiado es de ejemplo y ahí usa como suffix a dc=example,dc=tld y el nuestro es dc=calcom,dc=com,dc=mx entonces ejecutaremos un comando para remplazar esas cadenas, lo podemos hacer de manera segura con el siguiente comando:
# sed -e "s:dc=example,dc=tld:dc=calcom,dc=com,dc=mx:" -i phamm-mod.acl
Ahora que slapd esta configurado, es tiempo de empezar a agregar datos a nuestro directorio LDAP. Usaremos los scripts de arranque provistos por Gentoo GNU/Linux. Antes que nada ejecutar lo siguiente: Ejecutar el comando slaptest para hacer una revisión de la sintaxis en el archivo de configuración /etc/openldap/slapd.conf
# slaptest config file testing succeeded
Si regresa algún error revisar la configuración. Ahora es tiempo de ejecutar el servidor LDAP así:
# /etc/init.d/slapd start * Starting ldap-server ... [ ok ]
Confirmar que el servicio esta corriendo:
# netstat -plutn | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 15939/slapd tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 15939/slapd
Hacer consulta básica:
# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts # extended LDIF # # LDAPv3 # base <> with scope base # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=calcom,dc=com,dc=mx # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Si sale algo así significa que el servidor esta corriendo. Si quieres que el servidor slapd arranque al inicio del sistema, ejecutar el comando:
NOTA: Es posible que esta consulta no se pueda hacer porque la ACL no lo permite, asi que para empezar puedes comentar la linea que define el ACL y reiniciar el servicio para hacer esta prueba.
# rc-update add slapd default * slapd added to runlevel default * rc-update complete.
NOTA: Cuando se editen los archivos LDIF, asegurarse de que no haya espacios en blanco al final de la linea, siempre debe de haber una nueva linea, si no es así puede causar problemas al agregarlos. El primer paso para crear la estructura base del directorio es crear el nodo raíz. Copiar el archivo sample-main.ldif de el directorio examples de las fuentes de Phamm:
# cp sample-main.ldif /etc/openldap/Calcom-main.ldif
Cambiar los datos de ejemplo de el suffix por los reales:
$ sed -e "s:dc=example,dc=tld:dc=calcom,dc=com,dc=mx:" -i Calcom-main.ldif
$ cat Calcom-main.ldif dn:dc=calcom,dc=com,dc=mx objectClass: top objectClass: domain dc: example dn:cn=manager,dc=calcom,dc=com,dc=mx objectClass: top objectClass: organizationalRole cn: manager
Agregarlo al directorio con el comando ldapadd y usando a manager en este caso se usara como contraseña la que creamos para el rootpw al inicio de el documento.
# ldapadd -v -x -D "cn=manager,dc=calcom,dc=com,dc=mx" -W -h localhost -f Calcom-main.ldif
ldap_initialize( ldap://localhost )
Enter LDAP Password: PASSWORD_MANAGER
...
...
modify completeSe agrego la base del directorio el cual esta organizado de esta manera:
dc=calcom,dc=com,dc=mx <=== Raíz del directorio
cn=manager <=== Administrador del directorio
Copiar el archivo sample-mail.ldif de el directorio examples de las fuentes de Phamm:
# cp sample-mail.ldif /etc/openldap/Calcom-mail.ldif
Sustituir el suffix:
# sed -e "s:dc=example,dc=tld:dc=calcom,dc=com,dc=mx:" -i Calcom-mail.ldif
Sustituir los nombres de dominio:
# sed -e "s:example.tld:calcom.com.mx:" -i Calcom-mail.ldif
Sustituir los nombres de las cuentas de correo:
# sed -e "s:john.doe:jmedina:" -i Calcom-mail.ldif
# sed -e "s:john.smith:testmail:" -i Calcom-mail.ldif
En el archivo también se encuentran definidas las rutas relativas a /home/vmail/domains de los buzones de las cuentas de correo: por ejemplo después de las modificaciones anteriores se encuentra así: mailbox: calcom.com.mx/jmedina/ mailbox: calcom.com.mx/testmail/ En nuestro caso usaremos la ruta así: mailbox: calcom.com.mx/jmedina/Maildir/ Edita el archivo y cambia la ruta manualmente o haz esto:
# sed -e "s:jmedina/:jmedina/Maildir/:" -i Calcom-mail.ldif
y
# sed -e "s:testmail/:testmail/Maildir/:" -i Calcom-mail.ldif
Lo siguiente es crear los hash de las contraseñas de los siguientes usuarios y administradores: Uno para user phamm:
# slappasswd -h {md5}
New password: PASSWORD_PHAMM
Re-enter new password: PASSWORD_PHAMM
{MD5}br52yftBG+l7Ow1It5GnyQ==Entonces en el archivo Calcom-mail.ldif tenemos una sección mas o menos así:
dn:cn=phamm,o=hosting,dc=calcom,dc=com,dc=mx objectClass: top objectClass: organizationalRole objectClass: simpleSecurityObject cn: phamm userPassword: {SSHA}zCfpI3LEnzO0ZWJo8VeHes6TicnPJuME
Sustituiremos el valor de
userPassword: {SSHA}zCfpI3LEnzO0ZWJo8VeHes6TicnPJuMEpor:
userPassword: {MD5}br52yftBG+l7Ow1It5GnyQ==Ahora para el user matrix:
# slappasswd -h {md5}
New password: PASSWORD_MATRIX
Re-enter new password: PASSWORD_MATRIX
{MD5}muK+c7WLVlvOPkdJOlbiag==Y tenemos la sección:
dn:cn=matrix,ou=admin,dc=calcom,dc=com,dc=mx objectClass: top objectClass: VirtualAdmin mail: matrix@notcalcom.com.mx maxDomain: 10 accountActive: TRUE lastChange: 1066742030 vd: calcom.com.mx vd: newcalcom.com.mx editAccounts: TRUE userPassword: {SSHA}zCfpI3LEnzO0ZWJo8VeHes6TicnPJuME sn: matrix cn: matrix
Cambiaremos:
userPassword: {SSHA}zCfpI3LEnzO0ZWJo8VeHes6TicnPJuMEpor:
userPassword: {MD5}muK+c7WLVlvOPkdJOlbiag==Ahora para el postmaster:
# slappasswd -h {md5}
New password: PASSWORD_POSTMASTER
Re-enter new password: PASSWORD_POSTMASTER
{MD5}tk8ad7GzF9NH9ct5MyyG0g==Y tenemos la sección:
dn:cn=postmaster,vd=calcom.com.mx,o=hosting,dc=calcom,dc=com,dc=mx objectClass: top objectClass: VirtualMailAlias mail: postmaster@calcom.com.mx lastChange: 1066742031 maildrop: postmaster accountActive: TRUE cn: postmaster sn: postmaster userPassword: {SSHA}G7vRIKNRvDQg0T0qarcMgbYaQ+iOLEgq editAccounts: FALSE
cambiaremos:
userPassword: {SSHA}G7vRIKNRvDQg0T0qarcMgbYaQ+iOLEgqpor:
userPassword: {MD5}tk8ad7GzF9NH9ct5MyyG0g==También se deberá cambiar el valor de userPassword para las cuentas de correo: Crear las contraseñas también con:
# slappasswd -h {md5}Y cambiarlos en las secciones de:
dn:mail=jmedina@calcom.com.mx,vd=example.tld,o=hosting,dc=calcom,dc=com,dc=mxy
dn:mail=testmail@calcom.com.mx,vd=example.tld,o=hosting,dc=calcom,dc=com,dc=mxAhora si a agregar las entradas al directorio: Agregarlo al directorio con el comando ldapadd y usando a manager en este caso se usara como contraseña la que creamos para el rootpw al inicio de el documento.
# ldapadd -v -x -D "cn=manager,dc=calcom,dc=com,dc=mx" -W -h localhost -f
Calcom-mail.ldif
ldap_initialize( ldap://localhost )
Enter LDAP Password: PASSWORD_MANAGER
...
...
modify completeSe agrego la base del directorio el cual esta organizado de esta manera:
dc=calcom,dc=com,dc=mx <==== Raíz del directorio cn=manager <==== Administrador del directorio <<<<<<<<<<<<<<<<< SE AGREGO A PARTIR DE AQUÍ >>>>>>>>>>>>>>>>>>>>>> o=hosting <==== Organizacional de los dominios virtuales cn=pahmm <==== Administrador de los dominios virtuales vd=calcom.com.mx <==== Dominio virtual cn=postmaster <==== Administrador dominio virtual mail=abuse@calcom.com.mx (alias to postmaster) <==== Alias de postmaster maildrop= postmaster <==== Atributo de alias mail=jmedina@calcom.com.mx <==== Cuenta de correo vdHome= /home/vmail/domains <==== Ruta Base de almacenamiento de correos. mailbox=calcom.com.mx/jmedina/Maildir/ <==== ruta absoluta de el buzón de correo mail=testmail@calcom.com.mx <==== Cuenta de correo vdHome= /home/vmail/domains <==== Ruta Base de almacenamiento de correos. mailbox=calcom.com.mx/testmail/Maildir/ <==== ruta absoluta de el buzón de correo
Por cada correo que se envia, cada login que se hace a los servidores SMTP, IMAP y POP3 es un lookup en el directorio esto podria afectar el rendimiento de OpenLDAP. Afortunadamente hay varias cosas que puedes hacer (o debes hacer) para incrementar el rendimiento de OpenLDAP.
Lo primero que se recomienda es asegurarse de que esten creados los indices (esto ya se vio en el capitulo anterior) esto hace mas facil la busqueda de valores de ciertos atriburos ya que asi no busca en la base de datos completa.
Lo siguente es darle suficiente memoria a slapd para que mantenga todos o la mayoria de sus datos en memoria. La directiva cachesize especifica cuantos valores de los atributos mantener en memoria. La directiva dbcachesize especifica el tamaño, en bytes, de el espacio dedicado para almanenar los archivos de la base de datos en memoria.Los valores por default casi nunca son lo suficientemente largos. Por ejemplo yo uso:
cachesize 100000 dbcachesize 1000000
Idealmente, cachesize es tan largo como el numero de entradas en tu base de datos, y dbcachesize es tan largo como todos los archivos en /var/lib/ldbm-directory. Para sitios grandes, te encontraras con que el servidor LDAP necesita un poco mas de memoria para atender estos objectivos.
NOTA: Las opciones de cachesize y dbcachesize son configuradas por base de datos. por lo que deberian de ir junto a tu definicion de base de datos en /etc/openldap/slapd.conf.
Considera subir el valor de la variable threads a algo entre 64 o 128, por ejemplo en /etc/openldap/slapd.conf
threads 128
Asegurate de que no estes escribiendo mas de lo que necesitas a tus logs. Si quieres deshacerte de los logs que al inicio se configuracion para poder depurar errores iniciales en la configuracion, configura loglevel a 0. Si de nuevo quieres configurar el debug entocnes vuelve a configurar loglevel a 256.