Lea primero la parte anterior
Este artículo es el séptimo de la serie "Configurando un servidor de correo en Linux".
En la parte anterior, tratamos cómo configurar la autenticación de usuarios integrando Dovecot y PostgreSQL.
Si aún no lo ha revisado, le recomendamos que lo lea primero.
👉 Parte anterior: Configuración de auth-sql.conf.ext de Dovecot y hash de contraseñas


Estructura del archivo de configuración de Postfix

Postfix es un servidor SMTP encargado de la entrega de correo, que utiliza varios archivos de configuración para ajustar su funcionamiento.
En este artículo, explicaremos la estructura del archivo de configuración de Postfix y sus principales funciones.

Diagrama de configuración de Postfix

Archivos de configuración principales de Postfix

Nombre del archivo Función
/etc/postfix/main.cf Archivo de configuración principal de Postfix (entrega de correo, configuración de red, etc.)
/etc/postfix/master.cf Gestión de servicios de Postfix (SMTP, LMTP, autenticación SASL, etc.)
/etc/postfix/virtual Mapeo de usuarios virtuales (dominios)
/etc/postfix/aliases Gestión de alias de correo electrónico de usuarios del sistema
/etc/postfix/transport Especificar rutas de entrega de correo para dominios/direcciones específicas
/etc/postfix/relay_domains Configuración de dominios permitidos para el reenvío
/etc/postfix/sasl_passwd Almacenar información de autenticación de servidores SMTP de reenvío
/etc/postfix/sql/*.cf Archivos de configuración de conexión a la base de datos (PostgreSQL)

Configuraciones principales de Postfix (main.cf)

Vamos a revisar las configuraciones principales que definen el comportamiento de Postfix. La ubicación del archivo es /etc/postfix/main.cf.

1️⃣ Configuración básica del servidor de correo

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
  • myhostname → Nombre del host del servidor de correo
  • mydomain → Configuración del dominio principal
  • inet_interfaces → Configurar para recibir correo en todas las interfaces de red
  • inet_protocols → Usar solo IPv4 (posibilidad de desactivar IPv6)

2️⃣ Limitaciones de reenvío de correo

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
  • permit_mynetworks → Permitir el reenvío desde redes de confianza
  • permit_sasl_authenticated → Solo los usuarios autenticados por SASL pueden reenviar correo
  • defer_unauth_destination → Bloquear el reenvío externo no autenticado

3️⃣ Usuarios virtuales y conexión a la base de datos

Para que Postfix maneje dominios virtuales y buzones de correo utilizando PostgreSQL, se deben añadir las siguientes configuraciones:

virtual_mailbox_domains = pgsql:/etc/postfix/sql/virtual_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql/virtual_mailboxes.cf
virtual_alias_maps = pgsql:/etc/postfix/sql/virtual_aliases.cf

🔹 Descripción
- virtual_mailbox_domains → Consultar dominios virtuales que pueden recibir correos desde la base de datos
- virtual_mailbox_maps → Consultar información de buzones de usuario de la base de datos
- virtual_alias_maps → Consultar alias de correo electrónico desde la base de datos

💡 Si está utilizando MySQL
Puede usar mysql: en lugar de pgsql:.

💡 En entornos de alto tráfico, puede ser ventajoso usar proxy:pgsql: desde el punto de vista del rendimiento. Pero en entornos normales, funciona bien sin proxy:.


Configurar Postfix para utilizar la base de datos

Para que Postfix utilice PostgreSQL, debe instalarse el paquete relacionado.

sudo apt update
sudo apt install postfix postfix-pgsql
  • postfix → Servidor SMTP básico de Postfix
  • postfix-pgsql → Paquete que permite a Postfix integrarse con PostgreSQL

Una vez completada la instalación, debe escribirse un archivo de configuración para que Postfix obtenga información de usuario de PostgreSQL.


Configuración de conexión de base de datos de Postfix (virtual_*.cf archivos)

Postfix utiliza los archivos virtual_domains.cf, virtual_mailboxes.cf, virtual_aliases.cf para consultar información de la base de datos.
Estos archivos deben generarse manualmente, y pueden elaborarse utilizando la siguiente información.

1️⃣ /etc/postfix/sql/virtual_domains.cf (Configuración de consulta de dominios)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT domain_name FROM mail_domain WHERE domain_name='%s' AND active=true

Descripción

user → Cuenta de usuario de PostgreSQL (asegúrese de crear este usuario en la base de datos con permisos suficientes para acceder por postfix.)
password → Contraseña de la cuenta de PostgreSQL (contraseña del usuario de DB mailadmin que se creó previamente)
dbname → Nombre de la base de datos
hosts → Dirección del servidor de base de datos (utilizando el servidor local)
query → Consultar dominios que puedan recibir correos en la tabla mail_domain

2️⃣ /etc/postfix/sql/virtual_mailboxes.cf (Configuración de consulta de buzones)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT home_directory FROM mail_users WHERE email='%s'

Descripción

query → Consultar la ruta de almacenamiento de correo del usuario (retorna el campo home_directory de la tabla mail_users)
Postfix devuelve la ruta para que el correo del usuario se guarde en el directorio correcto.

3️⃣ /etc/postfix/sql/virtual_aliases.cf (Configuración de consulta de alias de correo)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT destination_email FROM mail_alias WHERE source_email='%s'

Descripción

query → En caso de alias, consultar el correo electrónico de destino real al que se entregará el correo.
Se busca el correo electrónico registrado en la tabla mail_alias y se devuelve.


Configuraciones de seguridad

Estos archivos de configuración contienen contraseñas, por lo tanto, es necesario restringir los permisos.

sudo chmod 640 /etc/postfix/sql/virtual_*.cf
sudo chown root:postfix /etc/postfix/sql/virtual_*.cf

🔒 Consideraciones de seguridad:

Dado que los archivos de configuración contienen contraseñas, debe restringir los permisos para que otros usuarios no puedan leerlos. Aplique chmod 640 para que solo el proceso de Postfix (grupo postfix) tenga acceso.


Recargar la configuración de Postfix

Una vez que la configuración esté completa, debe recargar Postfix para reflejar los cambios.

sudo systemctl restart postfix

Resumen y próximos pasos

Explicación de la estructura y funciones del archivo de configuración de Postfix
Adición de configuraciones principales en main.cf de Postfix
Configuración de archivos virtual_*.cf para que Postfix se integre con PostgreSQL

En la siguiente parte, trataremos cómo configurar la autenticación SMTP integrando Postfix y Dovecot.
A través de esto, planeamos que el servidor de correo esté completamente capacitado para enviar y recibir correos.

👉 Siguiente parte: Integración de Postfix y Dovecot y autenticación SMTP (¡Próximamente!)