Diferencia entre revisiones de «Calculin»
(→General domainkey references) |
|||
Línea 135: | Línea 135: | ||
==General domainkey references== | ==General domainkey references== | ||
*[http://www.postfix.org/MILTER_README.html Postfix before-queue Milter support] | *[http://www.postfix.org/MILTER_README.html Postfix before-queue Milter support] | ||
+ | |||
+ | ==Implementación== | ||
+ | |||
+ | Para implementarlo finalmente elegimos usar dk-milter o dk-filter (que es lo mismo). | ||
+ | Debian trae un paquete en lenny, por lo que me baje los fuentes con: | ||
+ | |||
+ | <code> | ||
+ | apt-get -t lenny source dk-milter | ||
+ | </code> | ||
+ | |||
+ | y después lo compilé (con <code>dpkg-buildpackage</code>) | ||
+ | |||
+ | Lo primero que hay que hacer es armar los certificados. El paquete trae un comandito para hacerlo <code>gentxt.csh</code>, este comando se ejecuta pasandole dos argumentos, el "selector" que es un nombre (yo le mandé "calculin") y el nombre del dominio al que pertenece el certificado, en este caso fue "cafelug.org.ar". | ||
+ | |||
+ | Genera dos archivos: | ||
+ | * calculin.public | ||
+ | * calculin.private | ||
+ | |||
+ | El archivo privado es el más importante y hay que ponerlo en alguna parte que después lea el demonio, yo lo mandé en /etc/postfix/domainkeys. | ||
+ | |||
+ | Luego hay que configurar el DNS y también algunos parámetros del dk-filter. | ||
+ | |||
+ | El dk-filter se configura tocando el archivo <code>/etc/default/dk-filter</code> y así quedó: | ||
+ | <pre> | ||
+ | # Sane defaults: log to syslog | ||
+ | DAEMON_OPTS="-l -m smtpd,postfix" | ||
+ | # Sign for example.com with key in /etc/mail/domainkey.key using | ||
+ | # selector '2007' (e.g. 2007._domainkey.example.com) | ||
+ | DAEMON_OPTS="$DAEMON_OPTS -d cafelug.org.ar -s /etc/postfix/domainkeys/dk_cafelug.org.ar.pem -S calculin" | ||
+ | # See dk-filter(8) for a complete list of options | ||
+ | # | ||
+ | # Uncomment to specify an alternate socket | ||
+ | #SOCKET="/var/run/dk-filter/dk-filter.sock" # default | ||
+ | #SOCKET="inet:54321" # listen on all interfaces on port 54321 | ||
+ | SOCKET="inet:1025@localhost" # listen on loopback on port 12345 | ||
+ | #SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345 | ||
+ | </pre> | ||
+ | |||
+ | Entre las opciones esta <code>-l</code> que es para que mande los logs a través de syslog, <code>-m smtpd,postfix</code> no sé si es necesario (entre las pruebas que hice quedó). Las otras son más importantes: | ||
+ | * <code> -d cafelug.org.ar</code> (el dominio del certificado, se pueden poner más dominios) | ||
+ | * <code> -s /etc/postfix/domainkeys/dk_cafelug.org.ar.pem</code> (el lugar donde está la clave privada) | ||
+ | * <code> -S calculin</code> (el "selector"). | ||
+ | |||
+ | Y la parte que me volvió un poco loco fue la opción de <code>SOCKET=</code>, postfix corre en chroot, por lo que la opción <code>SOCKET="/var/run/dk-filter/dk-filter.sock"</code> me tiraba '''file not found'''... estuve un rato para acordarme y darme cuenta que no lo encontraba porque no estaba dentro del jail. En fin, lo deje escuchando en un puerto y así no da problemas. | ||
+ | |||
+ | ===Configuración de DNS=== | ||
+ | |||
+ | La configuración de DNS es '''tricky''', la documentación que encontré no es muy específica. La forma de correcta de setearlo es poniendo ''dos'' entradas en la zona: |
Revisión del 03:19 31 mar 2008
Contenido
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
DomainKeys
Alternativas
- Implementaciones de domainkeys
- dkimproxy
- dk-milter
- dkfilter (del mismo autor de dkimproxy, deprecado?)
DKIMproxy
Debian packages: dkimproxy
- Howtos
dk-milter
debian packages: dk-filter?
- Howtos
General domainkey references
Implementación
Para implementarlo finalmente elegimos usar dk-milter o dk-filter (que es lo mismo). Debian trae un paquete en lenny, por lo que me baje los fuentes con:
apt-get -t lenny source dk-milter
y después lo compilé (con dpkg-buildpackage
)
Lo primero que hay que hacer es armar los certificados. El paquete trae un comandito para hacerlo gentxt.csh
, este comando se ejecuta pasandole dos argumentos, el "selector" que es un nombre (yo le mandé "calculin") y el nombre del dominio al que pertenece el certificado, en este caso fue "cafelug.org.ar".
Genera dos archivos:
- calculin.public
- calculin.private
El archivo privado es el más importante y hay que ponerlo en alguna parte que después lea el demonio, yo lo mandé en /etc/postfix/domainkeys.
Luego hay que configurar el DNS y también algunos parámetros del dk-filter.
El dk-filter se configura tocando el archivo /etc/default/dk-filter
y así quedó:
# Sane defaults: log to syslog DAEMON_OPTS="-l -m smtpd,postfix" # Sign for example.com with key in /etc/mail/domainkey.key using # selector '2007' (e.g. 2007._domainkey.example.com) DAEMON_OPTS="$DAEMON_OPTS -d cafelug.org.ar -s /etc/postfix/domainkeys/dk_cafelug.org.ar.pem -S calculin" # See dk-filter(8) for a complete list of options # # Uncomment to specify an alternate socket #SOCKET="/var/run/dk-filter/dk-filter.sock" # default #SOCKET="inet:54321" # listen on all interfaces on port 54321 SOCKET="inet:1025@localhost" # listen on loopback on port 12345 #SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
Entre las opciones esta -l
que es para que mande los logs a través de syslog, -m smtpd,postfix
no sé si es necesario (entre las pruebas que hice quedó). Las otras son más importantes:
-
-d cafelug.org.ar
(el dominio del certificado, se pueden poner más dominios) -
-s /etc/postfix/domainkeys/dk_cafelug.org.ar.pem
(el lugar donde está la clave privada) -
-S calculin
(el "selector").
Y la parte que me volvió un poco loco fue la opción de SOCKET=
, postfix corre en chroot, por lo que la opción SOCKET="/var/run/dk-filter/dk-filter.sock"
me tiraba file not found... estuve un rato para acordarme y darme cuenta que no lo encontraba porque no estaba dentro del jail. En fin, lo deje escuchando en un puerto y así no da problemas.
Configuración de DNS
La configuración de DNS es tricky, la documentación que encontré no es muy específica. La forma de correcta de setearlo es poniendo dos entradas en la zona: