Servidor de correo · 6 min read · Nov 11, 2025

Usuarios Y Dominios Virtuales Con Postfix, Courier Y MySQL (+ SMTP-AUTH, Cuota, SpamAssassin, ClamAV)

¡Este es un “copia y pega” HowTo! La forma más fácil de seguir este tutorial es usar un cliente de línea de comandos/cliente SSH (como PuTTY para Windows) y simplemente copiar y pegar los comandos (excepto donde tengas que proporcionar tu propia información como direcciones IP, nombres de host, contraseñas,…). Esto ayuda a evitar errores tipográficos.

Usuarios Y Dominios Virtuales Con Postfix, Courier Y MySQL (+ SMTP-AUTH, Cuota, SpamAssassin, ClamAV)

Versión 1.0
Autor: Falko Timme

Este tutorial está protegido por derechos de autor (c) 2005 por Falko Timme. Se deriva de un tutorial de Christoph Haas que puedes encontrar en http://workaround.org. Eres libre de usar este tutorial bajo la licencia Creative Commons 2.5 o cualquier versión posterior.

Este documento describe cómo instalar un servidor de correo basado en Postfix que se basa en usuarios y dominios virtuales, es decir, usuarios y dominios que están en una base de datos MySQL. También demostraré la instalación y configuración de Courier (Courier-POP3, Courier-IMAP), para que Courier pueda autenticar contra la misma base de datos MySQL que usa Postfix.

El servidor Postfix resultante es capaz de SMTP-AUTH y TLS y cuota (la cuota no está integrada en Postfix por defecto, te mostraré cómo parchear tu Postfix adecuadamente). Las contraseñas se almacenan en forma encriptada en la base de datos (la mayoría de los documentos que encontré trataban con contraseñas en texto plano, lo cual es un riesgo de seguridad). Además de eso, este tutorial cubre la instalación de Amavisd, SpamAssassin y ClamAV para que los correos electrónicos sean escaneados en busca de spam y virus.

La ventaja de tal configuración “virtual” (usuarios y dominios virtuales en una base de datos MySQL) es que es mucho más eficiente que una configuración basada en usuarios del sistema “reales”. Con esta configuración virtual, tu servidor de correo puede manejar miles de dominios y usuarios. Además, es más fácil de administrar porque solo tienes que tratar con la base de datos MySQL cuando agregas nuevos usuarios/dominios o editas los existentes. No más comandos postmap para crear archivos db, no más recargas de Postfix, etc. Para la administración de la base de datos MySQL puedes usar herramientas basadas en la web como phpMyAdmin que también se instalará en este howto. La tercera ventaja es que los usuarios tienen una dirección de correo electrónico como nombre de usuario (en lugar de un nombre de usuario + una dirección de correo electrónico) que es más fácil de entender y recordar.

Este tutorial se basa en Debian Sarge (Debian 3.1). Ya deberías haber configurado un sistema Debian básico, como se describe aquí: https://www.howtoforge.com/perfect_setup_debian_sarge y https://www.howtoforge.com/perfect_setup_debian_sarge_p2.

Este howto está destinado a ser una guía práctica; no cubre los antecedentes teóricos. Estos se tratan en muchos otros documentos en la web.

¡Este documento se proporciona sin garantía de ningún tipo! Quiero decir que esta no es la única forma de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero este es el camino que elijo. No emito ninguna garantía de que esto funcione para ti!

1 Instalar Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Todo esto se puede instalar con un solo comando:

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 línea!)

Se te harán algunas preguntas:

¿Habilitar suExec? <– Sí
¿Crear directorios para la administración basada en web? <– No
¿Tipo general de configuración? <– Sitio de Internet
¿A dónde debería ir el correo para root? <– NINGUNO
¿Nombre del correo? <– server1.example.com
¿Otros destinos para aceptar correo? (en blanco para ninguno) <– server1.example.com, localhost, localhost.localdomain
¿Forzar actualizaciones sincrónicas en la cola de correo? <– No
¿Certificado SSL requerido? <– Ok
¿Instalar sugerencias? <– Ok
¿Qué servidor web te gustaría reconfigurar automáticamente? <– apache, apache2
¿Quieres que reinicie apache ahora? <– Sí

2 Aplicar parche de cuota a Postfix

Tenemos que obtener las fuentes de Postfix, parchearlo con el parche de cuota, construir nuevos paquetes .deb de Postfix e instalar esos paquetes .deb:

apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 línea!)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb

3 Crear la base de datos MySQL para Postfix/Courier

Por defecto, MySQL se instala sin una contraseña de root, que cambiamos inmediatamente (reemplaza yourrootsqlpassword con la contraseña que deseas usar):

mysqladmin -u root password yourrootsqlpassword

Ahora creamos una base de datos llamada mail:

mysqladmin -u root -p create mail

A continuación, vamos a la consola de MySQL:

mysql -u root -p

En la consola de MySQL, creamos el usuario mail_admin con la contraseña mail_admin_password (reemplázala con tu propia contraseña) que tiene privilegios de SELECT,INSERT,UPDATE,DELETE en la base de datos mail. Este usuario será utilizado por Postfix y Courier para conectarse a la base de datos mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Aún en la consola de MySQL, creamos las tablas que Postfix y Courier necesitan:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Como habrás notado, con el comando quit; hemos salido de la consola de MySQL y estamos de vuelta en la consola de Linux.

La tabla domains almacenará cada dominio virtual para el cual Postfix debería recibir correos electrónicos (por ejemplo, example.com).

domain
example.com

La tabla forwardings es para aliasar una dirección de correo electrónico a otra, por ejemplo, redirigir correos electrónicos de [email protected] a [email protected].

sourcedestination
[email protected][email protected]

La tabla users almacena todos los usuarios virtuales (es decir, direcciones de correo electrónico, porque la dirección de correo electrónico y el nombre de usuario son los mismos) y contraseñas (¡en forma encriptada!) y un valor de cuota para cada buzón de correo (en este ejemplo, el valor predeterminado es 10485760 bytes, lo que significa 10MB).

emailpasswordquota
[email protected]No9.E4skNvGa. (“secreto” en forma encriptada)10485760

La tabla transport es opcional, es para usuarios avanzados. Permite redirigir correos para usuarios individuales, dominios completos o todos los correos a otro servidor. Por ejemplo,

domaintransport
example.comsmtp:[1.2.3.4]

redirigiría todos los correos electrónicos para example.com a través del protocolo smtp al servidor con la dirección IP 1.2.3.4 (los corchetes [] significan “no hacer una búsqueda del registro DNS MX” (lo cual tiene sentido para direcciones IP…). Si usas un nombre de dominio completamente calificado (FQDN) en su lugar, no usarías los corchetes.).

Por cierto, (sugiero que la dirección IP de tu sistema de servidor de correo es 192.168.0.100) puedes acceder a phpMyAdmin a través de http://192.168.0.100/phpmyadmin/ en un navegador e iniciar sesión como mail_admin. Luego puedes echar un vistazo a la base de datos. Más adelante puedes usar phpMyAdmin para administrar tu servidor de correo.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.