Por XeNIX (http://web.screenart.es/tomeu)
Como añadir un sistema de autentificación al Sendmail para que solo puedan utilizar usuarios acreditados, utilizando la libreria SASL (Simple Autentification Security Layer). Configuación e instalación paso a paso.
Introducción
A veces por problemas de SPAM en un servidor de mail, se ven obligados a instalar un sistema de Rules al SendMail para filtrar este Ataque masivo de mensajes a parte de esto también se puede añadir el sistema de autentificación al servidor y forzar la utilización de un usuario y contraseña para su utilización.
En este articulo he utilizado la libreria SASL (Security Autentification
Secure Layer) el cual nos permite hacer eso al SendMail y a otras aplicaciones
que deseemos añadir un minimo de autentificación.
Instalación & Configuración
1) Necesitamos al menos tener instalada la versión 8.10 del Sendmail,
particularmente he utilizado la 8.11.4 que és la ultima versión
estable. Aparte de esto también necesitaremos el paquete de Cyrus-SASL
v1.5.24 el cual contiene las fuentes para compilar la libreria.
2) Una vez tenemos los dos paquetes vamos a proceder a la configuración
y compilación de los paquetes.
Cyrus-SASL
# tar zxvf cyrus-sasl-1.5.24.tar.gz
# cd cyrus-sasl-1.5.24
# ./configure
# make
# make install
* Creamos un link simbolico dentro /usr/lib que apunte a las librerias del SASL
# ln -s /usr/local/lib/sasl /usr/lib/sasl
# chmod 755 /usr/local/lib/sasl
# cd /usr/lib/sasl
* Seguidamente configuramos con que aplicación debe ir el SASL y que metodo de comprobación de password debe llevar. (sasldb, passwd, shadow, kerberos_v4, etc ...). Aqui utilizaremos el metodo de la sasldb que utiliza el fichero independiente del sistema que contiene los usuarios.
# echo "pwcheck_method: sasldb" > Sendmail.conf
Sendmail
# tar zxvf sendmail.8.11.4.tar.gz
# cd sendmail-8.11.4
* Ahora tenemos que proceder a configurar la instalación del sendmail, para que nos coja las librerias de Cyrus-SASL. Para eso vamos a proceder la siguiente manera:
# cd devtools/Site
# vi site.config.m4
* Insertamos esta serie de lineas:
APPENDDEF(`confENVDEF', `-DSASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/include')
* Seguidamente vamos a generar el fichero general de configuración del sendmail el cual se genera a partir de otro que tenemos que editar que está en cf/cf, dentro de este directorio hay una serie de ficheros nosotros tenemos que coger uno de ellos (en mi caso el generic-linux.mc) lo copiamos a uno nuevo llamado config.mc. Lo editamos insertando esta serie de lineas:
dnl Definimos los metodos de autentificacion
define(`confAUTH_MECHANISMS', `LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5
CRAM-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5')dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Port=587, Name=MSA, M=Ea')dnl
* Una vez creado este fichero procedemos a la compilación del sendmail.
# cd ../..
# ./Build
# cd cf/cf
# # Nos genera un fichero de salida .cf con el m4 o sea m4 ../m4/cf.m4
config.mc > config.cf
# ./Build config.mc
* La fase final seria instalarlo, y hacer una copia del fichero de configuración
# cd ../../
# ./Build install
# cd cf/cf
# cp -f config.cf /etc/mail/sendmail.cf
* Reiniciamos el servicio sendmail
# /etc/rc.d/init.d/sendmail restart
Testeo del sendmail:
Una vez reincio del sendmail tendremos que probar si realmente se ha instalado el soporte del SASL. Lo haremos de la siguiente manera:
# /usr/sbin/sendmail -d0.1 -bv root | grep SASL
Si todo es correcto nos tedria que salir la siguiente linea:
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG
Que es correcto pasamos a realizar la siguiente prueba, conectarnos al servidor SMTP via telnet para provar si todo es correcto:
# telnet localhost 25
Trying 127.0.0.1...
Connected to indigo.smart.es.
Escape character is '^]'.
220 indigo.smart.es ESMTP Sendmail 8.11.4/8.9.3; Wed, 6 Jun 2001 00:40:00
+0200
EHLO localhost
250-indigo.smart.es Hello IDENT:root@indigo.smart.es [127.0.0.1], pleased
to meet you
250-ENHANCEDSTATUSCODES
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 HELP
quit
221 2.0.0 indigo.smart.es closing connection
Connection closed by foreign host.
Vale, hasta aqui todo correcto. Si no entramos un LOGIN al servidor no nos va a dejar utilizarlo, o sea utilizano el AUTH. Por eso vamos a crear un usuari para poder utilizar el SMTP, y lo creamos con las utilidades del Cyrus-SASL. En este caso con el saslpasswd por eso vamos a ir al directorio /usr/local/sbin.
# ./saslpasswd usuariomail
Password: ..........
Again (for verification): .........
Ahora él nos ha creado un fichero dentro de etc llamado sasldb, el cual contiene la base de datos de los usuarios que creemos para el SASL. Ahora faltaria dar permisos a ese fichero.
# chmod 400 /etc/sasldb
Para comprovar si todo es correcto y nos ha creado el usuario vamos a comprovarlo con otra utilidad llamada sasldblistusers la cual nos mostrara todos los usuarios creados
# ./sasldblistusers
user: usuariomail realm: indigo.smart.es mech: PLAIN
user: usuariomail realm: indigo.smart.es mech: CRAM-MD5
user: usuariomail realm: indigo.smart.es mech: DIGEST-MD5