--- title: "Cómo configurar alias y dominios virtuales en Postfix" description: "Configura alias locales, dominios de alias virtuales, direcciones catch-all y buzones virtuales en Postfix sobre Ubuntu 24.04 para gestionar varios dominios." category: "Servidor de Correo" language: es source: https://cubepath.com/es/docs/servidor-de-correo/configuracion-de-alias-y-dominios-virtuales-en-postfix updated: 2026-09-25 --- # Cómo configurar alias y dominios virtuales en Postfix Postfix puede recibir correo para direcciones que no corresponden a ningún usuario del sistema y para más de un dominio en el mismo servidor. Para ello usa tres mecanismos: los alias locales de `/etc/aliases`, los alias virtuales, que redirigen direcciones de cualquier dominio a otras direcciones, y los buzones virtuales, que almacenan el correo de dominios adicionales sin crear cuentas de Linux. En este tutorial configurarás los tres en Ubuntu 24.04, junto con una dirección catch-all y las extensiones de dirección, y comprobarás cada cambio con una entrega real. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS y Postfix instalado como "Internet Site" que ya recibe correo para tu dominio principal, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo` y un usuario del sistema que recibe correo, en los ejemplos `your_user`. - Registros MX de cada dominio adicional apuntando al nombre de tu servidor de correo (`mail.your_domain`). En los ejemplos se usan tres dominios. Sustitúyelos por los tuyos: | Dominio | Uso en esta guía | |---|---| | `your_domain` | Dominio principal, entregado a usuarios del sistema (`mydestination`). | | `example.net` | Dominio de alias virtual: todo su correo se reenvía a otras direcciones. | | `example.org` | Dominio de buzones virtuales: tiene sus propios buzones en el servidor. | ## Cómo elige Postfix el tipo de entrega Postfix decide qué hacer con un mensaje según la lista en la que esté el dominio del destinatario: | Parámetro | Tipo de dominio | Quién recibe el correo | |---|---|---| | `mydestination` | Local | Usuarios de Linux y alias de `/etc/aliases`. | | `virtual_alias_domains` | Alias virtual | Solo reenvía a otras direcciones, no tiene buzones propios. | | `virtual_mailbox_domains` | Buzón virtual | Buzones en disco sin cuenta de sistema. | Cada dominio debe estar en **una sola** de estas listas. Aparte, las entradas de `virtual_alias_maps` se aplican a cualquier dominio, así que también sirven para redirigir direcciones del dominio principal o del de buzones virtuales. Consulta la configuración actual antes de empezar: ```bash postconf mydestination alias_maps recipient_delimiter ``` ```output mydestination = $myhostname, your_domain, localhost.localdomain, localhost alias_maps = hash:/etc/aliases recipient_delimiter = + ``` ## Paso 1: Configurar alias locales Los alias de `/etc/aliases` redirigen direcciones de los dominios de `mydestination` a usuarios del sistema, a otros alias o a direcciones externas. Son la forma más sencilla de crear direcciones como `soporte@your_domain` sin crear usuarios nuevos. Abre el archivo: ```bash sudo nano /etc/aliases ``` Deja los alias del sistema que ya contiene y añade los tuyos. La sintaxis es `alias: destino1, destino2`: ```text postmaster: root root: your_user abuse: root soporte: your_user ventas: your_user, otra.persona@example.com ``` Con esta configuración, el correo de `root` (incluidos los avisos del sistema) llega a `your_user`, y `ventas@your_domain` se entrega a la vez al buzón local y a una dirección externa. Los alias `postmaster` y `abuse` deben existir siempre: las normas de correo los exigen y los proveedores los usan para avisarte de problemas. Postfix no lee el archivo de texto, sino una base de datos generada a partir de él. Regenérala: ```bash sudo newaliases ``` Comprueba cómo se resuelve un alias: ```bash postalias -q ventas /etc/aliases ``` ```output your_user, otra.persona@example.com ``` Los cambios en `/etc/aliases` se aplican en cuanto ejecutas `newaliases`; no hace falta recargar Postfix. ## Paso 2: Crear un dominio de alias virtual Un dominio de alias virtual es útil cuando un dominio adicional no necesita buzones propios: por ejemplo, una marca secundaria cuyas direcciones deben llegar a los buzones del dominio principal. Declara el dominio y el archivo donde definirás sus direcciones: ```bash sudo postconf -e 'virtual_alias_domains = example.net' sudo postconf -e 'virtual_alias_maps = hash:/etc/postfix/virtual' ``` Crea el archivo de alias virtuales: ```bash sudo nano /etc/postfix/virtual ``` Cada línea contiene la dirección de entrada y uno o varios destinos separados por comas: ```text info@example.net your_user@your_domain ventas@example.net your_user@your_domain, otra.persona@example.com facturas@example.net contabilidad@example.com ``` Postfix solo acepta correo para las direcciones que aparecen en el archivo. Cualquier otra dirección de `example.net` se rechaza durante la conversación SMTP con el error `User unknown in virtual alias table`, lo que evita que el servidor acepte spam para direcciones inexistentes. Genera la base de datos y recarga Postfix: ```bash sudo postmap /etc/postfix/virtual sudo systemctl reload postfix ``` Comprueba la resolución de una dirección: ```bash postmap -q info@example.net hash:/etc/postfix/virtual ``` ```output your_user@your_domain ``` Recuerda ejecutar `sudo postmap /etc/postfix/virtual` cada vez que edites el archivo. Los cambios en el mapa no requieren recargar Postfix, aunque puede tardar hasta un minuto en usarlos. ### Probar la entrega Instala `swaks` para enviar mensajes de prueba por SMTP: ```bash sudo apt install swaks ``` Envía un mensaje a la dirección virtual a través del propio servidor: ```bash swaks --to info@example.net --server 127.0.0.1 ``` Busca la entrega en el registro. La línea con `status=sent` muestra la dirección final (`to=`) y la original (`orig_to=`): ```bash sudo grep "orig_to=" /var/log/mail.log | tail -n 1 ``` ```output 2026-09-25T11:02:31.418552+00:00 mail postfix/local[5120]: 6A1B2C0F12: to=, orig_to=, relay=local, delay=0.05, delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox) ``` > Nota: cuando reenvías correo a un proveedor externo, el mensaje sale desde tu IP con el remitente original, y el SPF de ese remitente fallará en el destino. Si reenvías mucho correo a buzones externos, instala `postsrsd`, que reescribe el remitente del sobre para que SPF pase. ## Paso 3: Añadir una dirección catch-all Una dirección catch-all recibe el correo de cualquier dirección de un dominio que no tenga una entrada propia. Se define en `/etc/postfix/virtual` con `@dominio` como clave: ```text info@example.net your_user@your_domain ventas@example.net your_user@your_domain, otra.persona@example.com facturas@example.net contabilidad@example.com @example.net your_user@your_domain ``` Las entradas concretas tienen prioridad, así que `facturas@example.net` sigue llegando a `contabilidad@example.com` y todo lo demás a `your_user`. Regenera el mapa: ```bash sudo postmap /etc/postfix/virtual ``` Comprueba que la entrada del catch-all está en el mapa: ```bash postmap -q @example.net hash:/etc/postfix/virtual ``` ```output your_user@your_domain ``` `postmap -q` solo busca la clave exacta que le pasas; la búsqueda de `@example.net` cuando una dirección no tiene entrada propia la hace Postfix al recibir el mensaje. Para comprobar el comportamiento real, envía un mensaje a una dirección inventada: ```bash swaks --to cualquiercosa@example.net --server 127.0.0.1 ``` Debería terminar con `250 2.0.0 Ok: queued` y aparecer en el registro con `orig_to=`. > Advertencia: un catch-all recibe todo el spam dirigido a direcciones aleatorias de tu dominio (ataques de diccionario). Úsalo solo si lo necesitas de verdad, por ejemplo durante una migración, y prefiere definir las direcciones explícitamente. ## Paso 4: Usar extensiones de dirección Con las extensiones, una dirección como `your_user+facturas@your_domain` se entrega a `your_user@your_domain`. Así puedes dar direcciones distintas a cada servicio y filtrar o detectar filtraciones sin crear alias. El separador lo define `recipient_delimiter`, que en Ubuntu ya viene configurado con `+`. Compruébalo: ```bash postconf recipient_delimiter ``` ```output recipient_delimiter = + ``` Si la salida está vacía, actívalo: ```bash sudo postconf -e 'recipient_delimiter = +' sudo systemctl reload postfix ``` Prueba la entrega con una extensión: ```bash swaks --to your_user+prueba@your_domain --server 127.0.0.1 ``` El mensaje llega al buzón de `your_user`, y la extensión queda visible en la cabecera `Delivered-To`, que puedes usar en reglas de filtrado. Las extensiones también funcionan con los alias virtuales: `info+web@example.net` se entrega como `info@example.net`. ## Paso 5: Alojar buzones virtuales para otro dominio Cuando un dominio adicional necesita buzones propios, independientes de los del dominio principal, lo más limpio es un dominio de buzones virtuales. Todo su correo se guarda con un único usuario del sistema, sin crear una cuenta de Linux por cada buzón. Crea el usuario y el grupo propietarios de los buzones, con el directorio base `/var/mail/vhosts`: ```bash sudo groupadd -g 5000 vmail sudo useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vhosts -m vmail ``` Configura Postfix para el nuevo dominio: ```bash sudo postconf -e 'virtual_mailbox_domains = example.org' sudo postconf -e 'virtual_mailbox_base = /var/mail/vhosts' sudo postconf -e 'virtual_mailbox_maps = hash:/etc/postfix/vmailbox' sudo postconf -e 'virtual_uid_maps = static:5000' sudo postconf -e 'virtual_gid_maps = static:5000' ``` Crea la lista de buzones: ```bash sudo nano /etc/postfix/vmailbox ``` Cada línea asocia una dirección con una ruta relativa a `virtual_mailbox_base`. La barra final indica formato Maildir (un archivo por mensaje), que es el que debes usar: ```text ana@example.org example.org/ana/ luis@example.org example.org/luis/ ``` Genera la base de datos y recarga Postfix: ```bash sudo postmap /etc/postfix/vmailbox sudo systemctl reload postfix ``` Los alias de este dominio se definen en el mismo `/etc/postfix/virtual` del paso 2. Por ejemplo, para que `info@example.org` llegue a Ana, añade: ```text info@example.org ana@example.org ``` Y regenera ese mapa con `sudo postmap /etc/postfix/virtual`. Envía un mensaje de prueba y comprueba que se ha creado el buzón: ```bash swaks --to ana@example.org --server 127.0.0.1 sudo ls /var/mail/vhosts/example.org/ana/new ``` ```output 1790334551.V801I2a0f3M912331.mail ``` Postfix crea automáticamente los directorios del buzón en la primera entrega. Para que Ana lea su correo por IMAP, configura Dovecot con esa misma ubicación (`mail_location = maildir:/var/mail/vhosts/%d/%n`) y una base de usuarios virtuales con sus contraseñas. > Importante: si defines un catch-all (`@example.org`) para un dominio de buzones virtuales, tiene prioridad sobre los buzones. Añade en `/etc/postfix/virtual` una entrada que apunte cada buzón a sí mismo (`ana@example.org ana@example.org`) antes de la línea del catch-all. ## Paso 6: Añadir más dominios Para añadir un dominio a cualquiera de las listas, indica todos los dominios separados por comas; `postconf -e` sustituye el valor completo: ```bash sudo postconf -e 'virtual_alias_domains = example.net, example.com' sudo systemctl reload postfix ``` Después añade sus direcciones al mapa correspondiente, ejecuta `postmap` y crea sus registros MX. Revisa la configuración final con: ```bash postconf -n | grep -E "^(mydestination|virtual_)" ``` ## Solución de problemas **`warning: do not list domain example.net in BOTH mydestination and virtual_alias_domains`**: el dominio aparece en dos listas. Quítalo de `mydestination` (o de la otra lista) y recarga Postfix. **`Relay access denied` al enviar a un dominio adicional**: el dominio no está en ninguna de las listas de la tabla anterior, así que Postfix lo trata como un dominio externo. Añádelo a `virtual_alias_domains` o `virtual_mailbox_domains`. **`User unknown in virtual alias table` o `in virtual mailbox table`**: la dirección no está en el mapa, o editaste el archivo y olvidaste ejecutar `postmap`. Comprueba con `postmap -q direccion hash:/etc/postfix/virtual`. **`error: open database /etc/postfix/virtual.db: No such file or directory`**: el mapa está declarado en `main.cf` pero nunca se ha generado. Ejecuta `sudo postmap /etc/postfix/virtual`. **Los buzones virtuales fallan con `permission denied`**: el directorio base no pertenece al usuario de `virtual_uid_maps`. Corrige la propiedad con `sudo chown -R vmail:vmail /var/mail/vhosts`. ## Conclusión Has configurado alias locales con `/etc/aliases`, un dominio de alias virtual que reenvía su correo, una dirección catch-all, extensiones de dirección y un dominio con buzones virtuales propios, y has comprobado cada caso con una entrega real. Con estos mecanismos, un solo servidor Postfix puede atender el correo de varios dominios sin crear cuentas de sistema para cada dirección. Como siguientes pasos puedes: - Configurar Dovecot con usuarios virtuales para dar acceso IMAP a los buzones de `example.org`. - Publicar SPF, DKIM y DMARC para cada dominio adicional que envíe correo. - Añadir SpamAssassin para filtrar el correo que reciben todos los dominios.