POSTFIX
Fernando Reyero Noya
Universidad de León, España
camarlengo@yahoo.es
Sinopsis
 Postfix es un servidor de correo libre (en el sentido de libertad. Ver Proyecto GNU (http://www.gnu.org/philosophy/free-sw.es.html)), cuyos objetivos son ser rápido, fácil de administrar y seguro. Además pretende ser compatible con Sendmail, posiblemente, aún hoy, el servidor de correo más usado en entornos tipo UNIX. 
 Página oficial de Postfix (http://www.postfix.org) 
Introducción
 Postfix es un servidor de correo. Su diseñor fue orientado hacia la velocidad, la seguridad y la facilidad de administración. Por otro lado, se pretendió que fuera lo suficinetemente compatible con Sendmail, para que la transición entre estas dos aplicaciones fuera lo más suave posible. 
 Sin duda, un sistema de correo es mucho más que un servidor. Durante el proyecto de Sistemas Informáticos, no sólo se ha instalado Postfix, sino que se le ha dotado de acompañantes que facilitan y mejoran su rendimiento. Especial mención merecen Procmail (http://www.procmail.org), un cuasi-mágico procesador de correo, Mailman (http://www.list.org), el gestor de listas de correo y Mutt (http://www.mutt.org), el pequeño gran cliente de correo en modo texto. 
 Desgraciadamente, nuestras pruebas se han visto muy limitadas debido a la política de la Universidad de León. Tan sólo hemos podido efectuar experimentos en redes locales, no pudiendo comprobar el comportamiento de Postfix en situaciones de estrés con una gran cantidad de usuarios y mensajes. 
Instalación
 La instalación de Postfix depende de varios factores. El más determinante resulta el sistema sobre el que instalaremos el servidor. Postfix está disponible para sistemas tipo UNIX, como GNU/Linux, *BSD, HP-UX o Solaris. 
 En la sección de ports (http://www.postfix.org/packages.html) de la página oficial de Postfix podrás encontrar enlaces a los paquetes correspondientes a cada sistema. 
 Al igual que el resto de artículos que documentan este proyecto, el sistema base que empleamos es Debian GNU/Linux (http://www.debian.org). Por tanto, las reseñas ofrecidas a continuación harán referencia a su sistema de paquetes. 
 Como es normal en cualquier sistema Debian, la instalación de aplicaciones es una tarea sencilla y rápida. En este caso concreto, instalamos los siguientes paquetes y sus correspondientes dependencias: 
•	p
ostfix
•	p
ostfix-doc
•	p
rocmail
•	m
ailman
•	m
utt

 Para ello, siendo superusuario, escribe en la consola: 
 potasio:/~# apt-get install postfix postfix-doc procmail mailman mutt 
 Debian se encargará de instalar la aplicación, realizar una configuración básica y situar los cada fichero en el lugar adecuado. Visita /usr/share/doc/postfix-doc/ para obtener más detalles sobre Postfix, su instalación, puesta a punto,... 
Configuración
 En Debian, el fichero de configuración principal de Postfix, se encuentra en /etc/postfix/master.cf. 
 Afinar Postfix, al igual que cualquier otro servicio crítico de un sistema supone el conocimiento y revisión de múltiples parámetros. Asimismo, muchos detalles, caen fuera del dominio del propio servidor, afectando a otros servicios y/o configuraciones. Realizar estas tareas queda fuera de este artículo. 
 Sin embargo, sí describiremos qué aspectos hay que personalizar para poner en marcha nuestro servidor. Son los siguientes: 
•	D
ominio de salida
•	D
ominios de recepción
•	C
lientes redireccionables
•	D
ireccionamiento de problemas y sucesos

Dominio de salida
 El dominio de salida viene asociado a la variable del fichero master.cf myorigin, cuyo valor indica qué dominio aparecerá en la dirección de correo de los mensajes enviados desde la máquina que aloje el servidor. 
 Por defecto, el valor de esta variables es $myhostname. Modifícala por $mydomain, cuyo valor es el dominio padre del nombre de la máquina. 
Dominios de recepción
 El valor de mydestination qué dominios se entregarán de forma local, en vez de ser reenviados a otra máquina. Por defecto, sólo se entregará localmente el correo para la propia máquina 
 Hay tres formas de especificar el valor de esta variable: 
•	D
irectamente, a través del nombre de dominio o una variable que contenga un nombre de dominio
•	U
n nombre de fichero
•	U
na consulta tipo:nombrea una tabla. Detalles (http://www.postfix.org/rewrite.html#virtual).
 
 Posiblemente, si deseas configurar esta máquina como servidor de correo de todo el dominio, debas decantarte por algo así: 
 
mydestination = $myhostname localhost.$mydomain $mydomain
 
Precaución
 Para evitar que se produzcan bucles en la entrega de correo, incluye todos los hostnames de la máquina, como $myhostname y localhost.$mydomain. 

Clientes redireccionables
 Por defecto, Postfix retransmite correo a clientes que se encuentren en redes o dominios autorizados. 
 Las redes autorizadas se definen mediante mynetworks. Por defecto, todos los clientes en las subredes por debajo de la ubicación IP del servidor están autorizados. 
 Los dominios autorizados se definen mediante relay_domains. Por defecto, todos los clientes en subdominios por debajo de los dominios listados en mydestination. 
Direccionamiento de problemas y sucesos
 Es muy conveniente que configures un alias al postmaster (http://tuxedo.org/jargon/html/entry/postmaster.html) para que apunte a una persona física. Este alias es imprescindible para que los usuarios puedan enviar informes de problemas de envío. 
 De todas formas, Postfix envía informes de estado al alias postmaster. Por defecto, sólo envía problemas graves pero puede ser más "verboso"; la variable que configura su comportamiento es notify_classes. 
 Estos son sus parámetros: 
•	bounce
: envía al postmaster el correo que no ha podido ser distribuido. Por cuestiones de privacidad, tan sólo se muestra la cabecera.
•	2bounce
: informa de bounces (http://www.webopedia.com/DidYouKnow/Internet/2002/BouncedEmail.html)duplicados.
•	delay
: informa al postmaster de correo retrasado.
•	policy
: informa al administrador de las peticiones de usuario denegadas debido a las restricciones UCE (http://www.postfix.org/uce.html).
•	protocol
: informa al administrador del los errores de protocolo o la ejecución de comandos ilegales
•	resource
: informa al postmaster del correo que no ha sido entregado debido a problemas de recursos (por ejemplo, errores al escribir en la cola).
•	software
: informa al administrador del correo no entregado debido a problemas del software.
 
Fichero de configuración
 Ejemplo de master.cf 

#
# Postfix master process configuration file.  Each line describes how
# a mailer component program should be run. The fields that make up
# each line are described below. A "-" field value requests that a
# default value be used for that field.
#
# Service: any name that is valid for the specified transport type
# (the next field).  With INET transports, a service is specified as
# host:port.  The host part (and colon) may be omitted. Either host
# or port may be given in symbolic form or in numeric form. Examples
# for the SMTP server:  localhost:smtp receives mail via the loopback
# interface only; 10025 receives mail on port 10025.
#
# Transport type: "inet" for Internet sockets, "unix" for UNIX-domain
# sockets, "fifo" for named pipes.
#
# Private: whether or not access is restricted to the mail system.
# Default is private service.  Internet (inet) sockets can't be private.
#
# Unprivileged: whether the service runs with root privileges or as
# the owner of the Postfix system (the owner name is controlled by the
# mail_owner configuration variable in the main.cf file).
#
# Chroot: whether or not the service runs chrooted to the mail queue
# directory (pathname is controlled by the queue_directory configuration
# variable in the main.cf file). Presently, all Postfix daemons can run
# chrooted, except for the pipe and local daemons. The files in the
# examples/chroot-setup subdirectory describe how to set up a Postfix
# chroot environment for your type of machine.
#
# Wakeup time: automatically wake up the named service after the
# specified number of seconds. A ? at the end of the wakeup time
# field requests that wake up events be sent only to services that
# are actually being used.  Specify 0 for no wakeup. Presently, only
# the pickup, queue manager and flush daemons need a wakeup timer.
#
# Max procs: the maximum number of processes that may execute this
# service simultaneously. Default is to use a globally configurable
# limit (the default_process_limit configuration parameter in main.cf).
# Specify 0 for no process count limit.
#
# Command + args: the command to be executed. The command name is
# relative to the Postfix program directory (pathname is controlled by
# the program_directory configuration variable). Adding one or more
# -v options turns on verbose logging for that service; adding a -D
# option enables symbolic debugging (see the debugger_command variable
# in the main.cf configuration file). See individual command man pages
# for specific command-line options, if any.
#
# In order to use the "uucp" message tranport below, set up entries
# in the transport table.
#
# In order to use the "cyrus" message transport below, configure it
# in main.cf as the mailbox_transport.
#
# SPECIFY ONLY PROGRAMS THAT ARE WRITTEN TO RUN AS POSTFIX DAEMONS.
# ALL DAEMONS SPECIFIED HERE MUST SPEAK A POSTFIX-INTERNAL PROTOCOL.
#
# DO NOT CHANGE THE ZERO PROCESS LIMIT FOR CLEANUP/BOUNCE/DEFER OR
# POSTFIX WILL BECOME STUCK UP UNDER HEAVY LOAD
#
# DO NOT CHANGE THE ONE PROCESS LIMIT FOR PICKUP/QMGR OR POSTFIX WILL
# DELIVER MAIL MULTIPLE TIMES.
#
# DO NOT SHARE THE POSTFIX QUEUE BETWEEN MULTIPLE POSTFIX INSTANCES.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
#628      inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       -       300     1       qmgr
#qmgr     fifo  n       -       -       300     1       nqmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
flush     unix  n       -       -       1000?   0       flush
smtp      unix  -       -       -       -       -       smtp
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
# The Cyrus deliver program has changed incompatibly.
#
cyrus     unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}

# only used by postfix-tls
#smtps    inet  n       -       n       -       -       smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#587      inet  n       -       n       -       -       smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
        
Puesta en funcionamiento
 Una vez que hemos realizado la instalación y hemos personalizado Postfix según nuestros gustos y necesidades, es hora de poner en funcionamiento al monstruo. 
 Al igual que otros servicios en un sistema tipo UNIX, como el servicio web o el de ftp, Postfix puede ser detenido, iniciado y reiniciado de una forma muy sencilla. Así se pueden llevar a cabo las operaciones básicas1: 
•	potasio:/etc/init.d/# postfix check
: verifica que la configuración es correcta
•	potasio:/etc/init.d/# postfix start
: inicia Postfixy ejecuta también la comprobación anterior.
•	potasio:/etc/init.d/# postfix stop
: detiene el sistema de forma ordenada. Permite que los procesos en ejecución finalicen adecuadamente.
•	potasio:/etc/init.d/# postfix abort
: detiene Postfixde forma abrupta
•	potasio:/etc/init.d/# postfix flush
: fuerza la entrega de todos los mensajes que se encuentren en la cola.
•	potasio:/etc/init.d/# postfix reload
: relee los ficheros de configuración y finaliza los procesos lo antes posible
 
Nota
Recuerda que es imprescindible ejecutar postfix reloaddespués de modificar los ficheros de configuración para que los cambios surtan efecto. 

Generación del artículo
 Este artículo ha sido producido usando DocBook XML 4.1.2 
 DocBook es una aplicación XML (también hay una versión SGML) que facilita los sistemas de documentación, al dotar de semática a los textos desde el punto de vista de los sistemas informáticos. Además permite la versatilidad de dar como salida casi cualquier formato documental: LaTeX, TeX, TeXinfo, PDF, RTF, xhtml,... 
 La edición del texto ha sido realizada con Emacs 21, en el major mode xml-mode. Los paquetes Debian usados han sido psgml (http://packages.debian.org/testing/text/psgml.html) y xae (http://packages.debian.org/testing/text/xae.html). Las transfomaciones de prueba han sido realizadas con las hojas de estilo XSL mantenidas por Normal Walsh (http://sourceforge.net/projects/docbook), recogidas en el paquete docbook-xsl (http://packages.debian.org/testing/text/docbook-xsl.html) y con el procesador xsltproc (http://packages.debian.org/testing/text/xsltproc.html), recogido en el paquete con el mismo nombre. 
Sobre este documento
 Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation. Puedes consultar una copia de la licencia en http://www.gnu.org/copyleft/fdl.html (http://www.gnu.org/copyleft/fdl.html) 
 Este documento ha sido escrito en formato XML utilizando la DTD de DocBook (http://www.docbook.org). Mediante este sistema, puede ser fácilmente transformado a múltiples formatos (HTML, TXT, PDF, PostScript, LaTeX, DVI, ...). Se recomienda su utilización como herramienta de documentación potente y libre. 
Bibliografía
Nota
Las siguientes partes de este artículo fueron publicadas con posterioridad a la entrega de esta documentación. Para leerlas, pásate por Security Focus (http://online.securityfocus.com/) 

 Luc de Louw. Postfix-Cyrus-Web-cyradm-HOWTO (http://www.tldp.org/HOWTO/Postfix-Cyrus-Web-cyradm-HOWTO/index.html). 07-04-2002. V1.0 
 Postfix Configuration - Basics (http://www.postfix.org/docs.html) 
 . RedHat Postfix FAQ (http://www.redhat.com/support/resources/faqs/RH-postfix-FAQ/book1.html). 
 Mantenedor: . Paquete Debian "postfix-doc" (http://packages.debian.org/cgi-bin/download.pl). V1.1.4-2. 
 . Hosting email for virtual domains using Postfix and Cyrus (http://dudle.linuxroot.org/docs/postfix_cyrus/mail.html#toc4). 01-08-2001. 
 . Filtering E-Mail with Postfix and Procmail, Part One (http://online.securityfocus.com/infocus/1593). Última actualización: 17 Junio del 2002. 
 . Mutt and IMAP (http://mutt.sourceforge.net/imap/). 06-06-2001 
Notas
1. 	Es condición imprescindible poseer privilegios de administrador para realizar estas operaciones.