19.6. Encaminamiento y env�o de mensajes

Exim divide el env�o de correo en tres tareas diferentes: el encaminado, el direccionamiento y el transporte. Hay un n�mero de m�dulos de c�digo para para cada tarea, siendo cada uno configurable por separado. En el fichero de configuraci�n normalmente se instalan un n�mero de diferentes encaminadores, direccionadores y transportes.

Los encaminadores resuelven direcciones remotas, determinando a qu� anfitri�n deber�a enviarse un mensaje y qu� transporte deber�a usarse. En los anfitriones conectados a Internet a menudo hay un solo encaminador, que lleva a cabo la resoluci�n buscando el dominio en el DNS. De forma alternativa, puede haber un encaminador que se encargue de las direcciones destinadas a los anfitriones de una LAN local, y un segundo para enviar cualquier otra direcci�n a un anfitri�n inteligente ; por ejemplo, el servidor de correo de un PSI.

Las direcciones locales se env�an a los direccionadores, de los que suele haber una gran cantidad, que se encargan de la gesti�n de los "alias" y de los reenv�os as� como de la identificaci�n de los buzones locales. Las listas de correo pueden gestionarse mediante direccionadores de "aliasing" o de reenv�o. Si una direcci�n se renombra o se reenv�a, cada direcci�n generada la gestionan los encaminadores o los direccionadores, seg�n sea necesario, de manera independiente. El caso m�s com�n, de lejos, ser� el env�o a un buz�n, pero los mensajes tambi�n pueden enviarse a una orden o adjuntarse a un fichero diferente al buz�n predeterminado.

Un transporte es responsable de implementar un m�todo de env�o; por ejemplo, enviar el mensaje mediante una conexi�n SMTP o a�adirlo a un buz�n espec�fico. Los encaminadores y los direccionadores eligen qu� transporte usar para cada direcci�n receptoras. Si un transporte falla, Exim genera un mensaje de rebote o pospone el env�o para intentar realizarlo m�s tarde.

Con Exim goza de una gran libertad para configurar estas tareas. Hay disponibles controladores para cada una de ellas, entre los que puede escoger aquellos que necesite. S�lo tiene que describ�rselos a Exim en diferentes secciones de su fichero de configuraci�n. Primero se definen los transportes, seguidos de los direccionadores y despu�s los encaminadores. No hay nada integrado de manera predeterminada, aunque Exim se distribuye con un fichero de configuraci�n predeterminada que cubre casos sencillos. Si quiere cambiar la pol�tica de encaminado de Exim o modificar un transporte, lo m�s sencillo ser� partir del fichero de configuraci�n predeterminada para realizar los cambios en vez de intentar crear una configuraci�n completa desde cero.

19.6.1. Mensajes de Encaminamiento

Cuando se da una direcci�n de env�o, Exim comprueba primero si el dominio es uno de los que se maneja en el anfitri�n con una lista en la opci�n de configuraci�n local_domains. Si no se ha configurado esta opci�n, se usa el nombre del anfitri�n local como el �nico dominio local. Si el dominio es local, la direcci�n la manejan los direccionadores. De otro modo, se pasa a los encaminadores para que averig�en a qu� anfitri�n reenviar el mensaje.[1]

19.6.2. Enviar mensajes a direcciones locales

De manera m�s com�n, una direcci�n local es simplemente el nombre de "login" de un usuario, en cuyo caso el mensaje se env�a al buz�n del usuario, /var/spool/mail/nombre-de-usuario. Otros casos incluyen los alias, los nombres de listas de correo y los reenv�os del usuario. En estos casos, la direcci�n local se expande en una nueva lista de direcciones que pueden ser a su vez locales o remotas.

Aparte de estas direcciones “normales”, Exim puede manejar otro tipo de destinos para los mensajes locales, como nombres de ficheros y �rdenes de "pipe". Cuando se env�a a un fichero, Exim adjunta el mensaje creando ese fichero si es necesario. Los destinos de fichero y "pipe" no son direcciones propiamente dichas por lo que no puede enviar correo a, pongamos por caso, /etc/[email protected] y esperar que se sobreescriba el fichero de las contrase�as; los env�os a un fichero espec�fico s�lo son v�lidos si vienen de fichero de reenv�o o de alias. Tenga en cuenta, no obstante, que /etc/[email protected] es una direcci�n de correo sint�cticamente v�lida, pero si Exim la recibe buscar�a (t�picamente) un usuario cuyo "login" fuese /etc/passwd, y al no encontrar ninguno el mensaje rebotar�a.

En una lista de alias o en un fichero de reenv�o, un nombre de fichero es cualquier cosa que comience con una barra (/ )y que no pueda entenderse como una direcci�n de correo plenamente cualificada. Por ejemplo, /tmp/junk en un fichero de reenv�o o de alias es interpreta como un nombre de fichero, pero /tmp/[email protected] es una direcci�n de correo, aunque no parece muy �til. De todas maneras, pueden verse direcciones v�lidas de este tipo cuando se env�a correo por medio de pasarelas X.400 porque las direcciones X.400 comienzan con una barra.

De manera similar, una orden de "pipe" puede ser una orden de Unix precedida por el s�mbolo (|), a menos que esta cadena pueda entenderse como una direcci�n de correo con dominio v�lida. A menos que haya cambiado la configuraci�n, Exim no usa consola alguna para ejecutar la orden; sino que la divide en un nombre de orden y en sus variables y las ejecuta directamente. El mensaje se emplea como entrada est�ndar para esa orden.

Por ejemplo, para conducir una lista de correo a un grupo de noticias local, puede usar un gui�n de shell de nombre gateit, e instalar un alias local que env�e todos los mensajes de esta lista al gui�n usando |gateit. Si la l�nea de �rdenes contiene una coma, ella y el s�mbolo de "pipe" precedente deben entrecomillarse.

19.6.2.1. Usuarios locales

Una direcci�n local denota com�nmente un buz�n de usuario. �ste normalmente se encuentra en /var/spool/mail y tiene el nombre del usuario, quien tambi�n es el propietario del fichero. Si no existe, Exim lo crea.

En algunas configuraciones, el grupo se cambia al grupo del usuario y el modo es 0600. En estos casos, los procesos de env�o se ejecutan como un usuario, y el usuario puede borrar el buz�n completamente. En otras configuraciones, el grupo del buz�n es mail, y tiene el modo 660; los procesos de env�o se ejecutan bajo un uid y un grupo del sistema mail, y los usuarios no pueden borrar sus buzones, aunque s� pueden vaciarlos.

Tenga en cuenta que aunque /var/spool/mail es habitualmente el lugar est�ndar en el que colocar los ficheros de los buzones, algunos programas de correo pueden compilarse para usar rutas diferentes, por ejemplo, /usr/spool/mail. Si el env�o a los usuarios de su anfitri�n falla de manera consistente, deber�a ver si le sirve de algo crear un enlace simb�lico a /var/spool/mail.

Las direcciones MAILER-DAEMON y postmaster deber�an aparecer normalmente en su fichero de alias, expandi�ndose en la direcci�n de correo del administrador del sistema. MAILER-DAEMON lo usa Exim como direcci�n del remitente en los mensajes de rebote. Tambi�n se recomienda que root se instale como un alias para el administrador, especialmente cuando los env�os se ejecutan bajo permisos de los usuarios receptores para evitar que no se ejecute ning�n env�o como root.

19.6.2.2. Reenv�o

Los usuarios pueden redirigir su correo a direcciones alternativas creando un fichero .forward en sus directorios home. �ste contiene una lista de receptores separados por comas y/o nuevas l�neas. Se leen e interpetan todas las l�neas del fichero. Puede usarse cualquier tipo de direcci�n. Un ejemplo pr�ctico de un fichero .forward para las vacaciones podr�a ser:
    janet, "|vacation"
En otras descripciones de ficheros .forward, puede ver el nombre de usuario al comienzo precedido por una barra invertida. Esto era necesarios en algunos MTAs antiguos para detener la b�squeda de .forward para un nombre nuevo, lo que pod�a conducir a un bucle infinito. La barra invertida no es necesaria en Exim, que evita autom�ticamente bucles de este tipo.
[2] De todos modos, se permite una barra invertida y, de hecho, supone una diferencia en configuraciones en las que se manejan muchos dominios de una vez. Sin la barra invertida, un nombre de usuario no cualificado se cualifica con un dominio predeterminado; con una barra invertida se preserva el dominio entrante.

La primera direcci�n del fichero .forward env�a el mensaje entrante al buz�n de janet, mientras que la orden vacation devuelve una breve notificaci�n al remitente. [3]

Adem�s de soportar ficheros de reenv�o “tradicionales”, Exim puede configurarse para que soporte ficheros m�s complejos conocidos como filtros. En vez de ser simplemente una lista con direcciones de reenv�o, un fichero de filtro puede contener pruebas sobre el contenido de los mensajes entrantes de manera que, por ejemplo, pueda hacerse que se reenv�en �nicamente aquellos mensajes cuyo t�tulo contenga la palabra “urgente.” Los administradores de sistemas deben decidir si permitir�n o no esta flexibilidad a los usuarios.

19.6.3. Ficheros de alias

Exim es capaz de gestionar ficheros de alias compatibles con los ficheros de alias del sendmail de Berkeley. Las entradas del fichero de alias pueden tener la siguiente forma:
    alias: receptores

receptores es una lista de direcciones separadas por comas que se sustituir�n por el alias. La lista de receptores puede continuarse en nuevas l�neas si la l�nea siguiente comienza con un espacio en blanco.

Una propiedad especial permite a Exim gestionar listas de correo que se hayan especificado separadamente en el fichero de alias: si especifica :include:nombre de fichero como un receptor, Exim lee el fichero especificado y sustituye su contenido como una lista de receptores. M�s adelante en este cap�tulo en Secci�n 19.6.4se muestra una manera alternativa de gestionar listas de correo.”

El principal fichero de alias es /etc/aliases. Si hace que cualquiera o que cualquier grupo pueda modificar este fichero, Exim rechazar� usarlo y pospondr� los env�os locales. Puede controlar la prueba que realiza con los permisos del fichero poniendo modemask en el direccionador system_aliases.

Esto es un fichero aliases de ejemplo:
    # vbrew.com fichero /etc/aliases 
    hostmaster: janet
    postmaster: janet
    usenet: phil
    # La lista de correo de desarrollo.
    development: joe, sue, mark, biff,
            /var/mail/log/development
    owner-development: joe
    # Los anuncios de inter�s general se env�an a todo
    # el equipo
    announce: :include: /etc/Exim/staff,
            /var/mail/log/announce
    owner-announce: root
    # la lista de correo ppp se traslada a un grupo local de noticias
    ppp-list: "|/usr/local/bin/gateit local.lists.ppp"

Cuando hay nombres de ficheros y �rdenes por "pipe" en un fichero de alias, como aqu�, Exim necesita que le digan bajo qu� usuario ha de ejecutar los env�os. La opci�n user (y posiblemente group, tambi�n debe proporcionarse en el fichero de configuraci�n de Exim, ya sea en el direccionador que maneja los alias o en los transportes a los que dirige estos elementos.

Si ocurre un error al enviarse a una direcci�n generada a partir del fichero aliases, Exim enviar� un mensaje de rebote al remitente del mensaje, como es habitual, pero esto quiz� no resulte apropiado. Puede usar la opci�n errors_to para especificar que los mensajes de rebote se env�en a otro usuario: por ejemplo, al administrador del correo.

19.6.4. Listas de correo

En vez de con el fichero aliases, las listas de correo tambi�n pueden gestionarse mediante un direccionador forwardfile. Las listas se mantienen en un �nico directorio como /etc/exim/lists/, y un fichero lists/nag-bugs describe una lista de correo llamada nag-bugs. Esto deber�a contener las direcciones de los miembros separadas por comas o por nuevas l�neas. Las l�neas que comienzan con una almohadilla (#) se tratan como comentarios. Un sencillo direccionador para usar esos datos ser�a como sigue:
    lists:
      driver = forwardfile
      file = /etc/exim/lists/${local_part}
      no_check_local_user
      errors_to = ${local_part}-request
Cuando se ejecuta este direccionador, los valores de las opciones file y errors_to se expanden. La expansi�n hace que ciertas partes de las cadenas que comienzan con un s�mbolo del d�lar se sustituyan cada vez que se usa la cadena. El tipo de expansi�n m�s sencillo es la inserci�n del valor de una de las variables de Exim, y esto es lo que est� sucediendo aqu�. La subcadena ${local_ part} sustituye el valor de $local_ part, que es la parte local de las direcciones que se est�n procesando.

Para cada lista de correo, deber�a existir un usuario (o un alias o una lista de correo) llamado listname-request; se informa a esta direcci�n de cualquier error al resolver una direcci�n o al enviar un mensaje a un miembro de la lista.

Notas

[1]

Esto es una simplificaci�n. Los direccionadores son capaces de pasar direcciones a los transportes para que las env�en a anfitriones remotos, y de manera similar, los encaminadores son capaces de pasar direcciones a los transportes locales para que escriban el mensaje en un fichero o en un "pipe". Los encaminadores tambi�n pueden pasar direcciones a los direccionadores en algunas circunstancias.

[2]

Un direccionador se salta si la direcci�n que se va a procesar es una que ya haya procesado previamente durante la generaci�n de la direcci�n actual.

[3]

Por favor, si elige usar un programa para sus ausencias, �aseg�rese de que no responde a los mensaje enviados desde listas de correo! Resulta muy molesto descubrir que alguien se ha ido de vacaciones y encontrar un mensaje de ausencia por cada mensaje que hayan recibido. Para los administradores de listas de correo: esto es un buen ejemplo de por qu� es una mala pr�ctica forzar el campo Responder a: de los mensajes de una lista de correo para que contenga la direcci�n de env�o a esa misma lista de correo.