Configuración básica de Sendmail con soporte SSL/TLS.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Es imprescindible primero estudiar y comprender los conceptos descritos en el documento titulado «Introducción a los protocolos de correo electrónico

Acerca de Sendmail.

Es uno de los más populares agentes de transporte de correo electrónico (MTA o Mail Transport Agent). Es un proyecto derivado delivermail y fue dirigido originalmente por Eric Allman a principios de la década de 1980. Aunque por largo tiempo se le ha criticado por muchos incidentes de seguridad, lo cierto es que éstos siempre han sido resueltos en tiempos razonables.

URL: http://www.sendmail.org/.

Acerca de SASL y Cyrus SASL.

SASL (Simple Authentication and Security Layer) es una implementación diseñada para la seguridad de datos en protocolos de Internet. Desempareja los mecanismos de la autenticación desde protocolos de aplicaciones, permitiendo, en teoría, cualquier mecanismo de autenticación soportado por SASL, para ser utilizado en cualquier protocolo de aplicación que sea capaz de utilizar SASL. En la actualidad SASL es un protocolo de IETF (Internet Engineering Task Force) que ha sido propuesto como estándar. Está especificado en el RFC 2222 creado por John Meyers en la Universidad Carnegie Mellon.

Cyrus SASL es una implementación de SASL que puede ser utilizada del lado del servidor o bien del lado del cliente y que incluye como principales mecanismos de autenticación soportados a ANONYMOUS, CRAM-MD5, DIGEST-MD5, GSSAPI y PLAIN. El código fuente incluye también soporte para los mecanismos LOGIN, SRP, NTLM, OPT y KERBEROS_V4.

URL: http://asg.web.cmu.edu/sasl/sasl-library.html.

Acerca de DSA.

DSA (Digital Signature Algorithm o Algoritmo de Firma digital) es un algoritmo creado por el NIST (National Institute of Standards and Technology o Instituto Nacional de Normas y Tecnología de EE.UU.), publicado el 30 de agosto de 1991, como propuesta para el proceso de firmas digitales. Se utiliza para firmar información, más no para cifrar ésta.

URL: http://es.wikipedia.org/wiki/DSA

Acerca de RSA.

RSA, acrónimo de los apellidos de sus autores, Ron Rivest, Adi Shamir y Len Adleman, es un algoritmo para el ciframiento de claves públicas que fue publicado en 1977, patentado en EE.UU. en 1983 por el Instituto Tecnológico de Michigan (MIT). RSA es utilizado ampliamente en todo el mundo para los protocolos destinados para el comercio electrónico.

URL: http://es.wikipedia.org/wiki/RSA

Acerca de X.509.

X.509 es un estándar ITU-T (estandarización de Telecomunicaciones de la International Telecommunication Union ) para infraestructura de claves públicas (PKI o Public Key Infrastructure). Establece los estándares para certificados de claves públicas y un algoritmo para validación de ruta de certificación. Este último se encarga de verificar que la ruta de un certificado sea válida bajo una infraestructura de clave pública determinada. Es decir, desde el certificado inicial —pasando por certificados intermedios— hasta el certificado de confianza emitido por una Autoridad Certificadora (CA o Certification Authority).

URL: http://es.wikipedia.org/wiki/X.509

Acerca de OpenSSL.

OpenSSL es una implementación libre de código fuente abierto, de los protocolos SSL (Secure Sockets Layer o Nivel de Zócalo Seguro) y TLS (Transport Layer Security o Seguridad para Nivel de Transporte). Está basado sobre el extinto proyecto SSLeay iniciado por Eric Young y Tim Hudson.

URL: http://www.openssl.org/

Equipamiento lógico necesario.

Instalación a través de yum.

Si se utiliza de CentOS o Red Hat™ Enterprise Linux ejecute lo siguiente:

yum -y install sendmail sendmail-cf m4 make \
    cyrus-sasl cyrus-sasl-plain

Procedimientos.

Definiendo Sendmail como agente de transporte de correo predeterminado.

Ejecute alternatives con la opción --config y el valor mta:

alternatives --config mta

Lo anterior devolverá una salida similar a la siguiente, donde deberá elegir entre postfix y sendmail como MTA predeterminado del sistema:


Hay 2 programas que proporcionan 'mta'.

  Selección    Comando
-----------------------------------------------
   1           /usr/sbin/sendmail.postfix
*+ 2           /usr/sbin/sendmail.sendmail

Presione Intro para mantener la selección actual[+] o bien escriba el número de la selección:  2

Defina Sendmail como agente de transporte de correo (MTA, Mail Transport Agent), seleccionado éste

Si estuviera presente postfix, desactive y detenga éste y active e inicie el servicio sendmail:

service postfix stop
chkconfig postfix off
service sendmail start
chkconfig sendmail on

Certificado SSL/TLS.

Es importante generar un certificado SSL/TLS personalizado.

Elimine el certificado de prueba que está asociado al nombre de anfitrión localhost.

rm -f /etc/pki/tls/certs/sendmail.pem

La creación de la firma digital y certificado —en un único archivo con extensión *.pem— requiere utilizar una firma con algoritmo RSA de 4096 octetos (bits), estructura X.509 y sin DES. En el siguiente ejemplo, se establece una validez por 1825 días (cinco años) para el certificado creado:

openssl req -sha256 -new -x509 -nodes -newkey rsa:4096 -days 1825 \
    -out /etc/pki/tls/certs/sendmail.pem \
    -keyout /etc/pki/tls/certs/sendmail.pem

Lo anterior solicitará se ingresen varios datos:

La salida será algo similar a lo siguiente:

Generating a 1024 bit DSA private key
writing new private key to 'smtp.key'
-----
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]:MX
State or Province Name (full name) [Berkshire]:Distrito Federal
Locality Name (eg, city) [Newbury]:Mexico
Organization Name (eg, company) [My Company Ltd]:Empresa, S.A. de C.V.
Organizational Unit Name (eg, section) []:Unidad de negoico responsable
Common Name (eg, your name or your server's hostname) []:mail.dominio.com
Email Address []:webmaster@dominio.com

Si definió un nombre de anfitrión absoluto (ejemplo: mail.dominio.com), el certificado sólo será válido cuando el servidor de correo electrónico sea invocado con el nombre definido en el campo Common Name. Es decir, sólo podrá utilizarlo cuando se defina mail.dominio.com como servidor SMTP/IMAP/POP3 con soporte TLS desde el cliente de correo electrónico. Funcionará incorrectamente si se invoca al servidor como, por mencionar un ejemplo, correo.dominio.com.

A fin de facilitar a los clientes de correo electrónico el poder gestionar una futura actualización de certificado, conviene añadir una huella distintiva indubitable (fingerprint) al certificado.

openssl x509 -subject -fingerprint -noout \
    -in /etc/pki/tls/certs/sendmail.pem

Es indispensable que el archivo *.pem tenga permisos de acceso de lectura y escritura sólo para root:

chmod 600 /etc/pki/tls/certs/sendmail.pem
chown root:root /etc/pki/tls/certs/sendmail.pem

Alta de cuentas de usuario y asignación de contraseñas.

La autenticación para SMTP, a través de cualquier método —PLAIN, LOGIN, Digest-MD5 o CRAM-MD5— requiere se gestione a través del servicio saslauthd.

Si los usuarios se van a dar de alta siguiendo el formato usuario@dominio.com en lugar de sólo usuario, una práctica común en los servidores con múltiples dominios virtuales, es necesario añadir al servicio saslauthd la opción -r, la cual permite combinar el nombre de usuario y dominio antes de pasar por el mecanismo de autenticación. Si éste es el caso, se debe editar el archivo /etc/sysconfig/saslauthd:

vi /etc/sysconfig/saslauthd

Y añadir la opción -r a los argumentos de FLAGS:

# Options sent to the saslauthd. If the MECH is other than "pam" uncomment
# the next line.
# DAEMONOPTS=--user saslauth

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=-r

Añada el servicio al arranque del sistema e inicie éste ejecutando lo siguiente:

chkconfig saslauthd on
service saslauthd start

El alta de usuarios es la misma que como con cualquier otro usuario del sistema. Sendmail utilizará el servicio saslauthd para autenticar a éstos a través de los métodos PLAIN y LOGIN.

Se sugiere se asignar /dev/null o /sbin/nologin como intérprete de mandatos para los usuarios de correo. Ejemplo:

useradd -s /dev/null usuario

La asignación de contraseñas para permitir autenticar a través de SMTP, POP3, e IMAP, utilizando el método PLAIN o bien el método LOGIN, se hace exactamente igual que con cualquier otra cuenta de usuario del sistema:

passwd usuario

El sistema solicitará se confirme la nueva contraseña. Prefiera utilizar buenas contraseñas y evitará así problemas de seguridad.

Nota.

La asignación de contraseñas para autenticar SMTP a través de métodos CRAM-MD5 y DIGEST-MD5 puede hacerse ejecutando saslpasswd2 con el nombre de usuario como argumento:

saslpasswd2 usuario

Cabe señalar que sólo algunos clientes de correo electrónico tienen de soporte para autenticar a través de estos métodos.

Puede mostrarse la lista de los usuarios con contraseña asignada a través de SASL-2 ejecutando sasldblistusers2.


Dominios a administrar.

Edite el archivo /etc/mail/local-host-names:

vi /etc/mail/local-host-names

Establezca los dominios locales que serán administrados:

dominio1.com
dominio2.net
dominio3.org
dominio4.com.mx

Control de acceso

Edite el archivo /etc/mail/access para definir las listas de control de acceso:

vi /etc/mail/access

Este archivo debe incluir todas las direcciones IP locales del servidor —las que se devuelvan tras ejecutar ip addr show.

Puede incluir también la lista direcciones IP, dominios o cuentas de correo electrónico a las que se quiera otorgar permisos de re-transmisión sin restricciones o con permiso para enviar correo electrónico sólo a cuentas locales. Puede definir también una lista negra de direcciones de correo electrónico, dominios y direcciones IP a las que se desee denegar el acceso. Considere que:

Nota.

Jamás configure una segmento completo de red local con RELAY, ya que dejaría de tener sentido utilizar autenticación a través de SMTP y potencialmente podría permitir que los problemas de seguridad de maquinas infectadas con virus, gusanos o troyanos, se magnifiquen, siendo que permitiría el envío, sin restricciones, de correo electrónico infectado o bien cantidades extraordinarias de spam, originadas por los equipos cuya seguridad se haya visto comprometida.

Ejemplo de configuración para el archivo /etc/mail/access:

Connect:localhost.localdomain	RELAY
Connect:localhost		RELAY
Connect:127.0.0.1		RELAY
#
# Dirección IP del propio servidor.
Connect:192.168.70.51		RELAY
#
# Otros servidores de correo en la LAN a los que se les permitirá enviar
# correo libremente a través del propio servidor de correo.
Connect:192.168.70.52		RELAY
#
# Direcciones IP que sólo podrán entregar correo de forma local, es decir,
# no pueden enviar correo fuera del propio servidor.
Connect:192.168.2.24		OK
#
# Lista negra
usuario@molesto.com	REJECT
productoinutil.com.mx	REJECT
10.4.5.6		REJECT
#
# Bloques de Asia Pacific Networks, ISP desde el cual se emite la mayor
# parte del Spam del mundo.
# Las redes involucradas abarcan Australia, Japón, China, Corea del Sur, Taiwan,
# Hong Kong e India por lo que bloquear el correo de dichas redes significa
# cortar comunicación con estos países, pero acaba con entre el 60% y 80%
# del Spam.
222			REJECT
221			REJECT
220			REJECT
219			REJECT
218			REJECT
212			REJECT
211			REJECT
210			REJECT
203			REJECT
202			REJECT
140.109			REJECT
133			REJECT
61			REJECT
60			REJECT
59			REJECT
58			REJECT

Alias de root.

Es peligroso autenticarse con la cuenta de root para revisar los mensajes de correo electrónico originados por el sistema. Defina un alias hacia el cual se entregará todo el correo electrónico que originalmente fue dirigido a root.

Edite el archivo /etc/aliases:

vi /etc/aliases

Defina al final del archivo la cuenta de usuario regular al que le será entregado el correo electrónico originalmente iba dirigido a root:

root:		fulano

Ejecute newaliases para convertir el archivo /etc/aliases en /etc/aliases.db y verificar que la sintaxis esté correcta o determinar si existen aliases duplicados.

newaliases

Lo anterior debe devolver una salida similar a la siguiente:

/etc/aliases: 77 aliases, longest 10 bytes, 777 bytes total

Configuración de opciones de Sendmail.

Edite el archivo /etc/mail/sendmail.mc.

vi /etc/mail/sendmail.mc

confSMTP_LOGIN_MSG.

Esta opción permite establecer el mensaje de bienvenida al establecer la conexión al servidor y ocultar el nombre y la versión de Sendmail para agregar seguridad por oscuridad. Funciona haciendo que quien establezca una conexión hacia el servidor sea incapaz determinar qué versión de Sendmail se está utilizando y con ésto dificultar se puedan determinar las debilidades del servicio o determinar una vulnerabilidad específica. Habilite la siguiente línea resaltada eliminando el dnl y el espacio sobrante:

dnl # Do not advertize sendmail version.
dnl #
define(`confSMTP_LOGIN_MSG',`$j Sendmail; $b')dnl
dnl #
dnl # default logging level is 9, you might want to set it higher to
dnl # debug the configuration

Guarde los cambios y salga del editor.

Reinicie el servicio:

service sendmail restart

Realice una conexión al puerto 25. Obtendrá una salida similar a la siguiente:

$ telnet 127.0.0.1 25
220 mail.dominio.com ESMTP Sendmail ; Mon, 17 May 2004 02:22:29 -0500
quit
221 2.0.0 mail.dominio.com closing connection
Connection closed by foreign host.
$

confAUTH_OPTIONS.

Vuelva a editar el archivo /etc/mail/sendmail.mc:

vi /etc/mail/sendmail.mc

La siguiente línea resaltada permite realizar el proceso de autenticación a través del puerto 25 utilizando el método PLAIN o bien el método LOGIN, los cuales transmiten el nombre de usuario junto con su correspondiente contraseña en texto simple, garantizando 100% de compatibilidad con todos los clientes de correo electrónico existentes. Sin embargo ésto también implica un enorme riesgo de seguridad, por lo cual se recomienda implementar seguridad a través de SSL/TLS.

define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS',`A')dnl
dnl #
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links

Inhabilite ésta añadiendo un dnl y un espacio como se muestra a continuación:

define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
dnl define(`confAUTH_OPTIONS',`A')dnl
dnl #
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links

Localice la siguiente línea resaltada y habilite ésta eliminado el dnl y el espacio sobrante como se muestra a continuación:

dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
define(`confAUTH_OPTIONS',`A p')dnl
dnl # 
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do

Lo anterior hará que sea obligatorio a utilizar SSL/TLS para todas las conexiones con cualquier cliente de correo electrónico

TRUST_AUTH_MECH y confAUTH_MECHANISMS.

El soporte de autenticación requiere habilitar las siguientes dos líneas resaltadas:

dnl # guaranteed secure.
dnl # Please remember that saslauthd needs to be running for AUTH. 
dnl #
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl # dnl # Rudimentary information on creating certificates for sendmail TLS: dnl # cd /etc/pki/tls/certs; make sendmail.pem

Elimine el soporte para GSSAPI, DIGEST-MD5 y CRAM-MD5. El primero requiere un servidor Kerberos y para los otros el algoritmo de ciframiento es demasiado débil para ser utilizado sin SSL/TLS y además sólo es soportado por algunos clientes de correo electrónico.

dnl # guaranteed secure.
dnl # Please remember that saslauthd needs to be running for AUTH. 
dnl #
TRUST_AUTH_MECH(`EXTERNAL LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL LOGIN PLAIN')dnl
dnl # dnl # Rudimentary information on creating certificates for sendmail TLS: dnl # cd /etc/pki/tls/certs; make sendmail.pem

Soporte para SSL/TLS.

Habilite las siguientes líneas resaltadas para hacer el uso de la firma digital y certificado creados:

dnl # Complete usage:
dnl #     make -C /etc/pki/tls/certs usage
dnl #
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 #
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP's
dnl # slapd, which requires the file to be readble by group ldap

DAEMON_OPTIONS.

De modo predeterminado Sendmail sólo escucha peticiones a través de la interfaz de retorno del sistema (127.0.0.1). Localice la siguiente línea resaltada:

dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their

Elimine el valor Addr=127.0.0.1 y la coma sobrante:

dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their

El puerto 587 (submission) puede ser utilizado también para envío de correo electrónico. Por estándar se utiliza como puerto alternativo en los casos donde un cortafuegos impide a los usuarios acceder hacia servidores de correo electrónico —que normalmente utilizan el puerto 25. Localice y habilite la siguiente línea resaltada:

dnl # preferred sendmail daemon due to port 25 being blocked or redirected find
dnl # this useful.
dnl #
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed

El acceso con STARTTLS se realizará a través de los puertos 25 o 587, sin embargo el acceso con SSL se realizará a través del puerto 465. Localice y habilite la siguiente línea resaltada:

dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl #
dnl # The following causes sendmail to additionally listen on the IPv6 loopback
dnl # device. Remove the loopback address restriction listen to the network.

FEATURE(`accept_unresolvable_domains').

A fin de permitir el envío local del correo electrónico para los mensajes y alertas del sistema en un escenario sin servidores DNS, se utiliza la opción FEATURE(`accept_unresolvable_domains'). Debe inhabilitarse para impedir se acepte correo de dominios inexistentes (generalmente utilizado para el envío de correo masivo no solicitado o Spam). Inhabilite la línea añadiendo un dnl y un espacio:

dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24x7 DNS do need this.
dnl #
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl #
dnl FEATURE(`relay_based_on_MX')dnl
dnl #

Archivo plantilla de todo lo anterior.

Si lo prefiere, puede descargar un archivo plantilla con todas las opciones para el archivo /etc/mail/sendmail.mc mencionadas arriba.

wget http://www.alcancelibre.org/linux/secrets/sendmail.mc \
    -O /etc/mail/sendmail.mc

Enmascaramiento.

El enmascaramiento sólo es necesario en casos donde el nombre de anfitrión del sistema es distinto al del dominio(s) administrado(s) en el servidor.

Habilite las siguientes tres líneas resaltadas eliminando los dnl y los espacio sobrantes y adapte el valor de MASQUERADE_AS para definir la máscara que utilizará el servidor para enviar correo electrónico (es decir, define lo que va después de la @ en la dirección de correo):

dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl #
MASQUERADE_AS(`dominio1.com')dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #
FEATURE(masquerade_envelope)dnl
dnl #
dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl #
FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl

En el ejemplo anterior dominio1.com es sólo un ejemplo hipotético. Remplace por un dominio real.

Si se van a administrar múltiples dominios, añada aquellos que considere deban conservar su propia máscara. Utilice la opción MASQUERADE_EXCEPTION para cada uno como se muestra en el siguiente ejemplo:

dnl # specified domains appear to be sent from mydomain.com
dnl #
MASQUERADE_AS(`dominio1.com')dnl
MASQUERADE_EXCEPTION(`dominio2.net')dnl
MASQUERADE_EXCEPTION(`dominio3.org')dnl
MASQUERADE_EXCEPTION(`dominio4.com.mx')dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #

En el ejemplo anterior dominio1.com, dominio2.net, dominio3.org y dominio4.com.mx son sólo ejemplos hipotéticos. Remplace por dominios reales.

Control del correo chatarra (spam) a través de DNSBLs.

Si se desea utilizar listas negras para mitigar el correo chatarra (spam), pueden añadir la siguiente línea para definir la lista negra de SpamCop.net, casi al final del archivo /etc/mail/sendmail.mc y justo arriba de MAILER(smtp)dnl:

dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
FEATURE(`enhdnsbl', `bl.spamcop.net', `"Spam blocked see: http://spamcop.net/bl.shtml?"$&{client_addr}', `t')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl

Iniciar, detener o reiniciar servicio.

Ejecute lo siguiente para aplicar cambios realizados a la configuración:

service sendmail restart

Ejecute lo siguiente para iniciar por primera vez el servicio:

service sendmail start

Ejecute lo siguiente para detener el servicio:

service sendmail stop

Examine el contenido de /var/log/maillog ejecutando tail con la opción -f para detectar errores en la configuración:

tail -f /var/log/maillog

Comprobaciones.

Realice una conexión con nc (netcat) o bien con telnet, hacia al puerto 25 del anfitrión local:

telnet 127.0.0.1 25

Ejecute EHLO usando como argumento el nombre del dominio configurado y pulse la tecla ENTER. La salida deberá devolver todas las funciones del servidor y entre éstas debe devolver una línea que indica STARTTLS. La salida puede ser similar a la siguiente:

220 dominio.com ESMTP Sendmail ; Sat, 19 Jun 2010 18:18:02 -0500
ehlo dominio.com
250-dominio.dom Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-STARTTLS
250-DELIVERBY
250 HELP
QUIT

Ejecute QUIT y pulse la tecla ENTER para salir.

Ejecute lo siguiente para verificar el soporte SSL/TLS estableciendo conexiones SSL y TLS hacia los puertos 25, 465 y 587:

openssl s_client -crlf -connect 127.0.0.1:25 -starttls smtp
openssl s_client -connect 127.0.0.1:465
openssl s_client -crlf -connect 127.0.0.1:587 -starttls smtp

La salida de cualquiera de los anteriores será muy extensa, mostrando la información del certificado utilizado.

Ingrese EHLO con el dominio configurado. La salida deberá devolver todas las funciones del servidor y entre éstas debe devolver una línea que indica AUTH LOGIN PLAIN. La salida después del la información del certificado puede ser similar a la siguiente:

220 dominio.com ESMTP Sendmail ; Sat, 19 Jun 2010 18:18:02 -0500
ehlo dominio.com
250-dominio.com Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
QUIT

Realice el ejemplo de conexión para SMTP descrito en el documento titulado Introducción a los protocolos de correo electrónico para verificar el funcionamiento del envío de correo a través de SSL/TLS.

Modificaciones necesarias en el muro cortafuegos.

Como medida de seguridad siempre abra los puertos del cortafuegos sólo hasta después de finalizar la configuración del servidor de correo electrónico y que sólo hasta que haya comprobado las configuraciones.

El funcionamiento normal de un servicio de correo electrónico estándar requiere abrir los puertos 25 (smtp), 465 (smtps) y 587 (submission), todos a través de TCP.

Servicio iptables.

Ejecute lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT

Ejecute lo siguiente para guardar los cambios:

service iptables save

O bien edite el archivo /etc/sysconfig/iptables:

vi /etc/sysconfig/iptables

Añada lo siguiente:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT

Reinicie el servicio:

service iptables restart

Shorewall.

Edite el archivo /etc/shorewall/rules:

vi /etc/shorewall/rules

Las reglas corresponderían a algo similar a lo siguiente:

#ACTION	SOURCE	DEST	PROTO 	DEST		SOURCE
#				PORT		PORT(S)1
ACCEPT	all	fw	tcp	25,465,587

Reinicie el servicio para aplicar los cambios:

service shorewall restart

Equipamiento lógico para servicios de IMAP y POP3.

Dovecot es una ligera, rápida y transparente solución de fácil administración para los servicios de IMAP y POP3. Sólo es apropiado para servidores que serán accedido preferentemente a través de POP3, menos de 100 usuarios o bien a través de IMAP con buzones de menos de 50 MB y baja a mediana carga de trabajo. Si así fuesen las circunstancias, por favor consulte el documento titulado «Configuración de Dovecot con soporte SSL/TLS.».

Cyrus IMAP es una compleja pero muy robusta y escalable solución que permite acceder hacia enormes cantidades de correo electrónico a través de IMAP o POP3 con mediana a elevada carga de trabajo. Si así fuesen las circunstancias, por favor consulte el documento titulado «Configuración de Cyrus IMAP con soporte SSL/TLS».

Lecturas posteriores.

Se recomienda consultar los documentos titulados «Configuración de Cyrus IMAP con soporte SSL/TLS», «Configuración de Dovecot con soporte SSL/TLS», «Configuración avanzada de Sendmail», «Cómo instalar y configurar Spamassassin» y «Configuración simple para Antivirus y Antispam».