domingo, 13 de abril de 2008

Montar Postfix, Dovecot, Squirrelmail con soporte SASL

paquetes a utilizar
- postfix
- sasl2-bin

///////////////// CONFIGURACIÓN DE POSTFIX //////////////////
en el archivo /etc/postfix/main.cf

# habilitar el soporte sasl en el postfix
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
# no permitir usuarios anónimos en la autenticación mediante sasl
smtpd_sasl_security_options = noanonymous
# evitar que ciertos clientes no entiendan las lineas del sasl
broken_sasl_auth_clients = yes

smtpd_client_restrictions = permit_sasl_authenticated,permit_mynetworks,reject

smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

NOTA: en $mynetworks solo de declararan las direcciones IP de los servidores que podrán hacer smtp hasta nosotros sin necesidad de autenticación, no se debe declarar ninguna de nuestra red local.

/////////////// CONFIGURACION DE SASLAUTHD //////////////////

en /etc/default/saslauthd de cambian los siguientes atributos

# Iniciar con el sistema
START=yes
# mecanismo a utilizar para la autenticacion
MECHANISMS="pam"
# opciones para la ajecucion del saslauthd
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

-m lugar donde creara el socket para recibir conexiones

el socket de escucha del saslauthd se debe crear dentro de la jaula de trabajo del postfix [/var/spool/postfix].

crear y dar los permisos adecuados al directorio de trabajo del sasl, en caso de que este no exista.

mkdir -p /var/spool/postfix/var/run/saslauthd/
chmod 755 /var/spool/postfix/var/run/saslauthd/
chown root.sasl /var/spool/postfix/var/run/saslauthd/

se creara el archivo /etc/postfix/sasl/smtpd.conf en el que se agregaran las siguientes lineas

# método para la verificación de la clave de acceso
pwcheck_method: saslauth
# mecanismos de encriptacion de la clave de acceso del usuario
# a utilizar para la autenticación ante una conexión por smtp
mech_list: plain login

/////////////////// PROBANDO LA CONFIGURACIÓN ////////////////////

# postconf -n | egrep mynetwork
mynetworks = 169.158.0.25, 200.55.156.188

# nótese que no esta permitido a localhost el smtp directo, solo a dos direcciones IP

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 correo.cmw.rimed.cu ESMTP Postfix (Debian/GNU)
ehlo correo.cmw.rimed.cu
250-correo.cmw.rimed.cu
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:aldomtnez@isp.cmw.rimed.cu
250 2.1.0 Ok
rcpt to:aldomtnez@isp.cmw.rimed.cu
554 5.7.1 : Client host rejected: Access denied
quit
221 2.0.0 Bye
Connection closed by foreign host.

en este ejemplo anterior no permitió al usuario enviar el correo, ni siquiera local puesto que no se había autenticado antes para poder enviar el correo. Devolviendo como error Client host rejected: Access denied. En las restricciones smtpd que se declararon se comienza por chequear que este autenticado.

otro ejemplo

Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 archer.cmw.rimed.cu ESMTP Postfix (Debian/GNU)
ehlo archer.cmw.rimed.cu
250-archer.cmw.rimed.cu
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN YWxkb210bmV6AGFsZG9tdG5legBhbGRvbXRuZXo=
235 2.0.0 Authentication successful
mail from:aldomtnez@isp.cmw.rimed.cu
250 2.1.0 Ok
rcpt to:aldomtnez@isp.cmw.rimed.cu
250 2.1.5 Ok
data
354 End data with .
envio de mensaje
.
250 2.0.0 Ok: queued as 6668C2B251

notese que en este caso si se permitio el envio del correo por que el usuario se autentifico.
AUTH PLAIN YWxkb210bmV6AGFsZG9tdG5legBhbGRvbXRuZXo=
235 2.0.0 Authentication successful

para obtener la clave encriptada se ejecuta esto en la consola de nuestro sistema.
# perl -MMIME::Base64 -e 'print encode_base64("user\0user\0clave");'

HASTA AQUI ESTA FUNCIONANDO NUESTRO POSTFIX CON SOPORTE PARA SASL Y EL SASL ESTA AUNTENTICANDOO LOS USUARIOS DE FORMA CORRECTA.
NOTA: si se quiere ver los registros de postfix de una manera mas informativa, se puede editar el master.cf del postfix y agregar la opcion -v al demonio smtpd

smtp inet n - - - - smtpd -v

//////////////////////// CONFIGURACION DE DOVECOT ////////////////////////

habilitar soporte sasl en el dovecot.conf
buscar la sección de autenticación, y en la parte del socket cliente poner de esta manera
auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
socket listen {
client {
# Assuming the default Postfix $queue_directory setting
path = /var/spool/postfix/private/auth
mode = 0660
# Assuming the default Postfix user and group
user = postfix
group = postfix
}
}
}

en el main.cf del postfix agregar estas lineas
smtpd_sasl_type = dovecot
# Puede ser el camino absoluto o relativo al $queue_directory
# smtpd_sasl_path = private/auth
smtpd_sasl_path = /var/spool/postfix/private/auth

////////////////// CONFIGURACION DE SQUIRRELMAIL //////////////////////
el archivo de configuracion del squirrelmail, en /et/squirrelmail/config.php se deben modificar las siguientes lineas

$pop_before_smtp = true;
$smtp_auth_mech = 'login';
$imap_auth_mech = 'login';

1 comentario:

Eduard dijo...

Hi,

Thank you for your page.
Recently I setup a homemade e-mail server and wrote a full detailed tutorial that you can find in

http://cosmolinux.no-ip.org/raconetlinux2/mail.html

using Debian Squeeze, Postfix, Dovecot, SASL, Spamassassin and Squirrel (and a Google account for SMTP relay).

I wish it is helpful to someone.