Instalar y configurar un servidor SMTP/POP3/IMAP en CentOS con acceso TSL/SSL y SASL

Actualizado 27 Enero 2013

Desde hace mucho quería escribir esta guía. Más como recordatorio personal que otra cosa. Veremos como instalar un servidor SMTP (Sendmail) y un servidor POP3/IMAP (Dovecot) en CentOS. Este escrito complementa y completa un precedente articulo. Al terminar la configuración de los dos servidores veremos como filtrar el correo electrónico en entrada con Spamassassin y como configurar nuestro cliente de correo electrónico (en mi caso Outlook Express) para enviar y recibir correos electrónico usando conexiones seguras y autenticadas.

La instalación se hizo en un VPS con distribución CentOS 5.3 La presente guía usa como referencia un dominio registrado que denominaremos ejemplo.org. Para la  configuración de los registros DNS de un dominio pueden hacer referencia a este articulo.

Primero instalamos los paquetes necesarios:

yum install sendmail*

yum install cyrus*

yum install dovecot

yum install procmail

yum install spamassassin

 

Sendmail

Hacemos una copia de la configuración inicial de Sendmail:

cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc.orig

Empezamos a configurar Sendmail (modificando/añadiendo las siguientes líneas):

nano /etc/mail/sendmail.mc

 

dnl # Definimos un valor de “verbosidad” para los registros de Sendmail
define(`confLOG_LEVEL', `20')dnl
dnl # Deshabilita la autenticación en "plain text" cuando la conexión no es TLS
define(`confAUTH_OPTIONS', `A p')dnl
dnl # Definimos los mecanismos de autenticación permitidos
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl # Configuramos la carpeta y los nombres de los certificados que usaremos para la autenticación TLS/SSL
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl # Definimos los puertos donde Sendamil se pondrá a la escucha (25(smtp, 465(smtps) y 587(submission)
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl # No aceptamos correos desde dominios cuya dirección no se pueda resolver
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl # Filtramos todos los correos en entrada con spamassassin-milter
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamassassin/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name}, {if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}')dnl

Guardamos los cambios y creamos el archivo de configuración de Sendmail:

cd /etc/mail

make -C /etc/mail

Ahora podemos crear un usuario de prueba para luego utilizarlo en la configuracion de Outlook Express:

useradd -c "fulano" -s /sbin/nologin fulano

Le asignamos una contraseña:

passwd fulano

Changing password for user fulano.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Para la autenticación con SASL tenemos que crear un archivo con las siguientes líneas:

cd /usr/lib/sasl2

nano Sendmail.conf

pwcheck_method:saslauthd

Con la primera línea escogemos el método de autorización. Guardamos los cambios y configuramos sasl2 para que arranque en automático:

chkconfig saslauthd on

Ahora le decimos a Sendmail desde cuales dominios pueden salir los correos:

nano /etc/mail/local-host-names

localhost
localhost.localdomain
ejemplo.org

Guardamos los cambios y pasamos a la creación del certificado como lo hemos definido en la configuracion de Sendmail. El certificado creado en esta forma

cd /etc/pki/tls/certs

make sendmail.pem
umask 77 ; \
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        /usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
        cat $PEM1 >  sendmail.pem ; \
        echo ""    >> sendmail.pem ; \
        cat $PEM2 >> sendmail.pem ; \
        rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
........++++++
...........................++++++
writing new private key to '/tmp/openssl.l23974'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CO
State or Province Name (full name) [Berkshire]:Magdalena
Locality Name (eg, city) [Newbury]:Santa Marta
Organization Name (eg, company) [My Company Ltd]:Ejemplo
Organizational Unit Name (eg, section) []:Mail
Common Name (eg, your name or your server's hostname) []:mail.ejemplo.org
Email Address []:admin@ejemplo.org

Importante definir en Common Name el registro MX que usaremos para conectarnos al servidor Sendmail.

 


Dovecot

Una vez que tengamos el server POP3/IMAP instalado modificamos el archivo de configuracion:

nano /etc/dovecot.conf

Añadimos/modificamos las siguientes líneas:

# activamos los protocolos que vamos a utilizar
protocols = imap imaps pop3 pop3s
# carpeta y nombres de los certificados (los mismos que Sendmail)
ssl_cert_file = /etc/pki/tls/certs/sendmail.pem
ssl_key_file = /etc/pki/tls/certs/sendmail.pem
ssl_ca_file = /etc/pki/tls/certs/sendmail.pem
# Registramos los eventuales errores al utilizar SSL
verbose_ssl = yes

Gurdamos los cambios y configuramos Dovecot para que arranque en automático:

chkconfig dovecot on

 


SpamAssassin

Ahora podemos pasar a la configuracion de Spamassassin:

cd /etc/mail/spamassassin

mv local.cf local.cf.orig

nano local.cf

Añadimos:

required_score          5.0
rewrite_header subject  [SPAM]
report_safe             1
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0

Guardamos los cambios y configuramos Spamassassin para que arranque en automático:

chkconfig spamassassin on

Ahora pasamos a la instalación y configuracion de spamass-milter. Spamass-milter es un componente adicional para la biblioteca de filtros de correo (libmilter) de Sendmail, que se encarga de hacer pasar todo el correo entrante a través de SpamAssassin.

cd /usr/src

wget http://www.voztovoice.org/tmp/spamass-milter-0.3.1.tar.gz

tar -xf spamass-milter-0.3.1.tar.gz

cd spamass-milter-0.3.1

Si no tenemos instalados los programas y la librería para compilar las fuentes tenemos que instalar los siguientes paquetes:

yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool

./configure

make

make install

Instalamos el script para arrancarlo en automático como demonio:

cd contrib

nano spamass-milter-redhat.rc

Modificamos las siguientes líneas:

SM_SOCKET=/var/run/spamassassin/spamass-milter.sock
[ -x /usr/local/sbin/spamass-milter ] || exit 0
PATH=$PATH:/usr/local/sbin

Guardamos los cambios y copiamos el archivo en la carpeta de los demonios:

cp spamass-milter-redhat.rc /etc/init.d/spamass-milter

cd /etc/init.d

chmod +x spamass-milter

chkconfig --level 2345 spamass-milter on

Ahora creamos el archivo de configuracion para spamass-milter:

nano /etc/sysconfig/spamass-milter

Añadimos:

SOCKET=/var/run/spamassassin/spamass-milter.sock
EXTRA_FLAGS="-r 15"

Guardamos los cambios y hacemos un reboot del sistema:

reboot

 


LOGs y Prueba SPAM

 

Volvemos a entrar en nuestro servidor y echamos una mirada a los registros para ver si hay algún error:

nano /var/log/maillog

Si todo está bien seguimos conectándonos al servidor Sendmail y miramos si efectivamente el protocolo SSL/TSL esté activados como también el PLAIN LOGIN de SASL:

yum install telnet

telnet

telnet> o localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ejemplo.org ESMTP Sendmail 8.13.8/8.13.8; Tue, 13 Oct 2009 15:20:59 GMT
ehlo fulano.com
250-ejemplo.org Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5
250-STARTTLS

250-DELIVERBY
250 HELP

Primero nos conectamos a el servidor de correo electrónico (Sendmail) en el puerto 25. Nos presentamos escribiendo el comando “ehlo fulano.com” y luego nos aseguramos que las dos líneas en negrita aparezcan en la lista que el servidor nos presenta. En la línea 250-AUTH no aparecen los mecanismos de autenticación PLAIN y LOGIN porque en la configuracion de Sendmail hemos definido que se pueden usar solamente dentro de una conexión segura (protocolo TLS)

Para salir escribimos:

quit

Ahora hacemos una prueba para ver si SpamAssassin detecta los correos no deseados (SPAM). Primero con un correo de ejemplo que no contiene SPAM y luego con un correo de ejemplo que si es un SPAM:

spamassassin -t < /usr/share/doc/spamassassin-3.3.1/sample-nonspam.txt | grep X-Spam

X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on ejemplo.org
X-Spam-Level:
X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=no version=3.2.5

 

spamassassin -t < /usr/share/doc/spamassassin-3.3.1/sample-spam.txt | grep X-Spam
X-Spam-Flag: YES
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on astercurso.com
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=1000.0 required=5.0 tests=GTUBE,NO_RECEIVED,

¿Vieron la diferencia?

 

Outlook Express

Llegados a este punto podemos configurar nuestro clientes de correo electrónico (en mi caso Outlook Express). Lo abrimos y escogemos el menú:

Herramientas > Cuentas > Agregar > Cuenta de correo electrónico

Primero ponemos el nombre:

OE1

Luego la dirección de correo electrónico:

OE2

Direccion del servidor de entrada y salida de los correos electronicos (seleccionamos tambien la casilla que aparece en la imagen):

OE3

Nombre de usuario y contraseña (como lo hemos creado con el comando adduser en Linux):

OE4

Terminamos dando click en el botón “Finalizar”

OE5

Ahora escribimos nuestro primer correo electrónico usando la cuenta recién creada. Cuando intentaremos enviar el correo nos saldrá este error:

OE6

Esto sucede porque, como hemos visto anteriormente el mecanismo de autenticación PLAIN LOGIN solo funciona dentro de una conexión segura. Tenemos que volver a la configuracion de la cuenta y en la etiqueta “Opciones avanzadas” hacer estas modificaciones:

OE7

Le damos Aplicar y Aceptar y volvemos a enviar el correo electrónico. Aparecerá una ventanita preguntandonos si queremos aceptar el certificado del servidor. Le demos Sí

OE8

Este es el resultado:

OE9

De esta forma tendremos un servidor de correo electrónico configurado de manera segura, bloqueando el correo no deseado y que no permite el envío de correos electrónicos, a través del server, a clientes que no estén autenticados y que usen una conexión segura (SSL/TLS).

 

Cortafuego

Si tenemos instalado un cortafuego (tipo IPtables) estos son los puertos que tenemos que abrir:

25 TCP

465 TCP

587 TCP

110 TCP

995 TCP

143 TCP

993 TCP

Sugerencias?

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

12 comentarios

Test Antispam

Para probar que efectivamente Sendmail no está aceptando correo no deseado desde la linea de comando de Linux podemos utilizar este comando:

telnet relay-test.mail-abuse.org

Al terminar las varias pruebas miramos los resultados:

Tested host banner: 220 voztovoice.com ESMTP Sendmail 8.13.8/8.13.8; Mon, 19 Oct 2009 14:13:55 -0500
System appeared to reject relay attempts
Connection closed by foreign host.

Prueba con telnet no superada

Buenos días

Después de completar el tutorial, al hacer pruebas, no aparece la línea:

250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5

De todas maneras, las demás pruebas fueron exitosas. Excelente guía.

Gracias

cooreo creado en linux

Buenas,
he creado una cuenta de correo adduser -s /sbin/nologing "cuenta";
y le puse su clave a la cuenta creada, pero todos los mail que entran se van a la bandeja de no deseado y le antepone el en asunto ***SPAM*** y lo mail que salen de esta cuenta tambien salen como ***SPAM*** uso el outlook 2010 home and business, gracias ppor su ayuda.

Probe en otro outlook de otra pc pero no hay problema, tambien 2010 HyB

problema

Hola : dos consultas .
1.- al utilizar nano /etc/mail/sendmail.mc no supe guardarlo correctamente y se me creo 3 archvos con el mismo nombre Sendmail.conf.save , Sendmail.conf.save.1 y Sendmail.conf.save.2 , aparte esta el original que se llama Sendmail.conf. , cual de todos deveria tener y cual elimino???.

2.- la linea: yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool
./configure

no entiendo ese configure por que despues pongo

make y me sale:
make: *** No se especificó ningún objetivo y no se encontró ningún makefile. Alto.

y ahi me quede ...
que puedo hacer , uso el centOS 6.2

Instalacion de Servidor de Correo en CentOS 6.3

Basicamente yo descargue el CentOS 6.3 ya que quiero hacer unas pruebas primero en una maquina virtual. El asunto es que la instalación va bien hasta el punto en donde se tiene que instalar el spamass-milter, la version que provee el autor parece ser compatible aunque en algunos sitios aparece que no es.

El problema es que al paquete spamass-milter, necesita ser verificado con el ./configure y es aqui donde esta el verdadero problema. Al ejecutar este comando:

yum install libtermcap libtermcap-devel

Estas dos librerias no aparecen estar disponibles mas para el CentOS 6, y por lo tanto el spamass-mitler no se puede instalar. En mi caso lo que yo hice fue agregar el repositorio de rpmforge y alli baje el spamassa-mitler, pero una vez instalado y siguiendo el resto de la guia no funciono, pero seguire intentando a ver si me he equivocado en algo.

Saludos.

instalar un servidor de correos en linux centos,

Saludos cordiales,

en la oficina tenemos un servidor Centos 5 que lo estamos usando como servidor de Base de dotos y como servidor de archivos,

pero en estos últimos tiempos estamos teniendo problemas con nuestro proveedor de correos, pues a algunos dominios no llegan nuestros correos.

----
Cuando estábamos estudiando en el Instituto nos enseñaron a configurar un correo en sendmail pero no lo volví ha hacer mas.

pues ahora me veo en la nececidad de hacerlo y espero me puedan dar una manito si me llego a entrampar en algo.

Saludos cordiales.
Daván Palma

Autentificación

Hola! antes de todo agradecer a quien haya creado este manual tan bueno por su esfuerzo y dedicación, está perfecto, eso sí tengo un pequeño problema que no doy con él, he llevado a cabo todos los pasos con resultados óptimos, excepto cuando intento asociar mi cuenta de correo en un cliente, he probado outlook y thunderbird, el asunto es que no me deja autenticarme, porque dice que el usuario o la contraseña no son correctos, he agregado diferentes usuarios con diferentes contraseñas y nada! me da la opción del certificado le acepto pero nunca llega a ese paso final,no les puedo dar mas pistas debido a que todos los pasos han ido favorablemente, sabrán que puede ser? alguna pista? muchas gracias de antemano, reciban un cordial saludo

RE:

segun veo en el manual si usas la gama de outlook debes usar el comando saslpasswd2 para generar la clave y nos cuentas si lo pudiste resolver

saludos!!!

El mismo problema....!

He tratado de solucionar este mismo problema que se me ha presentado y no he podido.
Me gustaría saber como lo solucionaste, ya que he realizado lo siguiente.
Deshabilite el SELinux el Firewall y nada, he agregado los puertos pertinentes y tampoco.
Tambien utilize saslpasswd2 para generar la clave y tampoco.

mismo problema

Hola amigo, como resolviste el problema..? Te lo agradecería mucho, saludos

Suscribirse a Comentarios de "Instalar y configurar un servidor SMTP/POP3/IMAP en CentOS con acceso TSL/SSL y SASL" Suscribirse a VozToVoice - Todos los comentarios