Calculin

De CaFeLUG
Revisión del 04:26 22 mar 2008 de Dax (Discusión | contribuciones) (Intro)

Saltar a: navegación, buscar

Intro

Dado que el primer approach (usar web-cyradm) no funcionó porque...:

  • el web-cyradm está medio muerto como proyecto,
  • no pude hacer andar el cifrado MD5 con el pam_mysql (sí, compilé el libpam_mysql con MD5 y armé el paquete)
  • postfix daba problemas todo el tiempo con las cosas más irrisorias como que no encuentra "localhost"

hice un cambio radical de estrategia y me puse a configurar el sistema con Postfix, Cyrus y backend LDAP.

Buscando en Google encontré esta página (que habla de una migración de no-sé-qué a postfix+cyrus), también vi esta otra página (que resita sobre una configuración de postfix+ldap+COURIER) y finalmente documentación de postfix. Entre todas estas cosas empecé a armar todo el asunto.

Instalación de cada parte

Paquetes instalados vía apt-get

  • apt-get install slapd ldap-utils
  • apt-get install postfix cyrus-pop3d-2.2 cyrus-imapd-2.2

Configuración

Certificado X.509 para cifrado TLS/SSL

Para armar el certificado que se usa en todos lados (IMAPs, ldap, web?) lo hice con el siguiente comando:

# mkdir myCA
# chmod 0700 myCA
# cd myCA
# mkdir {crl,newcerts,private}
# touch index.txt
# echo "01" > serial
# cp /etc/ssl/openssl.cnf .
# openssl req -nodes -config ./openssl.cnf -days 999 -x509 -newkey rsa:2048 -out cacert.pem -outform PEM
# openssl genrsa -rand /dev/urandom -out calculin.cafelug.org.ar.key
# openssl req -new -nodes -key calculin.cafelug.org.ar.key -out calculin.cafelug.org.ar.csr
# cp privkey.pem private/cakey.pem
# openssl ca -config ./openssl.cnf -in calculin.cafelug.org.ar.csr -out calculin.cafelug.org.ar.cert -days 9999

Nota: Lo importante es que al poner el valor de "Common Name:" puse "*.cafelug.org.ar" (así no rompe las p[e]lotas el browser diciendo que el certificado es malo)

LDAP

En el documento referido antes habla de meter schemas llamados sendmail.schema, samba.schema, y mozillaOrgPerson_V0.6.schema, al schema de samba ni lo metí porque no tiene sentido. Si bien los encontré por inet tiraban errores. Sí metí los greenmta.schema y lookup.schema porque vi que los iba a usar luego.

Estos últimos dos schemas no dieron errores por lo que los integré al resto.

Tener los schemas obviamente es el inicio del tema porque hay que insertar los registros todavía. Siguiendo los archivos de configuración del documento para las búsquedas LDAP que realizará el postfix encontré que necesitaba unos cuantos usuarios y ous por acá y allá, estos son:

  • cn=postfix,ou=system,ou=accounts,dc=cafelug,dc=org,dc=ar (para hacer las consultas)
  • búsqueda de virtual_alias_maps:
    • ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar (buscando el atributo mail usando como filtro: (&(mailAlternateAddress=%s)(accountStatus=aktiv)))
    • lookupName=virtualusers,cn=postfix,cn=mailstore,ou=server,ou=edv,dc=cafelug,dc=org,dc=ar (como base de búsqueda del atributo lookupValue, filtro: lookupKey —que no sé para qué lo usa todavía—, esta definido en el archivo mailforwards.cf y también en el virtual_alias_maps.cf)
    • ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar (buscando el atributo mail usando como filtro: (&(uid=%u)(accountStatus=aktiv)), dentro del archivo de local_recipient_maps.cf)


De esto se desprende que el esquema LDAP está pensado para que un usuario pueda tener aliases en mailAlternateAddress, lo que nos viene bien para casillas con @usla.org.ar, @linux.org.ar. También se pueden activar los usuarios en base al valor de accountStatus, para que esté activa la casilla deberá tener el valor aktiv —que por supuesto, se puede cambiar a algo como activo ya que obviamente estos chicos no son argentinos ;-)—

Sí hice un corte importante y creo que es por mi falta de experiencia con LDAP, todo el tema del lookupName no entiendo para que lo usa ni tampoco como crearlo realmente. Al tratar de armar la rama ou=server no encontré forma de meter el lookupName dentro del container cn=postfix,cn=mailstore,ou=server,ou=edv,dc=cafelug,dc=org,dc=ar. Por otro lado, de haberlo metido no sé qué datos deberían ir ahí dentro.

Los usuarios se buscan dentro de ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar y el tema pasa por los virtual_alias_maps y virtual_alias_domains (de postfix). Postfix necesita saber a qué usuario (local) enviar mails que llegan a p.e.: dcoletti@cafelug.org.ar -> dcoletti y también dcoletti@usla.org.ar -> dcoletti. Así que en vez de hacer todo el asunto por lookups, lo armé para usarlo con atributos de ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar, o sea que cn=Daniel Coletti,ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar tendrá que tener los atributos correspondientes como para que el mail le llegue a la casilla

cambié uno de los ou ya que en el documento usa como base de búsqueda lookupName=virtualusers,cn=postfix,cn=mailstore,ou=server,ou=edv,dc=cafelug,dc=org,dc=ar y no sé para qué pusieron la ou=edv, así que cambié los archivos de búsqueda de postfix eliminando esta ou.

Todas estas cosas las fui agregando con phpldapadmin ya que —por lo menos para mi— es indispensable (no sé tanto de ldap como para ir agregando las cosas vía ldapadd)