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.
Primero instalamos los paquetes necesarios:
yum install sendmail*
yum install cyrus*
yum install dovecot
yum install procmail
yum install spamassassin
[TABLE="width: 266"]
[TR]
[TD] [h=1]
Sendmail[/h] [/TD]
[/TR]
[/TABLE]
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
[TABLE="width: 722"]
[TR]
[TD]
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[/TD]
[/TR]
[/TABLE]
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 []:
[email protected]
Importante definir en Common Name el registro MX que usaremos para conectarnos al servidor Sendmail.
[TABLE="width: 305"]
[TR]
[TD]
[h=1]Dovecot[/h]
[/TD]
[/TR]
[/TABLE]
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:
[TABLE="width: 460"]
[TR]
[TD]
# 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
[/TD]
[/TR]
[/TABLE]
Gurdamos los cambios y configuramos Dovecot para que arranque en automático:
chkconfig dovecot on
[TABLE="width: 316"]
[TR]
[TD]
[h=1]SpamAssassin[/h]
[/TD]
[/TR]
[/TABLE]
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
[TABLE="width: 315"]
[TR]
[TD]
[h=1]LOGs y Prueba SPAM[/h]
[/TD]
[/TR]
[/TABLE]
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?
[TABLE="width: 319"]
[TR]
[TD] [h=1]
Outlook Express[/h] [/TD]
[/TR]
[/TABLE]
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:
Luego la dirección de correo electrónico:
Direccion del servidor de entrada y salida de los correos electronicos (seleccionamos tambien la casilla que aparece en la imagen):
Nombre de usuario y contraseña (como lo hemos creado con el comando adduser en Linux):
Terminamos dando click en el botón Finalizar
Ahora escribimos nuestro primer correo electrónico usando la cuenta recién creada. Cuando intentaremos enviar el correo nos saldrá este error:
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:
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í
Este es el resultado:
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).
[TABLE="width: 281"]
[TR]
[TD] [h=1]
Cortafuego[/h] [/TD]
[/TR]
[/TABLE]
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