Uso de Sendmail
Sendmail es un Agente de Transporte de Correo (MTA, por sus siglas en inglés). Se encarga de rutear, modificar y entregar mensajes de correo entre sistemas de correo heterogéneos. Con una historia relativamente paralela a la del software de listas de correo, Sendmail tiene una versión "beta permanente" denominada Sendmail X, que tiene la función de actualizar / reemplazar la versión 8.x estable de Sendmail. Sin embargo, de la misma forma en la que Mailman ha reemplazado a Majordomo, varios MTAs han eclipsado parcialmente a Sendmail. Este MTA nuevo usa Postfix principalmente, aunque Qmail y Exim también se usan bastante. Sin embargo, Sendmail sigue siendo, al menos por un margen delgado, el MTA que más se usa en los sistemas Linux. Desde el 16 de septiembre de 2005, la última versión estable de Sendmail es 8.13.5.
Hasta ahora, ya se escribieron varios libros sobre Sendmail. Vea la sección Recursos para acceder a una lista de todos los libros disponibles. El más abarcativo de ellos es Sendmail, Third Edition [Sendmail - Tercera edición] (O'Reilly; 2002) de Bryan Costales y Eric Allman. En sus 1.232 páginas, este libro se ocupa de muchos más temas que los que este tutorial puede llegar a mencionar.
Si bien Sendmail soporta en principio varios protocolos de transporte de correo, como por ejemplo UUCP, el que más se usa es el Protocolo de Transporte de Correo Simple (SMTP, por su sigla en inglés), que aquí incluye el SMTP Extendido (ESMTP) para cuerpos de mensaje codificados MIME mejorados. En realidad, el correo que no se reenvía a otros hosts SMTP se entrega al sistema local mediante la colocación de mensajes en archivos locales. Los Agentes de Usuario de Correo (MUA, por sus siglas en inglés) locales leen los mensajes que Sendmail (u otro MTA) coloca en archivos locales (y, generalmente, también busca correo usando POP3 o IMAP), pero suele solicitarle a Sendmail que se encargue de entregar los mensajes salientes. Algunos MUAs, sin embargo, se comunican directamente con los servidores SMTP, como por ejemplo las instancias de Sendmail locales o remotas, en vez de colocar los mensajes en la cola de Sendmail para su posterior procesamiento. Por lo general, la cola de Sendmail se encuentra en /var/spool/mqueue/.
Lo primero que debe hacer es obtener una copia del software actual de Sendmail
desde sendmail.org (vea la sección Recursos, donde
encontrará el vínculo correspondiente), por ejemplo: sendmail.8.13.5.tar.gz.
Descomprima el archivo como lo suele hacer. A diferencia de lo que ocurre con
muchas aplicaciones que usan el patrón make; make
install, la creación de Sendmail se realiza con sh
Build. Luego de la creación inicial, agregue cd al subdirectorio cf/cf/, copie un archivo *.mc adecuado (como
sendmail.mc), personalice sendmail.mc y ejecute lo siguiente para generar un
archivo sendmail.cf:
$ m4 ../m4/cf.m4 sendmail.mc > sendmail.cf
Es probable que también deba usar el atajo sh Build
sendmail.cf. Probablemente, esto le resulte misterioso. Pero ambos
comandos generan una configuración real de Sendmail desde un formato más legible
usando el procesador de macros M4. Los archivos reales sendmail.cf, aunque son
ASCII editables, son bastante crípticos y sólo se deberían modificar mínimamente
y a mano.
Por último, copie el archivo binario de sendmail desde una ubicación parecida a
obj.Linux.2.6.10-5-386.i686/sendmail/sendmail hasta su ubicación final (realice
una copia de seguridad del archivo antiguo, si es que existe uno), que casi
siempre es /usr/sbin/, y copie su archivo sendmail.cf en /etc/mail/sendmail.cf.
Usted también puede hacer esto último en el subdirectorio cf/cf/ con sh Build install-cf. Probablemente, usted deba
ingresar su o sudo para
obtener permisos de archivo para los directorios relevantes.
Sendmail incluye varias utilidades (makemap, mailstats, etc.). Cada directorio
correspondiente cuenta con un archivo README (LÉEME) y se puede instalar
mediante la ejecución de sh Build install desde el
subdirectorio.
La principal complejidad, y la principal función, de Sendmail se encuentra en su archivo sendmail.cf. Este archivo de configuración incluye algunas configuraciones para el entorno de Sendmail. Pero principalmente, incluye patrones para que las direcciones se reescriban y / o entreguen por medio de ciertos mecanismos.
Dos mecanismos de reescritura que se pueden configurar son genericstable y virtusertable, que le
permiten mapear usuarios locales desde y hasta direcciones externas. Para
cualquiera de estos mapeos, usted primero debe crear un archivo de alias como
texto plano. Por ejemplo:
Listado 2. Mapeos salientes
david david.mertz@gmail.com root root@gnosis.cx dqm@gnosis.lan david.mertz@gmail.com |
O en el caso de correo entrante mapeado hacia cuentas locales:
Listado 3. Mapeos entrantes
david@mail.gnosis.cx david david@smtp.gnosis.cx david david@otherdomain.net david @mail.gnosis.cx %1@external-host.com owner@list.gnosis.cx owner%3 jax@bar.com error:5.7.0:550 Address invalid |
Para compilar estos alias, use makemap utility:
$ makemap dbm /etc/mail/virtuserTabla < inbound
$
makemap hash /etc/mail/genericsTabla < outbound
La activación del uso de estos mapeos se puede configurar usando los macros M4 en sendmail.cf (o en el archivo de configuración que usted use).
Listado 4. Activación de mapeos en sendmail.cf
DOMAIN(gnosis.cx)dnl FEATURE(`virtuserTabla', `dbm /etc/mail/virtuserTabla')dnl FEATURE(`genericsTabla', `hash /etc/mail/genericsTabla')dnl GENERICS_DOMAIN_FILE(`/etc/mail/generics-domains')dnl |
Varias cosas ocurren aquí. Las macros DOMAIN le indican
que un archivo (como, por ejemplo, cf/domain/gnosis.cx.m4) se usa para macros
adicionales. Las macros FEATURE le permiten usar virtusertable y genericstable.
Las macros GENERICS_DOMAIN_FILE definen los dominios
que califican para volver a mapear los nombres en genericstable.
La reescritura cumplirá con todas las reglas indicadas. En modo de prueba (sendmail -bt), usted puede examinar la reescritura que
se lleva a cabo para direcciones específicas. Por ejemplo, al usar genericstable, se enviará un correo al usuario local
"david" de manera externa usando la siguiente dirección de correo electrónico:
david.mertz@gmail.com. Asumiendo que localhost ya está
definido en /etc/mail/generics-domains, el mensaje de correo que se envía a
david@localhost se dirigirá al mismo lugar.
En cambio, el correo entrante para david@mail.gnosis.cx se reescribirá y entregará al usuario local "david". Sendmail puede manipular múltiples dominios al mismo tiempo. Por lo tanto, david@otherdomain.net también se podrá entregar localmente.
El poder total de esto aparece en algunos de los símbolos de comodines. Todo
mensaje de correo enviado a mail.gnosis.cx que no esté específicamente
direccionado hacia un usuario local se reenviará al mismo nombre de usuario en
external-host.com. Pero eso es un patrón simple. Algo más interesante es
que %3 se puede usar para expandir la información
sobre los múltiples nombres adicionales. Por lo tanto, owner-foo@list.gnosis.cx
y owner-bar@list.gnosis.cx se entregarán a los usuarios locales "owner-foo" y
"owner-bar" respectivamente (a menos que se los reescriba todavía más). Estos
usuarios locales pueden llegar a ser sistemas de procesamiento de listas de
correo u otros administradores automatizados de mensajes. Como un caso especial,
usted puede crear un error para una dirección específica en vez de reescribirla
todavía más.
Todo lo que hemos visto hasta ahora sólo son unos pocos aspectos relativos a las reglas de reescritura que usted puede agregar a Sendmail, pero sirven como una buena introducción para que usted sepa de qué estamos hablando. Compre uno de los grandes bloques sobre este tema para obtener más información detallada al respecto.
Sendmail se puede ejecutar en varios modos. El modo más común es como un daemon que permanece en segundo plano y, periódicamente, procesa su cola. Por ejemplo, la ejecución de
$ /usr/sbin/sendmail -bd -q10m
le indica a Sendmail que debe ejecutarse como un daemon y verificar su cola cada diez minutos. Usted también puede ejecutar Sendmail una sola vez para que procese la cola una vez, pero no se puede transforma esto en un daemon:
$ /usr/sbin/sendmail -q
Como lo mencionamos con anterioridad, Sendmail tiene un modo de prueba para examinar las reglas de reescritura de direcciones. Por ejemplo (tomado de la Linux Network Administrators Guide [Guía para administradores de redes Linux]), vea la sección Recursos, donde tendrá acceso al vínculo correspondiente:
Listado 5. Modo de prueba de Sendmail
$ /usr/sbin/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 isaac@vstout.vbrew.com rewrite: ruleset 3 input: isaac @ vstout . vbrew . com rewrite: ruleset 96 input: isaac < @ vstout . vbrew . com > rewrite: ruleset 96 returns: isaac < @ vstout . vbrew . com . > rewrite: ruleset 3 returns: isaac < @ vstout . vbrew . com . > rewrite: ruleset 0 input: isaac < @ vstout . vbrew . com . > rewrite: ruleset 199 input: isaac < @ vstout . vbrew . com . > rewrite: ruleset 199 returns: isaac < @ vstout . vbrew . com . > rewrite: ruleset 98 input: isaac < @ vstout . vbrew . com . > rewrite: ruleset 98 returns: isaac < @ vstout . vbrew . com . > rewrite: ruleset 198 input: isaac < @ vstout . vbrew . com . > rewrite: ruleset 198 returns: $# local $: isaac rewrite: ruleset 0 returns: $# local $: isaac |
