Diferencia entre revisiones de «Calculin»

De CaFeLUG
Saltar a: navegación, buscar
(Intro)
(LDAP)
Línea 42: Línea 42:
 
=== LDAP ===
 
=== LDAP ===
  
En el documento referido antes habla de meter schemas llamados <code>sendmail.schema</code>, <code>samba.schema</code>, y <code>mozillaOrgPerson_V0.6.schema</code>, al schema de samba ni lo metí porque no tiene sentido. Si bien los encontré por inet tiraban errores. Sí metí los <code>greenmta.schema</code> <s>y <code>lookup.schema</code></s> porque vi que los iba a usar luego.
+
Di mil vueltas con esto, más que nada porque es el primer LDAP que configuro desde cero y no encontré algún documento que diga ''usa este schema que sale con fritas''. Por lo que lei hay dos schemas más utilizados para trabajar con correo, uno es el de Courier y el otro es el de Qmail.
  
Estos últimos dos schemas no dieron errores por lo que los integré al resto.
+
Me bajé [http://courier.cvs.sourceforge.net/*checkout*/courier/libs/authlib/authldap.schema el de courier]. El tema no está en que postfix pueda encontrar si una dirección de correo es válida (y saber a qué casilla enviarla), el problema son los aliases (claro que pude haber usado el hash:/etc/aliases, pero así quién no?! :-)).
  
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 '''ou'''s por acá y allá, estos son:
+
Para no hacer las cosas muy complicadas segui la recomendación del documento de bulma que propone armar dos ramas: "People" y "Postfix". En la primera van los usuarios y en la segunda cosas de Postfix (dughh!).
* 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''' &mdash;que no sé para qué lo usa todavía&mdash;, 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)
 
  
 +
Acá pasteo un LDIF para que se puedan ver ejemplos de cada cosa:
  
De esto se desprende que el esquema LDAP está pensado para que un usuario pueda tener <u>aliases</u> 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''' &mdash;que por supuesto, se puede cambiar a algo como ''activo'' ya que obviamente estos chicos no son argentinos ;-)&mdash;
+
<code><pre>
 +
version: 1
  
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.
+
# LDIF Export for: dc=cafelug,dc=org,dc=ar
 +
# Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on March 22, 2008 4:27 am
 +
# Server: My LDAP Server (localhost)
 +
# Search Scope: sub
 +
# Search Filter: (objectClass=*)
 +
# Total Entries: 7
  
<s>Los usuarios se buscan dentro de '''ou=users,ou=accounts,dc=cafelug,dc=org,dc=ar''' y el tema pasa por los [http://www.postfix.org/postconf.5.html#virtual_alias_maps virtual_alias_maps] y [http://www.postfix.org/postconf.5.html#virtual_alias_domains 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 <code>lookups</code>, 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</s>
+
dn: dc=cafelug,dc=org,dc=ar
 +
objectClass: top
 +
objectClass: dcObject
 +
objectClass: organization
 +
o: cafelug.org.ar
 +
dc: cafelug
  
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.
+
dn: cn=admin,dc=cafelug,dc=org,dc=ar
 +
objectClass: simpleSecurityObject
 +
objectClass: organizationalRole
 +
cn: admin
 +
description: LDAP administrator
 +
userPassword: {crypt}XERparhpX9GD6
  
Todas estas cosas las fui agregando con phpldapadmin ya que &mdash;por lo menos para mi&mdash; es indispensable (no sé tanto de ldap como para ir agregando las cosas vía <code>ldapadd</code>)
+
dn: ou=People,dc=cafelug,dc=org,dc=ar
 +
objectClass: organizationalUnit
 +
ou: People
 +
 
 +
dn: cn=Daniel Coletti,ou=People,dc=cafelug,dc=org,dc=ar
 +
cn: Daniel Coletti
 +
gidNumber: 5000
 +
mail: dcoletti@cafelug.org.ar
 +
sn: Coletti
 +
uidNumber: 5000
 +
objectClass: CourierMailAccount
 +
objectClass: person
 +
objectClass: top
 +
objectClass: inetOrgPerson
 +
homeDirectory: /var/vmail
 +
quota: 0
 +
userPassword: {CRYPT}Clave
 +
 
 +
dn: ou=Postfix,dc=cafelug,dc=org,dc=ar
 +
ou: Postfix
 +
objectClass: organizationalUnit
 +
userPassword: {CRYPT}FxThcXLxmMTw.
 +
 
 +
dn: ou=Alias,ou=Postfix,dc=cafelug,dc=org,dc=ar
 +
ou: Alias
 +
objectClass: organizationalUnit
 +
 
 +
dn: cn=postmaster@cafelug.org.ar,ou=Alias,ou=Postfix,dc=cafelug,dc=org,dc=ar
 +
objectClass: top
 +
objectClass: organizationalRole
 +
objectClass: CourierMailAlias
 +
cn: postmaster@cafelug.org.ar
 +
mail: postmaster@cafelug.org.ar
 +
maildrop: dcoletti@cafelug.org.ar
 +
maildrop: gacq@cafelug.org.ar
 +
</pre></code>

Revisión del 01:34 22 mar 2008

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

Di mil vueltas con esto, más que nada porque es el primer LDAP que configuro desde cero y no encontré algún documento que diga usa este schema que sale con fritas. Por lo que lei hay dos schemas más utilizados para trabajar con correo, uno es el de Courier y el otro es el de Qmail.

Me bajé el de courier. El tema no está en que postfix pueda encontrar si una dirección de correo es válida (y saber a qué casilla enviarla), el problema son los aliases (claro que pude haber usado el hash:/etc/aliases, pero así quién no?! :-)).

Para no hacer las cosas muy complicadas segui la recomendación del documento de bulma que propone armar dos ramas: "People" y "Postfix". En la primera van los usuarios y en la segunda cosas de Postfix (dughh!).

Acá pasteo un LDIF para que se puedan ver ejemplos de cada cosa:

version: 1

# LDIF Export for: dc=cafelug,dc=org,dc=ar
# Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on March 22, 2008 4:27 am
# Server: My LDAP Server (localhost)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 7

dn: dc=cafelug,dc=org,dc=ar
objectClass: top
objectClass: dcObject
objectClass: organization
o: cafelug.org.ar
dc: cafelug

dn: cn=admin,dc=cafelug,dc=org,dc=ar
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {crypt}XERparhpX9GD6

dn: ou=People,dc=cafelug,dc=org,dc=ar
objectClass: organizationalUnit
ou: People

dn: cn=Daniel Coletti,ou=People,dc=cafelug,dc=org,dc=ar
cn: Daniel Coletti
gidNumber: 5000
mail: dcoletti@cafelug.org.ar
sn: Coletti
uidNumber: 5000
objectClass: CourierMailAccount
objectClass: person
objectClass: top
objectClass: inetOrgPerson
homeDirectory: /var/vmail
quota: 0
userPassword: {CRYPT}Clave

dn: ou=Postfix,dc=cafelug,dc=org,dc=ar
ou: Postfix
objectClass: organizationalUnit
userPassword: {CRYPT}FxThcXLxmMTw.

dn: ou=Alias,ou=Postfix,dc=cafelug,dc=org,dc=ar
ou: Alias
objectClass: organizationalUnit

dn: cn=postmaster@cafelug.org.ar,ou=Alias,ou=Postfix,dc=cafelug,dc=org,dc=ar
objectClass: top
objectClass: organizationalRole
objectClass: CourierMailAlias
cn: postmaster@cafelug.org.ar
mail: postmaster@cafelug.org.ar
maildrop: dcoletti@cafelug.org.ar
maildrop: gacq@cafelug.org.ar