11.3. Agentes de transporte de correo

Red Hat Linux incluye dos tipos primarios de MTAs, Sendmail y Postfix. Sendmail es configurado como el MTA por defecto, aún cuando es fácil cambiar el MTA predeterminado a Postfix.

SugerenciaSugerencia
 

Para información sobre cómo cambiar el MTA predeterminado de Sendmail a Postfix, consulte el capítulo llamado Configuración del agente de transporte de correos (MTA) en el Manual de personalización de Red Hat Linux.

Red Hat Linux también incluye un MTA de propósitos especiales llamado Fetchmail, el cual es usado para entregar correo desde un MTA remoto a uno local.

Esta sección detalla Sendmail y Fetchmail.

11.3.1. Sendmail

El propósito principal de Sendmail, como cualquier otro MTA, es el de transferir correo de forma segura entre hosts, usualmente usando el protocolo SMTP. Sin embargo, Sendmail es altamente configurable, permitiendo el control sobre casi cada aspecto del manejo de correos, incluyendo el protocolo utilizado. Muchos administradores de sistemas seleccionan Sendmail como su MTA debido a su poder y escalabilidad.

11.3.1.1. Propósitos y limitaciones

Es importante estar conscientes de qué es Sendmail y de lo que puede hacer al contrario de lo que no es. En estos tiempos de aplicaciones monolíticas que cubren varios papeles, Sendmail puede parecer la única aplicación necesitada para ejecutar un servidor de correo en una organización. Esto técnicamente es verdad, puesto que Sendmail puede colocar correo en los directorios de cada usuario y entregar el correo saliente para los usuarios. Sin embargo, la mayoría de los usuarios requieren normalmente mucho más que la entrega de correos. Ellos usualmente quieren interactuar con su correo usando un MUA, que utiliza POP o IMAP, para descargar sus mensajes a sus máquinas locales. O prefieren una interfaz tipo web para ganar acceso a sus buzones. Estas otras aplicaciones pueden funcionar en conjunto con Sendmail, pero ellas existen en realidad por otras razones y pueden operar separadamente una de la otra.

Está más allá del ámbito de esta sección explicar todo lo que Sendmail debería o podría hacer. Literalmente con cientos de opciones y reglas que configurar, hay disponibles libros dedicados completamente a explicar todo lo que se puede hacer y como solucionar problemas cuando las cosas salen mal. Consulte Sección 11.6 para una lista de los recursos de Sendmail.

Esta sección revisa los archivos instalados con Sendmail por defecto y revisa los cambios básicos a la configuración, incluyendo cómo detener correo no deseado (spam) y también cómo extender Sendmail con el Lightweight Directory Access Protocol (LDAP).

11.3.1.2. La instalación de Sendmail por defecto

El ejecutable de Sendmail es /usr/sbin/sendmail.

El archivo de configuración largo y detallado de Sendmail es /etc/mail/sendmail.cf. Evite modificar este archivo sendmail.cf directamente. En vez de esto, para hacer cambios en la configuración, edite el archivo /etc/mail/sendmail.mc, cree una copia de respaldo del original /etc/mail/sendmail.cf, y luego use el procesador de macros incluído m4 para crear un nueva /etc/mail/sendmail.cf. Más información sobre la confifuración de Sendmail se puede encontrar en Sección 11.3.1.3.

Varios archivos de configuración de Sendmail son instalados en el directorio /etc/mail/ incluyendo:

  • access — Especifica los sistemas que pueden utilizar Sendmail para enviar correo saliente.

  • domaintable — Le permite crear asignaciones de nombres de dominio.

  • local-host-names — Especifica aliases para el host.

  • mailertable — Especifica instrucciones para ignorar la ruta de determinados dominios.

  • virtusertable — Le permite especificar una forma de alias para dominios específicos, permitiendo a múltiples dominios virtuales ser hospedados en una misma máquina.

Muchos de los archivos de configuración en /etc/mail/, tales como access, domaintable, mailertable y virtusertable, deben en realidad almacenar su información en archivos de bases de datos antes de que Sendmail puede usar algún cambio de configuración. Para incluir cambios hechos a estas configuraciones en sus archivos de bases de datos, ejecute el comando:

makemap hash /etc/mail/<name> < /etc/mail/<name>

Donde <name> es reemplazado con el nombre del archivo de configuración a convertir.

Por ejemplo, para tener todos los correos direccionados al dominio example.com entregados a , añada la línea siguiente al archivo virtusertable:

@example.com     bob@other-example.com

Para finalizar el cambio, el archivo virtusertable.db debe ser actualizado usando el comando siguiente como root:

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

Esto crea un nuevo archivo virtusertable.db conteniendo la nueva configuración.

11.3.1.3. Cambios comunes de configuración de Sendmail

Cuando se esté alterando el archivo de configuración de Sendmail, es mejor generar un archivo completamete nuevo /etc/mail/sendmail.cf en vez de modificar el existente.

AtenciónAtención
 

Antes de cambiar el archivo sendmail.cf, es una muy buena idea hacer una copia de respaldo del archivo en funcionamiento.

Para añadir funcionalidad a Sendmail, modifique el archivo /etc/mail/sendmail.mc. Cuando termine, utilice el procesador de macros m4 para generar un nuevo sendmail.cf ejecutando el comando m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf. Después de crear un nuevo archivo /etc/mail/sendmail.cf, reinicie Sendmail para que tomen efecto los cambios. La forma más fácil de hacer esto es escribiendo el comando /sbin/service sendmail restart como root.

Por defecto, el procesador de macros m4 es instalado con Sendmail pero es parte del paquete m4.

ImportanteImportante
 

El archivo por defecto sendmail.cf no permite que Sendmail acepte conexiones de red desde ningún host mas que la máquina local. Para configurar Sendmail como un servidor para otros clientes, modifique /etc/mail/sendmail.mc y cambie DAEMON_OPTIONS para que también escuche en dispositivos de red o coloque en comentarios toda esta opción. Luego, vuelva a generar /etc/mail/sendmail.cf ejecutando:

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

Esta configuración debería de funcionar para la mayoría de los sitios sólo SMTP. No funcionará para sitios UUCP (copia UNIX a UNIX); debe generar un nuevo sendmail.cf si se está usando transferencias de correo UUCP.

Consulte el archivo /usr/share/sendmail-cf/README antes de modificar cualquier archivo en los directorios bajo el directorio /usr/share/sendmail-cf, pues ellos pueden afectar la futura configuración de los archivos /etc/mail/sendmail.cf.

11.3.1.4. Creación de máscaras

Una configuración común de Sendmail es tener una sola máquina actuando como el gateway de correo para todas las máquinas en la red. Por ejemplo, una compañía puede querer tener una máquina llamada mail.bigcorp.com que maneja todo su correo y asigna una dirección de retorno consistente para todo el correo saliente.

En esta situación, el servidor Sendmail debe enmascarar los nombres de las máquinas en la red de la compañía para que la dirección de retorno sea user@bigcorp.com en vez de user@devel.bigcorp.com.

Para hacer esto, añada las líneas siguientes /etc/mail/sendmail.mc:

FEATURE(always_add_domain)dnl
FEATURE(`masquerade_entire_domain')
FEATURE(`masquerade_envelope')
FEATURE(`allmasquerade')
MASQUERADE_AS(`bigcorp.com.')
MASQUERADE_DOMAIN(`bigcorp.com.')
MASQUERADE_AS(bigcorp.com)

Después de generar un nuevo sendmail.cf usando m4, esta configuración hará que todo el correo dentro de la red aparezca como que si hubiese sido enviado desde bigcorp.com.

11.3.1.5. Detener el correo basura

El correo basura se puede definir como correo no deseado e innecesario recibido por un usuario que nunca solicitó tal comunicación. Es un abuso costoso y molesto de las comunicaciones de Internet estándar.

Sendmail hace relativamente fácil bloquear nuevas técnicas de difusión de correo basura. Hasta bloquea por defecto muchos de los métodos comunes de difusión de correo basura.

Por ejemplo, el reenvío de mensajes SMTP, también conocido como relaying, ha sido desactivado por defecto desde Sendmail versión 8.9. Antes de que se produjese este cambio, Sendmail indicaba al host (x.org) que aceptara mensajes desde un partido (y.com) y que los enviara a un partido diferente (z.net). Ahora, sin embargo, Sendmail debe ser configurado para permitir a cualquier dominio que transmita correo a través del servidor. Para configurar dominios de transmisión, modifique el archivo /etc/mail/relay-domains y reinicie Sendmail.

Sin embargo, en muchas ocasiones, los usuarios reciben bombardeos de correo basura de otros servidores a través de Internet. En estos casos, puede utilizar las funciones de control de acceso de Sendmail que están disponibles en el archivo /etc/mail/access para prevenir conexiones desde host indeseados. El ejemplo siguiente ilustra como este archivo puede ser usado para bloquear y también para permitir el acceso al servidor Sendmail:

badspammer.com       ERROR:550 "Go away and do not spam us anymore"
tux.badspammer.com   OK
10.0                 RELAY

Este ejemplo indica que cualquier correo enviado desde badspammer.com es bloqueado con un código de error 550 RFC-821, con un mensaje para el emisor. Los correos enviados desde el sub-dominio tux.badspammer.com, seran aceptados. La última línea muestra que cualquier correo enviado desde la red 10.0.*.* se puede transmitir a través del servidor de correo.

Debido a que /etc/mail/access.db es una base de datos, use makemap para activar los cambios. Haga esto usando el comando siguiente como root:

makemap hash /etc/mail/access < /etc/mail/access

Como puede imaginarse, este ejemplo sólo analiza una mínima parte de lo que Sendmail puede realizar en cuanto a permitir o bloquear el acceso. Consulte /usr/share/doc/sendmail/README.cf para más información y ejemplos.

Puesto que Sendmail llama a Procmail MDA cuando está entregando correo, también es posible usar un programa de filtrado de correo basura, tal como SpamAssassin para identificar y archivar correo basura por los usuarios. Consulte Sección 11.4.2.6 para más detalles sobre SpamAssassin.

11.3.1.6. Uso de Sendmail con LDAP

Usando el Lightweight Directory Access Protocol (LDAP) es una forma rápida y poderosa de encontrar información específica sobre un usuario particular desde un grupo mucho más grande. Por ejemplo, un servidor LDAP puede ser usado para buscar una dirección de correo particular desde un directorio corporativo usando el apellido del usuario. En este tipo de implementación, LDAP esta bastante separado de Sendmail, con LDAP la información de usuario de forma jerárquica y Sendmail sólo recibiendo el resultado de las consultas de LDAP en mensajes de correo pre-direccionados.

Sin embargo, Sendmail admite mucha más integración con LDAP y utiliza este protocolo para sustituir archivos mantenidos independientemente, como aliases y virtusertables, que se ubican en servidores de correo diferentes que funcionan juntos para soportar una organización de nivel medio a corporativo. A modo de resumen, puede usar LDAP para separar el nivel de enrutamiento desde Sendmail y sus archivos de configuración separados a un cluster LDAP poderoso que pueden utilizar distintas aplicaciones.

La versión actual de Sendmail es compatible con LDAP. Para ampliar el servidor de Sendmail y usar LDAP, primero debe obtener un servidor LDAP, como OpenLDAP, ejecutarlo y configurarlo correctamente. A continuación, modifique /etc/mail/sendmail.mc para incluir lo siguiente:

LDAPROUTE_DOMAIN('yourdomain.com')dnl
FEATURE('ldap_routing')dnl

NotaNota
 

Esta es sólo una configuración muy básica de Sendmail con LDAP. Su configuración puede ser muy diferente de la indicada según la implementación específica de LDAP, especialmente si desea configurar varias máquinas de Sendmail para que utilicen un servidor LDAP común.

Consulte /usr/share/doc/sendmail/README.cf para obtener instrucciones y ejemplos de configuración de enrutamiento de LDAP.

Luego, vuelva a crear el archivo /etc/mail/sendmail.cf ejecutando m4 y reiniciando Sendmail. Vea Sección 11.3.1.3 para detalles sobre cómo hacer esto.

Para más información sobe LDAP, vea Capítulo 13.

11.3.2. Fetchmail

Fetchmail es un MTA el cual recupera el correo desde servidores remotos y los entrega al MTA local. Muchos usuarios aprecian la capacidad de separar el proceso de descarga de mensajes ubicados en un servidor remoto del proceso de lectura y organización de correo en un MUA. Se ha diseñado teniendo presente las necesidades de los usuarios de acceso telefónico a redes. Fetchmail se conecta y descarga rápidamente todos los mensajes al archivo spool de correo mediante el uso de diversos protocolos, entre los que se incluyen POP3 e IMAP. Incluso permite reenviar los mensajes de correo a un servidor SMTP si es necesario.

Fetchmail es configurado para cada usuario a través del uso de un archivo .fetchmailrc en el directorio principal del usuario.

Mediante el uso de preferencias en el archivo .fetchmailrc, Fetchmail comprobará si hay correo en un servidor remoto e intentará entregarlo al puerto 25 de la máquina local utilizando el agente MTA local para dirigir el correo al archivo de spool del usuario correcto. Si también está disponible Procmail, podrá utilizarlo para filtrar el correo y colocarlo en un buzón para que lo pueda leer un MUA.

11.3.2.1. Opciones de configuración de Fetchmail

Aunque se pueden insertar todas las opciones en la línea de comandos pertinente para comprobar si hay correo en un servidor remoto al ejecutar Fetchmail, el uso de .fetchmailrc proporciona un método más sencillo. Todas las opciones de configuración se guardan en el archivo .fetchmailrc, y es posible ignorarlas al momento en que Fetchmail es ejecutado especificando esa opción en la línea de comandos.

Un archivo de usuario .fetchmailrc se divide en tres tipos concretos de opciones de configuración:

  • opciones globales — Indican a Fetchmail las instrucciones que controlan el funcionamiento del programa o proporcionan las configuraciones para cada conexión que verifica por correo.

  • opciones de servidor — Especifican información necesaria sobre el servidor, como nombre de host, así como las preferencias que desearía ver aplicadas con un servidor de correo particular, tal como el puerto a verificar o el número de segundos a esperar antes de un timeout. Estas opciones afectan a cada opción de usuario usado con ese servidor.

  • opciones de usuario — Contienen información, tal como nombre de usuario y contraseña, que es necesaria para autenticar y comprobar si hay correo utilizando un servidor de correo concreto.

Las opciones globales se encuentran en la parte superior del archivo .fetchmailrc, seguidas de una o varias opciones de servidor con las que se designa cada uno de los servidores de correo diferentes que debería comprobar Fetchmail. Por último, se encuentran las opciones de usuario específicas de cada cuenta de usuario que desea comprobar en el servidor de correo. Al igual que las opciones de servidor, se pueden especificar varias opciones de usuario para utilizarlas con un servidor determinado así como también comprobar varias cuentas de correo electrónico en el mismo servidor.

Las opciones de servidor se llaman para ejecución en el archivo .fetchmailrc mediante el uso de una opción especial, poll o skip, que precede cualquier información de servidor. La acción poll indica a Fetchmail que use esta opción de servidor cuando se ejecute, lo que en realidad verifica por correo usando las opciones de usuario. Cualquier opción de servidor luego de una acción skip, sin embargo, no se verificará a menos que este nombre de host sea especificado cuando Fetchmail es llamado. La opción skip configura pruebas en .fetchmailrc y sólo chequea ese servidor cuando se desee específicamente, sin afectar ninguna configuracion en funcionamiento actualmente.

Un archivo .fetchmailrc de ejemplo se vería así:

set postmaster "user1"
set bouncemail

poll pop.domain.com proto pop3
     user 'user1' there with password 'secret' is user1 here

poll mail.domain2.com
     user 'user5' there with password 'secret2' is user1 here
     user 'user7' there with password 'secret3' is user1 here

En este ejemplo, las opciones globales son las que establecen que se le envíe correo al usuario como última instancia (opción postmaster) y que todos los errores de correo se manden al postmaster en lugar de a la persona que ha enviado el correo (bouncemail). La acción set indica a Fetchmail que esta línea contiene una opción global. A continuación, se especifican dos servidores de correo: uno para que compruebe si hay correo con el protocolo POP3 y otro para que pruebe a usar varios protocolos para encontrar uno que funcione. Se comprueba el correo de dos usuarios con la segunda opción de servidor, pero todo el correo que se encuentre se envía al spool de correo del user1. Esto permite comprobar varios buzones en diversos servidores como si se tratara de un único buzón MUA. La información específica de cada usuario comienza con la acción user.

NotaNota
 

No es necesario que los usuarios coloquen sus contraseñas en el archivo .fetchmailrc. Al omitir la sección with password '<password>' causa que Fetchmail solicite por una contraseña cuando es lanzado.

Fetchmail contiene muchas opciones diferentes globales, de servidor y locales. Muchas de estas opciones casi nunca se usan o sólo se aplican en situaciones muy específicas. La página del manual de fetchmail explica cada opción en detalle, pero las usadas más a menudo se listan aquí.

11.3.2.2. Opciones globales

Cada opción global debería ser colocada en una línea individual después de set.

  • demonio <seconds> — Indica a Fetchmail de usar automáticamente el modo de demonio, con el que estará en segundo plano y comprobar si hay correo en los intervalos especificados.

  • postmaster — Indica a Fetchmail un usuario local para enviar el correo en caso de problemas de entrega.

  • syslog — Indica a Fetchmail el registro de mensajes de error y de estado. Por defecto, es /var/log/maillog.

11.3.2.3. Opciones de servidor

Las opciones de servidor deben ser colocadas en su propia línea en .fetchmailrc después de una acción poll o skip.

  • auth <auth-type> — Especifica el tipo de autenticación que se utilizará. Por defecto, se utiliza la autenticación por password pero algunos protocolos admiten también otros tipos, entre los que se incluyen kerberos_v5, kerberos_v4y ssh. Si se usa el tipo de autenticación any, Fetchmail primero usará métodos que no necesiten contraseña y luego otros que creen máscara para la contraseña. Finalmente, intentará enviar la contraseña sin encriptar para ser autenticada al servidor.

  • interval <number> — Registra el servidor especificado cada <number> de veces que verifica por correo en todos los servidores configurados. Esta opción es generalmente utilizada por servidores de correo donde el usuario rara vez recibe mensajes.

  • port <port-number> — Ignora el número de puerto por defecto para un protocolo especificado.

  • proto <protocol> — Especifica un protocolo específico, tal como pop3 o imap, para que verifique por mensajes en este servidor.

  • timeout <seconds> — Configura Fetchmail para abandonar después de un determinado intervalo de inactividad del servidor. Si no se define este valor, se asume un valor de 300 segundos.

11.3.2.4. Opciones de usuario

Las opciones de usuario se pueden insertar en las propias líneas debajo de una opción de servidor en la misma línea que la opción de servidor. En cualquier caso, las opciones de usuarios van después de la opción user (definida más abajo).

  • fetchall — Ordena a Fetchmail descargar todos los mensajes en cola, incluidos los mensajes que ya se han visto. Por defecto, Fetchmail sólo lo hace con los nuevos.

  • fetchlimit <number> — Sólo permite descargar un determinado número de mensajes antes de detenerse.

  • flush — Indica a Fetchmail de eliminar todos los mensajes en cola que ya se han visto antes de descargar mensajes nuevos.

  • limit <max-number-bytes> — Permite especificar que sólo se recuperen los mensajes de una tamaño inferior al indicado. Esta opción es útil con enlaces lentos, cuando un mensaje largo toma mucho tiempo en descargarse.

  • password '<password>' — Especifica la contraseña que utilizará este usuario.

  • preconnect "<command>" — Indica a Fetchmail de ejecutar el comando especificado antes de recuperar los mensajes de este usuario.

  • postconnect "<command>" — Indica a Fetchmail de ejecutar el comando especificado después de recuperar los mensajes de este usuario.

  • ssl — Activa la encriptación SSL.

  • user "<username>" — Establece el nombre de usuario que Fetchmail usa para recuperar los mensajes. Esta opción debería listarse antes de cualquier otra opción de usuario.

11.3.2.5. Opciones de comando de Fetchmail

La mayoría de las opciones de Fetchmail se pueden utilizar en la línea de comando al ejecutar el comando fetchmail, reflejando las opciones de configuración de .fetchmailrc. Esto se realiza para que se use Fetchmail con o sin un archivo de configuración. La mayoría de los usuarios no usan estas opciones en la línea de comandos porque les resulta más sencillo dejarlas en el archivo .fetchmailrc para que se utilicen cada vez que se ejecuta Fetchmail.

Sin embargo, en ocasiones puede estar interesado en ejecutar el comando fetchmail con otras opciones para un fin concreto. Es posible emitir opciones de comando para que temporalmente se ignore una configuración .fetchmailrc que está causando un error, puesto que cualquier opción especificada en la línea de comandos sobreescribe las opciones del archivo de configuración.

11.3.2.6. Opciones de depuración o información

Algunas opciones usadas luego del comando fetchmail pueden suministrar información importante.

  • --configdump — Muestra cada opción posible en función de la información de .fetchmailrc y los valores por defecto de Fetchmail. No se recupera correo de ningún usuario al usar esta opción.

  • -s — Ejecuta Fetchmail en modo silencioso, con lo cual se evita que aparezcan mensajes y errores después del comando fetchmail.

  • -v — Ejecuta Fetchmail en modo detallado y muestra todas las comunicaciones entre Fetchmail y los servidores de correo remotos.

  • -V — Hace que Fetchmail muestre información de versión detallada, una lista de las opciones globales y los parámetros que se utilizarán con cada usuario, incluido el protocolo de correo y el método de autenticación. No se recupera correo de ningún usuario al usar esta opción.

11.3.2.7. Opciones especiales

Estas opciones son en ocasiones útiles para sobrescribir los valores por defecto que a menudo contiene el archivo .fetchmailrc.

  • -a — Indica a Fetchmail que descargue todos los mensajes del servidor de correo remoto, ya se hayan o no visto antes. Por defecto, Fetchmail sólo descarga los mensajes nuevos.

  • -k — Hace que Fetchmail deje una copia de los mensajes en el servidor de correo remoto después de descargarlos. Esta opción sobrescribe el comportamiento por defecto de eliminar los mensajes después de descargarlos.

  • -l <max-number-bytes> — Indica a Fetchmail que no descargue mensajes con un tamaño superior al indicado y dejarlos en el servidor de correo remoto.

  • --quit — Sale del proceso de demonio de Fetchmail.

Se pueden encontrar más comandos y opciones de .fetchmailrc en la página del manual de fetchmail.