NetQmail Vpopmail QmailAdmin Horde IMP bajo Gentoo

From Luniwiki
Jump to: navigation, search

Introducción

Vamos a instalar un MTA con Qmail, realizar la gestion de los dominios virtuales con vpomail, la recogida de correos se ralizará por imap con courrier-imap utilizar QmailAdmin como interfaz de gestión de vpomail y IMP para el acceso mediante webmail a nuestra cuenta de correo.

NetQmail

Instalamos NetQmail. En mi caso tuve primero que desinstalar ssmtp.

emerge -av netqmail

Configuración de NetQmail

El fichero /var/qmail/control/servercert.cnf tiene los datos para la generación del certificado SSL. Los modificamos para que sean correctos.

emerge --config netqmail

Para poner un certificado propio, emerge nos indica los pasos siguientes:

If you want to have a properly signed certificate
instead, do the following:
openssl req -new -nodes -out req.pem \
 -config /var/qmail/control/servercert.cnf \
 -keyout /var/qmail/control/servercert.pem
Send req.pem to your CA to obtain signed_req.pem, and do:
cat signed_req.pem >> /var/qmail/control/servercert.pem

Alias de root

En la carpeta /var/qmail/alias tenemos varios ficheros que nos permiten redirigir los correos de root a una cuenta de correo en particular.

echo cuenta@luniel.com > /var/qmail/alias/.qmail-root
echo cuenta@luniel.com > /var/qmail/alias/.qmail-postmaster
echo cuenta@luniel.com > /var/qmail/alias/.qmail-mailer-deamon

Activación del servicio qmail-send

rc-update add svscan default
cd /service
ln -s /var/qmail/supervise/qmail-send qmail-send
/etc/init.d/svscan start

Vpopmail

Instalamos vpopmail.

emerge -av vpopmail (Hay que asegurarse de tener el USE flag de mysql

Base de datos

mysql -p
mysql> create database vpopmail;
mysql> create user vpopmail identified by 'contraseña';
mysql> grant select,insert,update,delete,drop,create on vpopmail.* to vpopmail@servidor.luniel.com;

Configuración vpopmail

Modificamos la contraseña del fichero /etc/vpopmail.conf para que coincida con la que hemos asignado al usuario de base de datos. Creamos nestro dominio, y en mi caso los distintos alias.

vadddomain luniel.com
vaddaliasdomain luniel.com luniel.es
vaddaliasdomain luniel.com luniel.net
vadduser usario@luniel.com contraseña
vdominfo
domain: luniel.com
uid:    89
gid:    89
dir:    /var/vpopmail/domains/luniel.com
users:  2
domain: luniel.es (alias of luniel.com)
uid:    89
gid:    89
dir:    /var/vpopmail/domains/luniel.com
users:  2
domain: luniel.net (alias of luniel.com)
uid:    89
gid:    89
dir:    /var/vpopmail/domains/luniel.com
users:  2

IMAP

Instalamos courier-imap, la instalación se tiene que realizar despues de haber instalado vpopmail para que el modulo de autentificación se cree correctamente.

emerge -av dev-tcltk/expect courier-imap

Configuramos el modulo de authentificación desde la carpeta /etc/courier/authlib

authdaemonrc: authmodulelist="authldap "
authldaprc: ldap.luniel.com ....

En la carpeta /etc/courier-imap, configuramos el fichero imapd.cnf con los parametros correctos de certificado.

mkimapdcert

Courrier authlib

En vez de utilizar el modulo de authentificación de vpopmail, hemos autilizado authldap, para authetificar nuestros usuarios contra nuestro Ldap.

Esquema de authldap

En nuestro ldap hemos añadido el esquema de authldap, el esquema esta disponible en los fuentes de la versión del modulo de authentificación de courrier (nuestra versión es courier-authlib-0.60.6). Lo añadimos a la carpeta /etc/openldap/schema el archivo authldap.schema.

/etc/openldap/sldap.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
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/samba.schema
include         /etc/openldap/schema/authldap.schema
...

En el Ldap añadimos los siguintes campos (en negrita). Los campos que nos van a interresar en nuestro caso es el mail, el mailbox (lo añade el objeto CourierMailAccount).

# Exportación LDIF de: uid=usuario,ou=Users,dc=luniel,dc=com
# Generado por phpLDAPadmin el October 21, 2008 8:02 pm
# Servidor: Luniel LDAP Server (xxx.xxx.xxx.xxx)
# Ámbito de búsqueda: base
# Filtro de búsqueda: (objectClass=*)
# Entradas totales: 1
dn: uid=usuario,ou=Users,dc=luniel,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
objectClass: CourierMailAccount
cn: usuario
sn: usuario
givenName: usuario
uid: usuario
uidNumber: 10xxx
gidNumber: 10xxx
homeDirectory: /home/usuario
loginShell: /bin/bash
samba...
...: 45
displayName: Usuario Pepe
gecos: Usuario Pepe
mail: usuario.pepe@luniel.com
mailbox: /correo/luniel.com/usuario.pepe/

Ficheros Configuración Courrier AuthLdap

/etc/courier/authlib/authdaemonrc

Cambios realizados con el fichero de la distribución:

authmodulelist="authldap "
/etc/courier/authlib/authldap

Cambios realizados con el fichero de la distribución:

LDAP_URI              ldap://ldap.luniel.com
LDAP_BASEDN           dc=luniel,dc=com
LDAP_BINDDN           cn=Manager, dc=luniel,dc=com
LDAP_BINDPW           contraseña
LDAP_AUTHBIND         1        (Con este parametro es el Ldap que confirma que la contraseña es correcta)
LDAP_MAIL             mail     (Nuestro patron de busqueda es el usuario de nuestro Ldap) 
LDAP_GLOB_UID         vpopmail (Los correos tiene permisos de vpopmail)
LDAP_GLOB_GID         vpopmail  
LDAP_HOMEDIR          mailbox  (Ruta donde vpopmail deja los correos de nuestro buzon)
#LDAP_MAILDIR         mailbox  (Dejamos que coja el parametro por defecto (.maildir)
#LDAP_DEFAULTDELIVERY defaultDelivery (No usamos este parametro)
LDAP_FULLNAME         displayName (El nombre completo de nuestros usuarios)
#LDAP_CLEARPW         clearPassword (Deshabilitamos las contraseñas en claro)

Ficheros de arranque de courier

rc-update add courier-imap-ssl
/etc/init.d/courier-imap-ssl start

Smtpd

Actualmente Qmail solo admite mensajes locales, para que pueda recibir y enviar correo al exterior, vamos a habilitar los mensajes de usuarios authentificados mediante Vpopmail.

/var/qmail/control/conf-smtpd:
QMAIL_SMTP_CHECKPASSWORD="/var/vpopmail/bin/vchkpw"

El fichero de configuración del certificado, ya esta configurado en mi caso, sino

vi /var/qmail/control/servercert.cnf
mkservercert (Tambien ya tengo el certificado creado anteiormente).
cd /services
ln -s /var/qmail/supervise/qmail-smtpd qmail-smtpd
/etc/init.d/svscan restart

QmailAdmin

Qmail se tiene que ejecutar en la misma máquina que vpopmail. Como en mi caso mi servidor web está en otra máquina, tenemos que configurar qmail en un servidor apache y hacerle un proxypass al servidor web externo. Las rutas por defecto de QmailAdmin no nos valen, por lo que he "retocado" el ebuild.

make.conf: PORTDIR_OVERLAY=/ruta_portage_alternativo/portage
cp -r /usr/portage/netmail/qmailadmin /ruta_portage_alternativo/portage

Modificamos el ebuild qmailadmin-1.2.10.ebuild

local url_htdocs_images="..."
local url_cgibin="..."

Volvemos a realizar el digest

ebuild qmailadmin-1.2.10.ebuild digest
emerge -av qmailadmin

En el apache del qmailadmin configuramos la seguridad. En el apache de acceso configuramos el proxypass.

ProxyRequests Off
ProxyPass /uri_servidor_externo/qmailadmin/images/ http://url_servidor_qmailadmin/qmailadmin/images/
ProxyPass /uri_servidor_externo/qmailadmin/cgi/ http://url_servidor_qmailadmin/monitor/qmailadmin/cgi/

Si tenemos problemas de login, primero verificar los permisos del fichero de cvonfiguración y del cgi.

-rw-r--r-- 1 root vpopmail 637 Nov  1 18:50 /etc/vpopmail.conf
-rwsr-sr-x 2 vpopmail vpopmail 198728 Nov  1 19:58 /var/www/qmailadmin/cgi-bin/qmailadmin

Sincronización de contraseñas

En nuestro ejemplo la authentificación de courrier se realiza mediante courier-authlib, pero la gestion de las cuentas la realizamos con vpopmail. Se eligio esta configuracón para mantener una única contraseña en el Ldap, y las ventajas de vpopmail. Pero nos interesa que cuando cambiemos la contraseña del Ldap tambien se cambie la contraseña de vpopmail. El cambio de contraseña la realizamos mediante samba, con el programa smbldap-passwd, por lo que nos hemos creado un script que realice el cambio de contraseñade las dos partes:

#!/bin/bash
MAIL=`/usr/bin/ldapsearch -LLL -H ldap://ldap.luniel.com -b ou=Users,dc=luniel,dc=com uid=$1 mail | grep mail | cut -d ' ' -f 2`
if [ "#$MAIL#" != "##" ] ; then
 for correo in $MAIL
   do
     /var/vpopmail/bin/vpasswd $correo $2
     echo "Password e-mail account $correo changed"
 done
fi
/usr/sbin/smbldap-passwd $1 << END
$2
$2
END

El script busca las cuentas principales de correo de nuestro usuario en el atributo mail, estas cuentas tienen que coincidir con las cuentas de vpopmail creadas de nuestro usuario, lo busca mediante el uid que le propocionamos. Cambia la contraseña de vpopmail, y a continuación cambia la contraseña de nuestro usuario en el ldap.

Horde IMP

El articulo de Horde bajo gentoo viene detallado la configuración del cliente de webmail.

Referencias

--Daniel Simao 09:32 18 oct 2008 (UTC)