Postfix: un servidor de correo sencillo pero que casi nadie configura

última modificación:

Antes de Postfix, Sendmail era el Agente de Transferencia de Correo (MTA) dominante en Unix.

Un MTA es un software que recibe un mensaje y lo entrega a su destino, ya sea en el mismo servidor o en uno remoto. Sendmail lo hacía todo, pero configurarlo era complicado: su archivo sendmail.cf era prácticamente ilegible, y décadas de código acumulado lo habían convertido en un objetivo habitual de vulnerabilidades. Wietse Venema diseñó Postfix en IBM Research a finales de los 90 como reemplazo seguro y configurable. En lugar del proceso monolítico de Sendmail, Postfix divide el trabajo en procesos pequeños con privilegios mínimos.

El resultado es un agente que hace lo mismo, pero cuya configuración cabe en un archivo de texto legible y eso lo ha convertido, por méritos propios, en la solución por defecto en sistemas Unix.

Para instalarlo:

sudo apt-get install postfix

Durante la instalación aparece un diálogo que pregunta el tipo de configuración:

  • Sin configuración: no toca nada. Para configurar manualmente después.
  • Sitio de Internet: el servidor envía y recibe correo directamente. Requiere un registro MX en el DNS apuntando al servidor.
  • Internet con smarthost: recibe correo directamente pero lo envía a través de un servidor externo (relay).
  • Sistema satélite: todo el correo, entrante y saliente, pasa por otro servidor.
  • Sólo correo local: solo entrega correo entre usuarios locales. Para notificaciones del sistema (cron, logwatch) que no salen al exterior.

La configuración principal está en /etc/postfix/main.cf y los parámetros esenciales son:

myhostname = correo.ejemplo.com
mydomain = ejemplo.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

myhostname es el nombre con el que el servidor se identifica en SMTP. mydestination son los dominios para los que el servidor acepta correo como destino final (en lugar de reenviarlo).

Para arrancar, parar y recargar la configuración:

sudo postfix start
sudo postfix stop
sudo postfix reload

reload aplica los cambios en main.cf sin reiniciar el servicio ni interrumpir las conexiones activas. Después de cualquier cambio en la configuración, conviene verificar que no haya errores antes de recargar:

postfix check

Para ver la cola de correo pendiente de entrega:

postqueue -p

Una cola vacía es lo normal. Si hay mensajes retenidos, suele ser un problema de DNS, de autenticación o de configuración.

Pero no nos engañemos, un servidor de correo completo requiere registros DNS correctos (además de MX, SPF y DKIM), TLS, autenticación de usuarios y gestión de listas negras. Configurarlo bien lleva tiempo y requiere mantenerlo actualizado. La mayoría de los equipos de infraestructura usan Postfix como Internet con smarthost (las aplicaciones del servidor le entregan el correo, y él lo reenvía a un servicio externo como SendGrid o Amazon SES) y dejan la entrega final a un tercero.

Con esto en mente, Postfix lo hace bien y fácil: instalar, configurar relayhost para apuntar al servicio externo, y olvidarse. La fontanería funciona en silencio.