• No se han encontrado resultados

Autenticación por SASL

N/A
N/A
Protected

Academic year: 2021

Share "Autenticación por SASL"

Copied!
9
0
0

Texto completo

(1)

Autenticación por SASL

En este apartado configuraremos la autenticación de usuarios por smtp. De momento vamos a hacerlo de forma sencilla y más tarde configuraremos sasl para que la autenticación vaya sobre MySQL.

Tendremos que instalar los siguientes paquetes:

apt-get install sasl2-bin libsasl2 libsasl2-modules openssl Las versiones:

||/ Nombre Versión Descripción +++-================-==========-

============================================================

pi libsasl2 2.1.19-1.5 Authentication abstraction library

ii libsasl2-modules 2.1.19-1.5 Pluggable Authentication Modules for SASL

ii sasl2-bin 2.1.19-1.5 Programs for manipulating the SASL users database ii openssl 0.9.7e-2 Secure Socket Layer (SSL) binary and related cryptographic tools

Vamos a configurar smtp, para ello iremos al directorio /etc/postfix/ y comprobaremos si existe un directorio que se llame sasl si no es así, lo creamos. Una vez que tengamos dicho directorio tendremos que crear dentro un fichero con nombre smtpd.conf al que tendremos que añadirle las siguientes líneas.

mech_list: PLAIN LOGIN pwcheck_method: saslauthd

Ya que postfix se ejecuta en modo chroot, necesitamos darle acceso al socket de conexión de saslauthd, para ello tendremos que crear un hard link a la ruta donde se encuentra dicho socket. Para hacer esto:

Creamos el directorio: makedir -p /var/spool/postfix/var/run/saslauthd cd /var/spool/postfix/var/run/

Le damos permisos 755: chmod 755 saslauthd

Ponemos como usuario postfix y como grupo sasl: chown postfix:sasl saslauthd/

Además tendremos que editar el fichero /etc/init.d/saslauthd y añadir la siguiente línea:

PARAMS="-r -m /var/spool/postfix/var/run/saslauthd"

Lo que hacemos será iniciar el servicio saslauthd con una serie de parámetros:

­r : Combina el login con el dominio antes de pasárselo a la autenticación. Por ejemplo:

login:"foo", dominio:"bar" se pasará al mecanismo de autenticación como "foo@bar"

­m path : Utilizará el path como ruta al socket para escuchar peticiones de conexión. Debe ser un path absoluto y no debe incluir el directorio /mux. 

Nosotros lo fijamos a la ruta de postfix ya que éste se estará ejecutando en una jaula chroot.

Ahora sólo nos queda reiniciar el servicio:

killall saslauthd

/etc/init.d/saslauthd start

(2)

Debemos fijarnos que todos los procesos saslauthd que se estén ejecutando lo hagan con los parámetros que le hemos pasado. Para ello ejecutamos:

ps xa |grep saslauthd Debemos ver algo como lo siguiente:

1076 ? Ss 0:00 /usr/sbin/saslauthd -r -m /var/spool/postfix/var/run/saslauthd -a pam

1077 ? S 0:00 /usr/sbin/saslauthd -r -m /var/spool/postfix/var/run/saslauthd -a pam

1078 ? S 0:00 /usr/sbin/saslauthd -r -m /var/spool/postfix/var/run/saslauthd -a pam

1079 ? S 0:00 /usr/sbin/saslauthd -r -m /var/spool/postfix/var/run/saslauthd -a pam

1080 ? S 0:00 /usr/sbin/saslauthd -r -m /var/spool/postfix/var/run/saslauthd -a pam

8285 pts/0 R+ 0:00 grep saslauthd

Si tenemos problemas con sasl podremos mirar su log (tail -f /var/log/auth.log | colorize) y podemos añadirle al fichero /etc/postfix/sasl/smtpd.conf una nueva línea que ponga: log_level: 7 que nos servirá para ver más detalles de lo que está pasando.

Certificados SSL

Un paso importante es encriptar la sesión SMTP. De otro modo el usuario y el password podrían ser transmitidos de forma insegura si se escoge la opción de autenticación PLAIN. Por esta razón encomendamos encriptar la comunicación con TLS (Transport Layer Security).

TLS proporciona certificados basados en autenticación y cifrado de sesiones. Una sesión cifrada protege la información que es transmitida por correo SMTP o por autenticación SASL.

Tendremos por tanto que instalar el paquete:

apt-get install postfix-tls

||/ Nombre Versión Descripción

+++-======================-=========-=================================

ii postfix-tls 2.1.5-5 TLS and SASL support for Postfix

Una vez hecho esto, crearemos el certificado con la siguiente orden:

openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

Cuando pulsemos ENTER, se nos harán una serie de preguntas:

Country name (2 letter code) [AU]: ES

State or Province Name (full name) [Some-state]: Coruña Locality Name (eg,city) []: Coruña

Organization Name (eg,company) [Internet Widgits Pty Ltd]: correo.es servicio de email

Organizational Unit Name (eg, section) []: Departamento de Informatica Common Name (eg, your name) [] : smtp.correo.es

(3)

Email Address []: postmaster@correo.es

Después de un momento se generarán dos ficheros: "smtpd.key" y "smtpd.cert". Tendremos que ponerlos en el directorio /etc/postfix si es que ya no los tenemos ahí.

Soporte SSL y SASL para Postfix

Una vez que tengamos todo preparado tenemos que darle a postfix soporte para SSL y para SASL, para ello tenemos que editar el fichero /etc/postfix/main.cf y poner los siguientes parámetros.

smtpd_sasl_auth_enable = yes smtpd_sasl2_auth_enable = yes

smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes

smtpd_sasl_local_domain = smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks,

reject_unauth_destination

smtpd_use_tls = yes

smtpd_tls_key_file = /etc/postfix/smtpd.key smtpd_tls_cert_file = /etc/postfix/smtpd.cert smtpd_tls_loglevel = 3

smtpd_tls_received_header = yes

smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom

Para salir de este comando simplemente escribimos quit

MUY IMPORTANTE: Debemos asegurarnos que la clave no la puede leer nadie, para ello ejecutamos.

chmod o= /etc/postfix/smtpd.key

En este punto tenemos que recargar la configuración de postfix y la de sasl, para ello ejecutamos:

postfix reload

/etc/init.d/saslauthd restart

En estos momentos tendríamos postfix + imap + smtp. Toca probarlo. En primer lugar vamos a ver si está funcionando correctamente el soporte para sasl y tls. Ejecutamos:

telnet localhost 25 Lo escribimos nosotros← Trying 127.0.0.1...

Connected to localhost.localdomain.

Escape character is '^]'.

220 inf12.midominio.com ESMTP Postfix (Debian/GNU) ehlo correo.es Lo escribimos nosotros, ← ponemos el dominio que habíamos creado.

250-inf12.midominio.com 250-PIPELINING

250-SIZE 10240000

(4)

250-VRFY 250-ETRN 250-STARTTLS

250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME

Tenemos que verificar que aparecen las lineas AUTH y STARTTLS. Si todo esto es correcto, desde nuestro cliente de correo (evolution) podremos enviarnos mails y recibirlos mediante IMAP y SMTP respectivamente.

Haremos una prueba rápida:

telnet localhost 25 Lo escribimos nosotros← Trying 127.0.0.1...

Connected to localhost.localdomain.

Escape character is '^]'.

220 inf12.midominio.com ESMTP Postfix (Debian/GNU) ehlo google.com Lo escribimos nosotros← 250-inf12.midominio.com

250-PIPELINING 250-SIZE 10240000 250-VRFY

250-ETRN

250-STARTTLS Tiene que aparecer esta línea.← 250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN 250 8BITMIME

Si no aparece la línea STARTTLS, TLS no estará corriendo. Se sugiere corregir los problemas que

haya hasta este punto. Podremos mirar el log del mail (tail -f /var/log/mail.log |

colorize).

(5)

Usuario vmail

En este punto toca definir un usuario que será el que utilicen los usuarios virtuales, se llamará vmail, tendremos que ejecutar los siguientes comandos:

inf12:~# adduser -d /home/vmail -s /bin/false vmail

inf12:~# uid=`cat /etc/passwd | grep vmail | cut -f 3 -d :`

inf12:~# groupadd -g $uid vmail inf12:~# mkdir /home/vmail

inf12:~# chown vmail: /home/vmail

Este usuario será el que usaremos cuando configuremos las cuentas de vmail y tendremos que utilizar el uid y el gid de este usuario. Podremos saberlo si conectandonos con el ejecutamos id

inf12:~# su - vmail vmail@inf12:~$id

uid=5000(vmail) gid=5000(vmail) groups=5000(vmail) vmail@inf12:~$

(6)

Configurando la autenticación con MySQL y vhosts.

Lo siguiente que tendremos que hacer será reconfigurar la autenticación para usar la base de datos mailsql en courier­imap y postfix. En todos los ejemplos acuerdate de cambiar $password por el password que le has puesto al usuario mysql de la base de datos mailsql.

Tenemos que modificar el fichero /etc/pam.d/imap y nos tiene que quedar algo como lo siguiente:

#auth required pam_unix.so nullok #account required pam_unix.so #password required pam_unix.so

#session required pam_unix.so

auth optional pam_mysql.so host=localhost db=mailsql user=mailsql passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0

account required pam_mysql.so host=localhost db=mailsql user=mailsql passwd=$password table=users usercolumn=email passwdcolumn=clear crypt=0

Lo siguiente que tendremos que hacer será editar la configuración de la autenticación por courier. Para ello editamos el fichero /etc/courier/authdaemonrc y tendremos que fijar los valores de las siguientes variables como indico a continuación.

authmodulelist="authmysql authpam"

Y en el fichero /etc/courier/authmysqlrc:

MYSQL_SERVER localhost MYSQL_USERNAME mailsql MYSQL_PASSWORD $password MYSQL_DATABASE mailsql MYSQL_USER_TABLE users

(Make sure the following line is commented out since we're storing plaintext.) #MYSQL_CRYPT_PWFIELD crypt

MYSQL_CLEAR_PWFIELD clear MYSQL_UID_FIELD uid MYSQL_GID_FIELD gid MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD homedir MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir

Como ya hemos dicho anteriormente en este documento postfix está creado en una jaula chroot, por lo tanto, no tiene acceso a servicios exteriores a dicha jaula. Ahora mismo tenemos que darle acceso a MySQL. Para hacer esto, tendremos que:

1. Desde una consola crearemos el directorio para MySQL 

mkdir -p /var/spool/postfix/var/run/mysqld/

2. Creamos un hard link al socket de mysql para que postfix tenga acceso. 

(7)

ln /var/run/mysqld/mysqld.sock /

var/spool/postfix/var/run/mysqld/mysqld.sock

3. Editamos el scritp de inicio de MySQL /etc/init.d/mysql y al final de la sección 'start') tenemos que añadir las siguientes lineas para que se cree este hard link cada vez que iniciamos MySQL. 

rm /var/spool/postfix/var/run/mysqld/mysqld.sock

ln /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock

4. Reiniciar el servicio mysql: 

/etc/init.d/mysql restart

5. Y comprobamos si ese link se ha creado correctamente. Para saberlo ejecutamos el comando: 

ls -lha /var/run/mysqld/mysqld.sock La salida tiene que ser como esta:

inf12:~/# ls -lha /var/run/mysqld/mysqld.sock

srwxrwxrwx 2 mysql mysql 0 2005-02-16 10:25 /var/run/mysqld/mysqld.sock

El "2" significa que tiene dos instancias, la propia y la del hard link.

El siguiente paso será reiniciar los servicios:

/etc/init.d/courier-authdaemon restart /etc/init.d/saslauthd restart

Ahora tendremos que configurar postfix para que utilice la autenticación y los datos de MySQL. Para ello crearemos los siguientes ficheros en el directorio /etc/postfix

/etc/postfix/mysql­aliases.cf

# mysql-aliases.cf user = mailsql password = $password dbname = mailsql table = alias

select_field = destination where_field = alias

hosts = unix:/var/run/mysqld/mysqld.sock

/etc/postfix/mysql­relocated.cf

# mysql-relocated.cf user = mailsql password = $password dbname = mailsql table = relocated select_field = destination where_field = email

(8)

hosts = unix:/var/run/mysqld/mysqld.sock

/etc/postfix/mysql­transport.cf

# mysql-transport.cf user = mailsql password = $password dbname = mailsql table = transport select_field = destination where_field = domain

hosts = unix:/var/run/mysqld/mysqld.sock

/etc/postfix/mysql­virtual­gid.cf

#myql-virtual-gid.cf user = mailsql password = $password dbname = mailsql table = users select_field = gid where_field = email

additional_conditions = and postfix = 'y'

hosts = unix:/var/run/mysqld/mysqld.sock

/etc/postfix/mysql­virtual­maps.cf

#myql-virtual-maps.cf user = mailsql password = $password dbname = mailsql table = users select_field = maildir where_field = email

additional_conditions = and postfix = 'y'

hosts = unix:/var/run/mysqld/mysqld.sock

/etc/postfix/mysql­virtual­uid.cf

# mysql-virtual-uid.cf user = mailsql password = $password dbname = mailsql table = users select_field = uid

where_field = email

additional_conditions = and postfix = 'y'

hosts = unix:/var/run/mysqld/mysqld.sock

(9)

/etc/postfix/mysql­virtual.cf

# mysql-virtual.cf user = mailsql password = $password dbname = mailsql table = virtual select_field = destination where_field = email

hosts = unix:/var/run/mysqld/mysqld.sock

Y ahora editamos /etc/postfix/main.cf y añadimos las siguientes lineas:

alias_maps = mysql:/etc/postfix/mysql-aliases.cf

relocated_maps = mysql:/etc/postfix/mysql-relocated.cf local_transport = local

local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname virtual_transport = virtual

virtual_mailbox_domains = virt-bar.com,

$other-virtual-domain.com virtual_minimum_uid = 1000

virtual_gid_maps = static:$vmail-gid

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf

virtual_uid_maps = static:$vmail-uid

virtual_mailbox_base = /home/vmail Se tiene que corresponder con el directorio← del usuario virtual, es decir, vmail.

#virtual_mailbox_limit =

donde $vmail­gid y $vmail­uid serán los valores de uid y gid del usuario vmail. Estos valores se obtienen ejecutando id como usuario vmail.

Por razones de seguridad deberías cambiarle los permisos a cada uno de los ficheros que acabas de crear ya que ellos contienen el password de la base de datos. Ejecutaremos:

chmod 640 /etc/postfix/mysql-*.cf chgrp postfix /etc/postfix/mysql-*.cf

Recargamos de nuevo postfix para que estos cambios entren en vigor.

postfix reload

Referencias

Documento similar

Personalised recommendations help the users to find relevant news articles, and semantic expansion of user profiles ease the matching between user preferences and item

WARNING: During development you must configure VxWorks with the target agent communication interface required for the connection between your host and target system (network,

To add, delete, edit, or check a Windows NT boot selection, first select Setup (enter a System Password, if required), select Environment Setup, then Manage NT Startup.. Follow the

Attendees within the application will have a username, email (access) and password, a user profile, an agenda, a list of sponsors, a list of guests and attendees, a wall where

This paper shows a semantically-enabled web application named MIG used to create user profiles which enhances users accessibility by allowing the creation of an user interface

The personalised recommendations helped users to find relevant news articles, and a semantic expansion of user preferences eased the matching between user and

In the first part, the user makes the registration request, obtaining a ticket linked to his email and personal data along with an activation link; in the second part, the user

de se convertir en chaux par la calcination- L a formation de ces pierres nous paroît due, en grande partie , au détritus des coquillages : Tidentité des