Simple Mail Transfer Protocol (SMTP), es uno de los servicios más importantes que proporciona Internet. Ahora casi todas las compañías tienen o dependen del correo, y por extensión todos los servidores SMTP. Se encuentran disponibles muchos paquetes SMTP, siendo el más viejo y el más probado el Sendmail (ahora con soporte comercial, etc.), y hay dos nuevos contendientes, Postfix y Qmail, ambos dos escritos desde cero teniendo en cuenta la seguridad. Filtrar con el cortafuegos el SMTP no tiene pérdida, se ejecuta en el puerto 25, tcp:
ipfwadm –I –a accept –P tcp –S 10.0.0.0/8 –D 0.0.0.0/0 25
ipfwadm –I –a accept –P tcp –S un.host.fiable –D 0.0.0.0/0 25
ipfwadm –I –a deny –P tcp –S 0.0.0.0/0 –D 0.0.0.0/0 25
o bien con ipchains:
ipchains –A input –p tcp –j ACCEPT –s 10.0.0.0/8 –d 0.0.0.0/0 25
ipchains –A input –p tcp –j ACCEPT –s un.host.fiable –d 0.0.0.0/0 25
ipchains –A input –p tcp –j DENY –s 0.0.0.0/0 –d 0.0.0.0/0 25
Sendmail
Sendmail es otro de esos servicios con los que la mayoría de nosotros hemos tenido relaciones. Odiamos administrarlo y nos encantaría reemplazarlo (en realidad he empezado a eliminar el Sendmail de las máquinas que administro y lo estoy reemplazando con el Postfix).
Sendmail se ha ganado por sí mismo una muy mala reputación en cuanto a seguridad, sin embargo es difícil echarle la culpa al software cuando te encuentras con sistemas ejecutando versiones antiguas del sendmail. La raíz del problema (si se me permite el mal juego de palabras) es que casi todo el mundo ejecuta el sendmail como root (y algo así como el 70% del correo de Internet se maneja mediante máquinas con Sendmail, de modo que hay un montón de ellas), de forma que tan pronto se encuentra un bug, encontrar un sistema que explotar no es tan difícil. Las últimas versiones de sendmail han sido bastante buenas, sin hacks del root, etc, y con las nuevas características anti spam finalmente ha alcanzado la mayoría de edad. Más información en Sendmail y su código fuente está disponible en: http://www.sendmail.org/
Hacer un chroot del sendmail es una buena opción, pero lleva demasiado trabajo, y puesto que se ejecuta como root, algo bastante discutible en cuanto a su efectividad (puesto que el root se puede escapar de una cárcel chroot). Personalmente pienso que es mejor invertir el esfuerzo en cambiarse a Postfix o a Qmail.
Mantener actualizado el sendmail es relativamente simple, recomendaría como mínimo la versión 8.9.3 (la serie 8.9 tiene más características anti-spam, la 8.8.x tiene la mayoría de estas características, suponiendo que se ha configurado correctamente el sendmail.cf). La mayoría de las distribuciones vienen con la 8.8.x, aunque las versiones más recientes suelen venir con la 8.9.x. Se puede conseguir el código fuente desde ftp://ftp.sendmail.org/, pero compilar el sendmail no es algo para el débil de corazón o para aquellos que no tengan un montón de tiempo para dedicárselo.
Sendmail sólo tiene que estar accesible desde el mundo exterior si se está utilizando para recibir correo de otras máquinas y repartirlo localmente. Si sólo se quiere ejecutar sendmail de forma que funcione el reparto local (p. ej., una estación de trabajo autónoma, un servidor de prueba u otros) y que se pueda enviar con facilidad el correo a otras máquinas, simplemente filtra con el cortafuegos el sendmail, o mejor, no lo ejecutes en modo demonio (en el cual escucha conexiones). Sendmail se puede ejecutar en la cola de refresco de un nodo, donde simplemente se "despierta" cada cierto tiempo y procesa el correo local, ya sea distribuyéndolo localmente o enviándolo a través de la red. Para configurar la ejecución del Sendmail en modo cola:
edita el script de inicio del Sendmail y cambia la línea que contiene:
sendmail –bd –q1h
por:
sendmail –q1h
Ten en cuenta que: si utilizas el sistema para enviar mucho correo quizás prefieras disminuir el tiempo de refresco, quizás "-q15m" (refrescar la cola cada 15 minutos), ahora el correo saliente y el correo interno del sistema se comportarán bien, lo cual a menos que se ejecute un servidor de correo, es perfecto.
Ahora vienen todas esas maravillosas características anti-spam del sendmail. Los ficheros de configuración del Sendmail consisten en (se aplica al Sendmail 8.9.x):
/etc/sendmail.cf
El fichero de configuración principal, también dice dónde se encuentran el resto de ficheros de configuración.
/etc/mail
/Se puede definir la localización de los ficheros de configuración en sendmail.cf, generalmente la gente los coloca en /etc/ o en /etc/mail (lo cual lo lía menos).
access
La base de datos de la lista de accesos, permite rechazar el correo proveniente de ciertas fuentes (IP o dominio), y controlar con facilidad las transmisiones. Mi fichero de acceso es así:
spam.com REJECT
lo que quiere decir que a 10.0.0.* (los hosts de mi red interna) se les permite utilizar el servidor de correo para enviar correo donde quieran, y el correo de *.spam.com se rechaza. Hay listas en línea de spammers conocidos, generalmente suele tener entre 5-10.000 entradas, lo cual puede afectar seriamente el rendimiento del sendmail (pues cada conexión se comprueba contra esta lista), por otra parte, tener una máquina sendmail para enviar spam es incluso peor.
aliases
El fichero de alias, te permite controlar el reparto del correo local al sistema, es útil para hacer una copia de seguridad del correo entrante de un usuario a un spool por separado. La mayoría del software de servidores de listas utiliza este fichero para enviar el correo que recibe a los programas que realmente procesan las listas. Recuerda ejecutar el comando "newaliases" después de editar este fichero, y después reiniciar el sendmail.
domaintable
la tabla de dominios (añadir dominios) que se maneja, útil para hacer hosting virtual.
majordomo
fichero de configuración de majordomo, personalmente recomendaría SmartList a Majordomo.
sendmail.cw
fichero que contiene nombres de hosts de los que se recibe correo, útil si se alberga más de un dominio.
sendmail.hf
situación del fichero de ayuda (telnet al puerto 25 y escribir "HELP")
virtusertable
Tabla de usuario virtual, mapea usuarios entrantes, p. ej., mapear ventas@ejemplo.org a john@ejemplo.org
Sendmail 8.9.x (y versiones anteriores) en realidad no tienen soporte para hacer un log de todo el correo de una forma agradable (un requisito indispensable por muchas compañías por motivos legales). Esta es una de las características sobre las que se trabaja en la versión de Sendmail 8.10.x. Hasta entonces, hay dos formas de hacer log del correo, la primera es algo agraciada, y registra un log de los correos entrantes a usuarios según cada usuario. El segundo método no es agraciado, e implica un simple log de todas las transacciones SMTP a un fichero, habría que escribir algún tipo de procesador (probablemente en perl) para que el log fuese útil.
El correo (o las conexiones SMTP para ser más precisos) primero se filtra con el fichero access, y es aquí donde se pueden RECHAZAR correos de ciertos dominios/IP’s, y TRANSMITIR correo de ciertos hosts (p. ej. tu red interna de máquinas windows). Cualquier dominio local para el que se hospeda el correo tendrá que ir al sendmail.cw. Suponiendo que el correo cumple con las reglas y va a la cola para reparto local, el siguiente fichero que se comprueba en virtusertable, que es una lista de direcciones de correo mapeadas al nombre de la cuenta/otra dirección de correo. p.ej.:
seifried@seifried.org alias-seifried
listuser@seifried.org usuariolista
@seifried.org correos-estropeados
La última regla es para evitar que reboten los correos estropeados, y que en lugar de eso se envíen a un buzón. Después se comprueba el fichero de alias, si se encuentra una entrada se hace lo que dice, y si no, se intenta entregar el correo a un buzón de un usuario local, mi entrada seifried del fichero de alias es:
alias-sei
fried: seifried, "/var/backup-spool/seifried"De esta forma mi correo se reparte a mi buzón normal, y a un buzón de copia de seguridad (por si acaso he borrado un correo que no quisiera), o en el peor de los casos, Microsoft Outlook decide cascar un día y cargarse mis buzones. Esto también sería útil en empresas, puesto que ahora se tiene una copia de seguridad de todo el correo entrante según cada usuario, y se les puede permitir ( o no) acceder al fichero que contiene el correo en la copia de seguridad.
Una advertencia, cuando se esté usando una regla general para un dominio ( p. ej. @seifried.org) hay que crear un alias para CADA cuenta, y para las listas de correo. Si no, cuando se examina la lista y no se encuentra una entrada específica (para, digamos, lista-correo@seifried.org) lo enviará al buzón especificado por la regla general. Ya sólo por este motivo no se debería utilizar una regla general.
El segundo método es muy simple, sencillamente se arranca el sendmail con la opción –x y se especifica un fichero para hacer un log de todas las transacciones. Este fichero crecerá con enorme rapidez, NO recomendaría utilizar este método para hacer log del correo, al menos que sea absolutamente necesario.
Qmail
Qmail (al igual que Postfix) fue creado como una respuesta directa a los fallos percibidos en Sendmail. Qmail es GPL con una cláusula sin distribución binaria que obliga a instalarlo desde el código fuente. Muy poco del código del Qmail se ejecuta como root, y es muy modular comparado con el sendmail (el cual es un trozo de código monolítico). Se puede descargar de: http://www.qmail.org/
Postfix
El Postfix es un agente de transferencia de correo (MTA) orientado a la seguridad, velocidad, y facilidad de configuración, cosas en las que Sendmail suele fallar por lo general. Recomendaría encarecidamente reemplazar el Sendmail por el Postfix. La única parte de Postfix que se ejecuta como root es un programa de control maestro, llamado "master", que llama a otros programas para procesar el correo a la cola ("pickup"), un programa para gestionar la cola, espera conexiones entrantes, repartos de correo retrasados, etc. ("qmgr"), un programa que en realidad envía y recibe el correo ("smtpd") etc. Cada parte de Postfix está muy bien pensada, y generalmente hace una o dos tareas, muy bien. Por ejemplo, en lugar del modelo de sendmail, donde el correo simplemente se volcaba a /var/spool/mqueue, en Postfix existe un directorio accesible por el mundo llamado "maildrop" el cual se comprueba mediante "pickup", el cual alimenta los datos a "cleanup", el cual mueve el correo (si está correctamente formateado, etc.) a un directorio seguro de cola para el procesado real.
Los ficheros primarios de configuración están en /etc/postfix, y existen varios ficheros primarios de configuración que es necesario tener:
master.cf
Controla el comportamiento de varios programas de "ayuda", están hechos chroot, el máximo número de procesos que pueden ejecutar, etcétera. Probablemente sea mejor dejar las configuraciones por defecto en la mayoría de los servidores de correo, a menos que se necesite ajustar algo por altas cargas o asegurar el servidor (p. ej. haciéndolo chroot).
main.cf
Este fichero está muy próximo al sendmail.cf (en cuanto a propósito, en cuanto al diseño es bastante diferente). Está bien comentado y configura todas las variables principales, y las situaciones y formato de diferentes ficheros que contienen información tal como los mapeos a usuarios virtuales e información relativa.
He aquí una lista de variables y localización de ficheros que se suele tener que configurar, el fichero /etc/postfix/main.cf por lo general suele estar comentado densamente. Ten en cuenta que los siguientes ejemplos de entradas main.cf no son un main.cf completo.
# ¿cuál es el nombre de la máquina?
myhostname = correo.ejemplo.org
# ¿cuál es el nombre de dominio?
mydomain = ejemplo.org
# ¿cómo etiqueto el "from" del correo?
myorigin = $mydomain
# ¿en qué interfaces lo ejecuto? Por lo general, en todas.
inet_interfaces = all
# un fichero que contiene una lista de nombres de hosts y nombres de
# dominio cualificados desde los cuales recibo correo,
# generalmenteestán listados así:
# mydestination = localhost, $myhostname, etc
# pero prefiero mantener el listado en un fichero.
mydestination = /etc/postfix/mydestination
# mapa de nombres de usuarios entrantes. "man 5 virtual"
virtual_maps = hash:/etc/postfix/virtual
# mapeo de alias (como /etc/aliases en sendmail), "man 5 aliases"
alias_maps = hash:/etc/postfix/aliases
# base de datos de alias, se pueden tener diferentes configuraciones.
# "man 5 aliases"
alias_database = hash:/etc/postfix/aliases
# dónde repartir el correo, formato Mailbox o Maildir
# (el tradicional /var/spool/mail).
home_mailbox = Maildir/
# dónde guardar el correo, generalmente en /var/spool/mail/ pero se
# puede cambiar con facilidad
mail_spool_directory = /var/spool/mail
# ¿qué comando utilizamos para repartir el correo? /usr/bin/procmail
# es el comando por defecto, pero yo utilizo scanmail que es el sello
# del software antivirus AMaViS
mailbox_command = /usr/sbin/scanmails
# para quién retransmito el correo, de nuevo se pueden listarlos o
# guardarlos en un fichero (uno por línea).
relay_domains = /etc/postfix/relaydomains
# lista de redes locales (por defecto se retransmite el correo de
# estos hosts).
mynetworks = 10.0.0.0/24, 127.0.0.0/8
# ¿qué se le muestra a la gente que conecte al puerto 25? Por defecto
# muestra el número de versión, lo cual yo no hago.
smtpd_banner = $myhostname ESMTP $mail_name
En términos generales, cualquier fichero que simplemente liste un elemento por línea (como /etc/postfix/mydestination o /etc/postfix/relaydomains) se suelen almacenar como simple texto llano. Los ficheros que contienen mapeados (p. ej. alias, donde se tienen entradas como "root: cualquierusuario") deberían transformarse en ficheros hash de base de datos por velocidad (se puede especificar el tipo de fichero como hash, dbm, etc.).
Al igual que la mayoría de productos de IBM, Postfix tiene una licencia bastante curiosa, pero parece que la mayoría es código abierto y libre. Postfix se encuentra disponible en: http://www.postfix.org/. Se pueden conseguir los rpm’s de postfix en: ftp://contrib.Redhat.com/, y aparentemente SuSE ahora viene con Postfix.
Sendmail Pro
Sendmail Pro es una versión comercial de Sendmail con soporte, y se encuentra disponible en: http://www.sendmail.com/. No me ha sido posible conseguir una demo o encontrar a alguien que lo utilice, de modo que no estoy seguro al 100% de lo cercano que se encuentra al Sendmail "original", aunque la compañía me ha dicho que utiliza el mismo código de base.
Zmailer
Zmailer es un gestor de correo GPL disponible en: http://www.zmailer.org/. Tiene ganchos criptográficos y por lo general parece bien construido.
DMail
DMail es un servidor de correo comercial, y no es código abierto. Se puede descargar una versión de prueba de: http://netwinsite.com/dmail_first.htm
nullmailer
El nullmailer envía correo a hosts inteligentes (relays) de forma que la máquina local no tenga que ejecutar ningún software de servidor. Está en: http://em.ca/~bruceg/nullmailer/.
MasqMail
El MasqMail manda el correo a una cola mientras está offline y después lo envía cuando conectas a tu ISP. Se puede configurar para múltiples ISP’s, con dirección de respuesta, etc. Se puede descargar en: http://merlin.uni-sw.gwdg.de/~okurth/masqmail/
Dynamic Relay Authorization Control
El Dynamic Relay Authorization Control (DRAC) se une a tu servidor POP/IMAP para garantizar temporalmente acceso de reenvío SMTP a los hosts que se han autentificado con éxito y recogen correo (asumiendo que estos hosts enviarán correo, y no van a abusar de este privilegio. Se puede conseguir en: http://mail.cc.umanitoba.ca/drac/index.html.
Copyright © 1999, Kurt Seifried, José Antonio Revilla
Todos los derechos reservados.