Configuración de Alias y Dominios Virtuales en Postfix: Guía Completa

Introducción

La gestión de alias de correo electrónico y dominios virtuales en Postfix le permite crear infraestructuras de correo electrónico flexibles y escalables. Ya sea que necesite reenviar correos electrónicos desde múltiples direcciones a un solo buzón, alojar correo electrónico para múltiples dominios en un servidor o crear direcciones catch-all, las capacidades de alias y dominios virtuales de Postfix proporcionan soluciones poderosas.

Los alias de correo electrónico redirigen mensajes de una dirección a otra sin crear buzones separados. Por ejemplo, puede tener [email protected], [email protected] y [email protected] que entreguen todos a un solo buzón [email protected]. Esto simplifica la gestión mientras presenta una estructura de correo electrónico profesional y organizada al mundo exterior.

Los dominios virtuales llevan esto más allá al permitir que un solo servidor de correo maneje correo electrónico para múltiples dominios independientes. Puede alojar correo electrónico para example.com, example.net y client-domain.com todo en un servidor, con cada dominio manteniendo cuentas de usuario y alias completamente separados. Esto es esencial para proveedores de hosting, agencias que gestionan correo electrónico de clientes u organizaciones con múltiples marcas.

Esta guía completa cubre todo, desde alias simples hasta configuraciones complejas de dominios virtuales, incluyendo buzones virtuales, alias virtuales, direcciones catch-all, extensiones de dirección y configuraciones avanzadas de enrutamiento.

Requisitos Previos

Antes de configurar alias y dominios virtuales, asegúrese de tener:

Requisitos del Sistema

  • Servidor de correo Postfix funcionando
  • Ubuntu 20.04/22.04, Debian 10/11, CentOS 8/Rocky Linux 8 o similar
  • Acceso root o sudo
  • Configuración básica de Postfix completada

Requisitos del Servidor de Correo

  • Postfix instalado y enviando/recibiendo correo
  • Dovecot configurado (para buzones virtuales)
  • Registros DNS configurados correctamente para todos los dominios
  • Comprensión de la configuración actual de correo

Requisitos de Conocimiento

  • Competencia en línea de comandos de Linux
  • Conocimiento básico de configuración de Postfix
  • Comprensión de enrutamiento de correo electrónico
  • Habilidades de editor de texto (nano, vim)

Comprensión de Alias vs Dominios Virtuales

Alias Locales

Propósito: Redirigir correo dentro del mismo dominio Ámbito: Usuarios del sistema y entrega local Configuración: /etc/aliases Caso de uso: Configuraciones pequeñas de un solo dominio

Ejemplo:

admin: root
support: admin
sales: admin, sales-team

Alias Virtuales

Propósito: Redirigir correo para dominios virtuales Ámbito: Múltiples dominios, usuarios virtuales Configuración: /etc/postfix/virtual Caso de uso: Hosting multidominio

Ejemplo:

[email protected]       [email protected]
[email protected]     [email protected]
[email protected]       [email protected]

Buzones Virtuales

Propósito: Almacenamiento real de buzones para dominios virtuales Ámbito: Buzones independientes para cada dirección Configuración: /etc/postfix/vmailbox Caso de uso: Solución completa de hosting virtual

Ejemplo:

[email protected]        example.com/user/
[email protected]       example.net/admin/

Paso 1: Configurar Alias Locales

Los alias locales son la forma más simple de reenvío de correo electrónico.

Editar Archivo de Alias

sudo nano /etc/aliases

Sintaxis Básica de Alias

# Format: alias: destination
# One destination
postmaster: root

# Multiple destinations
admin: user1, user2, user3

# Forward to external email
webmaster: [email protected]

# Chain aliases
support: admin
admin: root
root: [email protected]

# Pipe to program
devnull: /dev/null
backups: |"/usr/local/bin/backup-handler.sh"

# Include file
team: :include:/etc/postfix/team-members.txt

Alias Predeterminados Comunes

Agregue estos alias estándar:

# Required aliases
postmaster: root
hostmaster: root
webmaster: root
abuse: root

# Administrative aliases
root: [email protected]
mailer-daemon: postmaster

# Department aliases
sales: [email protected]
support: [email protected]
info: [email protected]

Aplicar Cambios de Alias

Después de editar /etc/aliases:

# Rebuild alias database
sudo newaliases

# Or
sudo postalias /etc/aliases

# Reload Postfix
sudo systemctl reload postfix

Probar Alias Locales

# Send test email
echo "Testing alias" | mail -s "Alias Test" postmaster

# Check delivery
sudo tail -f /var/log/mail.log

Ver Alias Actuales

# List all aliases
cat /etc/aliases | grep -v "^#" | grep -v "^$"

# Search for specific alias
grep "postmaster" /etc/aliases

# Test alias resolution
postmap -q postmaster /etc/aliases

Paso 2: Configurar Dominios de Alias Virtuales

Los dominios de alias virtuales reenvían todo el correo a otras direcciones.

Editar Configuración Principal de Postfix

sudo nano /etc/postfix/main.cf

Agregue o modifique:

# Virtual alias domains
virtual_alias_domains = example.net example.org
virtual_alias_maps = hash:/etc/postfix/virtual

Crear Archivo de Alias Virtuales

sudo nano /etc/postfix/virtual

Agregue alias:

# Format: virtual-address  real-address

# Simple forwarding
[email protected]               [email protected]
[email protected]             [email protected]

# Multiple destinations
[email protected]               [email protected], [email protected]

# Forward entire domain
@example.org                    [email protected]

# User-specific aliases
[email protected]                [email protected]
[email protected]                [email protected]

# Department aliases
[email protected]                [email protected]
[email protected]                [email protected]

# External forwarding
[email protected]           [email protected]

Compilar y Aplicar

# Compile virtual alias database
sudo postmap /etc/postfix/virtual

# Reload Postfix
sudo systemctl reload postfix

Probar Alias Virtuales

# Send test email
echo "Testing virtual alias" | mail -s "Test" [email protected]

# Check logs
sudo grep "example.net" /var/log/mail.log

# Test alias lookup
postmap -q [email protected] /etc/postfix/virtual

Paso 3: Configurar Dominios de Buzones Virtuales

Los dominios de buzones virtuales proporcionan buzones independientes para cada dirección.

Crear Usuario de Almacenamiento de Correo

# Create virtual mail user
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/mail/vmail -m -s /usr/sbin/nologin

# Create mail directory
sudo mkdir -p /var/mail/vmail
sudo chown -R vmail:vmail /var/mail/vmail
sudo chmod -R 770 /var/mail/vmail

Configurar Ajustes Principales de Postfix

sudo nano /etc/postfix/main.cf

Agregue configuración de buzón virtual:

# Virtual mailbox settings
virtual_mailbox_domains = example.com example.net
virtual_mailbox_base = /var/mail/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual

# Delivery method
virtual_transport = lmtp:unix:private/dovecot-lmtp

# Mailbox size limits
virtual_mailbox_limit = 0
message_size_limit = 52428800

Crear Archivo de Buzones Virtuales

sudo nano /etc/postfix/vmailbox

Agregue buzones:

# Format: email-address  mailbox-path

# Domain: example.com
[email protected]               example.com/admin/
[email protected]               example.com/user1/
[email protected]               example.com/user2/
[email protected]               example.com/sales/

# Domain: example.net
[email protected]               example.net/admin/
[email protected]             example.net/contact/
[email protected]                example.net/info/

Las rutas de buzones son relativas a virtual_mailbox_base. Ruta completa: /var/mail/vmail/example.com/admin/

Crear Archivo de Dominios Virtuales

sudo nano /etc/postfix/vdomains

Liste dominios virtuales:

example.com     OK
example.net     OK
example.org     OK

Actualice main.cf:

sudo nano /etc/postfix/main.cf

Cambie:

virtual_mailbox_domains = hash:/etc/postfix/vdomains

Compilar Bases de Datos

# Compile mailbox database
sudo postmap /etc/postfix/vmailbox

# Compile domains database
sudo postmap /etc/postfix/vdomains

# Compile virtual aliases
sudo postmap /etc/postfix/virtual

# Reload Postfix
sudo systemctl reload postfix

Integrar con Dovecot

Dovecot debe configurarse para usuarios virtuales:

sudo nano /etc/dovecot/conf.d/10-mail.conf

Establecer:

mail_location = maildir:/var/mail/vmail/%d/%n/Maildir
mail_uid = vmail
mail_gid = vmail
first_valid_uid = 5000
last_valid_uid = 5000

Variables:

  • %d = dominio (example.com)
  • %n = nombre de usuario (admin)
  • Ruta completa: /var/mail/vmail/example.com/admin/Maildir

Crear Usuarios Virtuales

Para autenticación, cree usuarios en Dovecot:

sudo nano /etc/dovecot/users

Agregue usuarios con contraseñas encriptadas:

[email protected]:{SHA512-CRYPT}$6$rounds=100000$...
[email protected]:{SHA512-CRYPT}$6$rounds=100000$...
[email protected]:{SHA512-CRYPT}$6$rounds=100000$...

Generar contraseñas:

# Generate encrypted password
doveadm pw -s SHA512-CRYPT -p 'SecurePassword123'

# Add user
echo "[email protected]:$(doveadm pw -s SHA512-CRYPT -p 'Password')" | sudo tee -a /etc/dovecot/users

# Set permissions
sudo chmod 640 /etc/dovecot/users
sudo chown root:dovecot /etc/dovecot/users

Paso 4: Configurar Direcciones Catch-All

Las direcciones catch-all reciben correo enviado a cualquier dirección inexistente en un dominio.

Catch-All de Dominio Virtual

sudo nano /etc/postfix/virtual

Agregue:

# Catch-all for example.com
@example.com                    [email protected]

# Catch-all for example.net
@example.net                    [email protected]

# Catch-all forwarding to external
@example.org                    [email protected]

Catch-All de Usuario Específico

# Catch all mail for user
user+*@example.com              [email protected]

# Catch all subaddresses
admin+*@example.com             [email protected]

Compilar y Aplicar

sudo postmap /etc/postfix/virtual
sudo systemctl reload postfix

Probar Catch-All

# Send to non-existent address
echo "Test catch-all" | mail -s "Test" [email protected]

# Check delivery
sudo tail -f /var/log/mail.log

Deshabilitar Catch-All

Para deshabilitar catch-all para un dominio:

sudo nano /etc/postfix/virtual

Elimine la línea @example.com, o coméntela:

# @example.com                  [email protected]

Compilar y recargar:

sudo postmap /etc/postfix/virtual
sudo systemctl reload postfix

Paso 5: Configurar Extensiones de Dirección

Las extensiones de dirección (también llamadas plus addressing o subaddressing) permiten a los usuarios crear variaciones ilimitadas de su dirección de correo electrónico.

Formato: [email protected]

Habilitar en Postfix

sudo nano /etc/postfix/main.cf

Agregue:

# Enable address extensions
recipient_delimiter = +

Configurar en Dovecot

sudo nano /etc/dovecot/conf.d/15-lda.conf

Agregue:

protocol lda {
  # Enable address extensions
  recipient_delimiter = +

  # Deliver extensions to main mailbox
  lda_mailbox_autocreate = yes
  lda_mailbox_autosubscribe = yes
}

Recargar Servicios

sudo systemctl reload postfix
sudo systemctl reload dovecot

Casos de Uso

Organización de correo electrónico:

[email protected]    # Newsletter signups
[email protected]      # Online shopping
[email protected]        # Social media
[email protected]          # Work-related

Rastreo de spam:

[email protected]      # Track which companies leak addresses
[email protected]

Filtrado: Cree filtros en el cliente de correo electrónico para ordenar automáticamente los mensajes:

If To contains "user+newsletter"
  Move to "Newsletters" folder

Probar Extensiones de Dirección

# Send to extended address
echo "Testing extension" | mail -s "Test" [email protected]

# Verify delivery to main mailbox
# Check [email protected] inbox

Paso 6: Configuración Avanzada de Dominios Virtuales

Múltiples Mapas de Alias Virtuales

Para mejor organización, divida los alias en múltiples archivos:

sudo nano /etc/postfix/main.cf

Configure:

virtual_alias_maps =
    hash:/etc/postfix/virtual,
    hash:/etc/postfix/virtual-aliases-example-com,
    hash:/etc/postfix/virtual-aliases-example-net

Cree archivos separados:

# Example.com aliases
sudo nano /etc/postfix/virtual-aliases-example-com

# Example.net aliases
sudo nano /etc/postfix/virtual-aliases-example-net

Compile todos:

sudo postmap /etc/postfix/virtual-aliases-example-com
sudo postmap /etc/postfix/virtual-aliases-example-net
sudo systemctl reload postfix

Alias Basados en Regex

Para patrones de coincidencia complejos:

sudo nano /etc/postfix/main.cf

Agregue:

virtual_alias_maps =
    hash:/etc/postfix/virtual,
    regexp:/etc/postfix/virtual-regexp

Cree archivo regex:

sudo nano /etc/postfix/virtual-regexp

Agregue patrones:

# Format: /pattern/ destination

# Catch all admin variants
/^admin[0-9]*@example\.com$/    [email protected]

# Catch all support variants
/^(support|help|assist)@example\.com$/  [email protected]

# Redirect old domain
/^(.+)@old-domain\.com$/        ${1}@new-domain.com

# Convert dots to plus
/^([^+]+)\.([^@]+)@example\.com$/  ${1}+${2}@example.com

No se necesita compilación para mapas regexp. Recargue:

sudo systemctl reload postfix

Catch-All por Dominio con Excepciones

sudo nano /etc/postfix/virtual

Configure:

# Specific addresses (processed first)
[email protected]               [email protected]
[email protected]             [email protected]

# Catch-all (processed after specific matches)
@example.com                    [email protected]

Postfix procesa las entradas en orden, por lo que las coincidencias específicas tienen precedencia.

Paso 7: Gestión de Dominios Virtuales

Agregar Nuevo Dominio

# 1. Add to virtual domains
echo "newdomain.com    OK" | sudo tee -a /etc/postfix/vdomains
sudo postmap /etc/postfix/vdomains

# 2. Add mailboxes
sudo nano /etc/postfix/vmailbox

Agregue:

[email protected]             newdomain.com/admin/
[email protected]           newdomain.com/contact/

Compile:

sudo postmap /etc/postfix/vmailbox

Agregue usuarios:

# 3. Add Dovecot users
echo "[email protected]:$(doveadm pw -s SHA512-CRYPT -p 'Password')" | sudo tee -a /etc/dovecot/users

Cree directorio:

# 4. Create mail directory
sudo mkdir -p /var/mail/vmail/newdomain.com
sudo chown -R vmail:vmail /var/mail/vmail/newdomain.com

Configure DNS:

# 5. Add DNS records
# MX record: newdomain.com -> mail.example.com
# A record: mail.newdomain.com -> your-ip
# SPF record: v=spf1 mx a ip4:your-ip ~all

Recargue:

sudo systemctl reload postfix dovecot

Eliminar Dominio

# 1. Remove from virtual domains
sudo nano /etc/postfix/vdomains
# Remove or comment out the domain

sudo postmap /etc/postfix/vdomains

# 2. Remove mailboxes
sudo nano /etc/postfix/vmailbox
# Remove domain mailboxes

sudo postmap /etc/postfix/vmailbox

# 3. Remove users
sudo nano /etc/dovecot/users
# Remove domain users

# 4. Backup and remove mail
sudo tar czf domain-backup.tar.gz /var/mail/vmail/olddomain.com/
sudo rm -rf /var/mail/vmail/olddomain.com/

# 5. Reload
sudo systemctl reload postfix dovecot

Listar Todos los Dominios

# List virtual mailbox domains
postconf virtual_mailbox_domains

# List from file
cat /etc/postfix/vdomains | grep -v "^#"

# Count domains
cat /etc/postfix/vdomains | grep -v "^#" | wc -l

Listar Todos los Buzones

# List all virtual mailboxes
cat /etc/postfix/vmailbox | grep -v "^#"

# List mailboxes for specific domain
grep "@example.com" /etc/postfix/vmailbox

# Count mailboxes
cat /etc/postfix/vmailbox | grep -v "^#" | wc -l

Paso 8: Pruebas y Verificación

Probar Resolución de Alias

# Test local alias
postmap -q postmaster /etc/aliases

# Test virtual alias
postmap -q [email protected] /etc/postfix/virtual

# Test virtual mailbox
postmap -q [email protected] /etc/postfix/vmailbox

# Test domain
postmap -q example.com /etc/postfix/vdomains

Probar Entrega de Correo

# Send to alias
echo "Test alias" | mail -s "Alias Test" [email protected]

# Send to virtual mailbox
echo "Test mailbox" | mail -s "Mailbox Test" [email protected]

# Send to catch-all
echo "Test catchall" | mail -s "Catchall Test" [email protected]

# Send with extension
echo "Test extension" | mail -s "Extension Test" [email protected]

Verificar Logs

# Monitor mail log
sudo tail -f /var/log/mail.log

# Check specific delivery
sudo grep "[email protected]" /var/log/mail.log | tail -20

# Check bounces
sudo grep "bounced" /var/log/mail.log | tail -20

Verificar Creación de Buzones

# List mail directories
sudo ls -la /var/mail/vmail/

# Check specific mailbox
sudo ls -la /var/mail/vmail/example.com/admin/Maildir/

# Check mail files
sudo find /var/mail/vmail/ -name "cur" -type d -exec ls -la {} \;

Solución de Problemas Comunes

Problema 1: Alias No Funciona

Síntomas: El correo electrónico no se reenvía al destino

Diagnóstico:

# Test alias lookup
postmap -q [email protected] /etc/postfix/virtual

# Check logs
sudo grep "[email protected]" /var/log/mail.log

Soluciones:

# Recompile database
sudo postmap /etc/postfix/virtual

# Check syntax
cat /etc/postfix/virtual | grep [email protected]

# Reload Postfix
sudo systemctl reload postfix

Problema 2: Dominio Virtual No Recibe Correo

Síntomas: El correo al dominio virtual rebota

Diagnóstico:

# Check if domain is listed
postconf virtual_mailbox_domains

# Check domain file
grep "example.com" /etc/postfix/vdomains

# Check MX record
dig example.com MX +short

Soluciones:

# Add domain
echo "example.com    OK" | sudo tee -a /etc/postfix/vdomains
sudo postmap /etc/postfix/vdomains

# Verify main.cf
sudo postconf | grep virtual_mailbox_domains

# Reload
sudo systemctl reload postfix

Problema 3: Permiso Denegado

Síntomas: Errores "permission denied" en los logs

Diagnóstico:

# Check ownership
sudo ls -la /var/mail/vmail/

# Check processes
ps aux | grep -E "postfix|dovecot"

Soluciones:

# Fix ownership
sudo chown -R vmail:vmail /var/mail/vmail/

# Fix permissions
sudo chmod -R 770 /var/mail/vmail/

# Restart services
sudo systemctl restart postfix dovecot

Problema 4: Catch-All No Funciona

Síntomas: El correo a direcciones inexistentes rebota en lugar de ir al catch-all

Diagnóstico:

# Check virtual aliases
grep "@example.com" /etc/postfix/virtual

# Test lookup
postmap -q [email protected] /etc/postfix/virtual

Soluciones:

# Add catch-all
echo "@example.com    [email protected]" | sudo tee -a /etc/postfix/virtual

# Recompile
sudo postmap /etc/postfix/virtual

# Ensure no reject_unverified_recipient
sudo postconf | grep reject_unverified_recipient

# Reload
sudo systemctl reload postfix

Problema 5: Extensiones de Dirección No Se Entregan

Síntomas: El correo a [email protected] rebota

Diagnóstico:

# Check recipient delimiter
postconf recipient_delimiter

# Check Dovecot config
doveconf -n | grep recipient_delimiter

Soluciones:

# Set delimiter in Postfix
sudo postconf -e "recipient_delimiter = +"

# Set in Dovecot
sudo nano /etc/dovecot/conf.d/15-lda.conf

Agregue:

recipient_delimiter = +

Recargue:

sudo systemctl reload postfix dovecot

Mejores Prácticas

1. Organización

  • Use nombres de alias descriptivos
  • Agrupe alias relacionados
  • Documente el propósito de alias complejos
  • Mantenga archivos separados para diferentes dominios

2. Seguridad

# Restrict file permissions
sudo chmod 640 /etc/postfix/virtual
sudo chmod 640 /etc/postfix/vmailbox
sudo chmod 640 /etc/dovecot/users

# Set proper ownership
sudo chown root:postfix /etc/postfix/virtual
sudo chown root:postfix /etc/postfix/vmailbox

3. Mantenimiento

  • Revise y limpie regularmente los alias no utilizados
  • Elimine destinos que rebotan
  • Actualice alias cuando cambie el personal
  • Haga respaldo de archivos de alias antes de cambios

4. Documentación

Cree un inventario de alias:

sudo nano /etc/postfix/README-aliases.txt

Documente:

Domain: example.com
Purpose: Main company domain

Aliases:
- [email protected] -> forwards to admin-team
- [email protected] -> forwards to CRM system
- [email protected] -> forwards to ticket system
- @example.com -> catch-all to admin (temporary)

Last updated: 2026-01-11
Contact: [email protected]

5. Pruebas

Después de cualquier cambio:

# 1. Check syntax
sudo postfix check

# 2. Test lookups
postmap -q [email protected] /etc/postfix/virtual

# 3. Send test email
echo "Test" | mail -s "Test" [email protected]

# 4. Verify in logs
sudo tail -f /var/log/mail.log

Conclusión

Ahora tiene una configuración completa de alias y dominios virtuales para Postfix, permitiéndole gestionar enrutamiento de correo electrónico complejo, alojar múltiples dominios y crear esquemas de direccionamiento flexibles. Esta configuración proporciona la base para una infraestructura de correo electrónico profesional y escalable.

Logros Clave

  1. Alias Locales: Reenvío simple dentro del dominio principal
  2. Alias Virtuales: Reenvío entre dominios y multidominio
  3. Buzones Virtuales: Hosting completo de dominios virtuales
  4. Direcciones Catch-All: Flexibilidad en la recepción de correo
  5. Extensiones de Dirección: Organización y filtrado mejorados

Próximos Pasos

  1. Agregar más dominios: Expandir el hosting virtual según sea necesario
  2. Implementar automatización: Scripts para agregar usuarios/dominios
  3. Configurar cuotas: Limitar tamaños de buzón por usuario/dominio
  4. Configurar webmail: Acceso basado en navegador (Roundcube/Rainloop)
  5. Implementar respaldo: Respaldo automatizado de correo y configuraciones

Recordatorios Importantes

  • Compilar después de cambios: Siempre ejecute postmap después de editar archivos de mapas
  • Recargar servicios: Ejecute systemctl reload postfix para aplicar cambios
  • Pruebe exhaustivamente: Verifique que cada alias y dominio funcione correctamente
  • Documente la configuración: Mantenga registros de alias y sus propósitos
  • Respalde regularmente: Proteja configuraciones de alias y datos de buzones

Con estas configuraciones de alias y dominios virtuales en su lugar, tiene un sistema de correo electrónico flexible y escalable capaz de crecer con sus necesidades mientras mantiene la organización y manejabilidad.