Sendmail en FreeBSD

Autor: Julio Merino (aka Slink)
Fecha: 9 de febrero de 2002


Sendmail es el programa de transporte de correo (MTA) más usual en todos los sistemas *BSD y muchas distribuciones Linux. Es por ello que voy a explicaros aquí como configurarlo correctamente en FreeBSD, un proceso bastante sencillo debido a las facilidades que nos proporciona este sistema operativo.

Estructura de la configuración

Los archivos de configuración de Sendmail que nosotros modificaremos se situan en el directorio /etc/mail. Estos archivos se complementan de muchos otros incluidos dentro de /usr/share/sendmail/cf, pero que no deberemos modificar nunca.


Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

Sendmail se configura a partir de unos archivos con una sintáxis algo compleja: los que tienen extensión .cf en esos directorios. Con las últimas versiones de este MTA, el proceso se simplifica en gran medida ya que nosotros no deberemos tocar estos archivos. En su lugar, editaremos los ficheros con extensión .mc que, una vez procesados, nos darán los anteriores.

De hecho, los archivos .mc se forman a partir de macros que se expanden en sus correspondientes archivos .cf, dando lugar a un archivo de configuración realmente completo. El archivo que realmente leerá Sendmail es el /etc/mail/sendmail.cf. Los otros archivos con extensiones parecidas en el directorio de configuración no serán usados directamente.

Creación de nuestro .mc

Para crear nuestro archivo de configuración nos basaremos en el que incluye FreeBSD por defecto. Lo más recomendable es que llamemos a nuestro archivo con el nombre de nuestra máquina, por si quisieramos mantener varios diferentes. Procederemos a hacer lo siguiente:

# cd /etc/mail
# cp freebsd.mc klamath.mc

El siguiente paso es indicarle a FreeBSD cuál es nuestro archivo de configuración para que pueda automatizar algunos pasos más adelante. Para ello, editaremos nuestro /etc/make.conf y añadiremos lo siguiente:

SENDMAIL_MC=/etc/mail/klamath.mc

Manejo del archivo .mc

Antes de proceder a la configuración en sí es necesario comentar cómo convertiremos nuestro archivo .mc en su correspondiente .cf y cómo indicaremos a Sendmail que lo use. El primer paso obvio es realizar la conversión por lo que haremos:

/etc/mail# make

Con esto, FreeBSD nos dejará un archivo klamath.cf listo para usar. Ahora es necesario hacer que Sendmail lo use, copiándolo sobre sendmail.cf. El proceso podemos automatizarlo así:

/etc/mail# make install

Por último, hay que reiniciar el MTA. Nada más fácil que hacer:

/etc/mail# make restart

Retoques básicos

No pretendo detallar en este artículo todas las posibles opciones de Sendmail, aunque si voy a daros un par de consejos útiles. Para más información, leeros el /usr/share/sendmail/cf/README.

Smarthost

Muchos de nosotros disponemos de un servidor de correo de salida por parte de nuestro ISP. Si queremos usarlo, en lugar de distribuir nosotros mismos el correo, bastará con añadir lo siguiente a nuestro archivo de configuración (klamath.mc), substituyendo el nombre del servidor:

define(`SMART_HOST', `smtp.menta.net')

Procmail

Si tenemos el programa procmail instalado, podemos indicarle a Sendmail que lo use por defecto para distribuir el correo local. Para ello, usaremos lo siguiente en nuestra configuración:

FEATURE(local_procmail)

Genericstable

La última función que quería comentaros es el genericstable. Ésta nos ayudará a reescribir el campo From: de los correos salientes para que sea válido. Lo más habitual es que cuando enviemos correo local dicho campo permaneza intacto, con el nombre de servidor de nuestra máquina; esto facilita la respuesta de correos locales.

Por otro lado, también querremos que cuando enviemos correo saliente a una dirección de internet fuera de nuestra máquina, el campo From: se vea afectado y reescrito adecuadamente para que la gente pueda respondernos a nuestra dirección de correo de internet (normalmente la de nuestro ISP).

Para conseguir esto, añadiremos lo siguiente al archivo de configuración:

FEATURE(masquerade_envelope)
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')

Y crearemos los dos archivos aquí referidos. Empezaremos por el /etc/mail/genericsdomain, por ser el más simple. Este archivo indica qué dominio es considerado local y ayudará al MTA a distinguir entre correos locales y externos. Haremos lo siguiente:

/etc/mail# hostname > genericsdomain

Una vez hecho esto, tendremos que crear la tabla de conversiones de direcciones. Editaremos el /etc/mail/genericstable, y añadiremos las direcciones de correo del siguiente modo:

# usuario local    dirección de internet
juli               juli

Podemos añadir tantas direcciones como queramos y el comentario podéis quitarlo si no os gusta. Es importante destacar que debemos convertir este archivo en una base de datos binaria cada vez que lo modifiquemos. Para ello haremos:

/etc/mail# makemap hash genericstable.db < genericstable

Una vez reiniciado Sendmail todo deberá funcionar correctamente y podremos enviar correo ¡hasta con el comando mail!.

Configuración de ejemplo

He decidido incluir aquí el archivo de configuración completo que uso yo en mi máquina para que os hagáis una idea de cómo funciona todo. Cabe destacar que el orden de los diferentes comandos es, en muchos casos, importante.

dnl
dnl Archivo de configuración para Sendmail
dnl

divert(0)
OSTYPE(bsd4.4)
DOMAIN(generic)

FEATURE(access_db, `hash -o /etc/mail/access')
FEATURE(local_lmtp)
define(`PROCMAIL_MAILER_PATH', `/usr/local/bin/procmail')
FEATURE(local_procmail)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(relay_based_on_MX)
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
FEATURE(masquerade_envelope)
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')

define(`SMART_HOST', `smtp.menta.net')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')

MAILER(local)
MAILER(smtp)

Para terminar

Espero que no os haya resultado demasiado complejo. Si todo os funciona correctamete, tendréis uno de los MTAs más potentes y completos bajo vuestro control ;)


Si encontráis alguna incorreción, ya sabéis, ¡comunicarmelo cuanto antes!

eldemonio.org El site BSD en Castellano Articles catalogue

Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

eldemonio.org v 4_2