Correo electrónico · 7 min read · Nov 07, 2025

Usuarios Y Dominios Virtuales Con Postfix, Courier, MySQL Y SquirrelMail (CentOS 4.8 i386)

Usuarios Y Dominios Virtuales Con Postfix, Courier, MySQL Y SquirrelMail (CentOS 4.8 i386)

Versión 1.0
Autor: Falko Timme

Este tutorial es Copyright (c) 2009 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 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 utilizada por Postfix.

El servidor Postfix resultante es capaz de SMTP-AUTH y TLS y cuota (la cuota no está integrada en Postfix por defecto, 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. También mostraré cómo instalar SquirrelMail como una interfaz de webmail para que los usuarios puedan leer y enviar correos electrónicos y cambiar sus contraseñas.

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 tutorial. 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), lo cual es más fácil de entender y recordar.

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

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

1 Nota Preliminar

Este tutorial se basa en CentOS 4.8 i386, así que deberías configurar una instalación básica del servidor CentOS 4.8 antes de continuar con este tutorial (por ejemplo, como se muestra en los primeros cinco capítulos de The Perfect Server - CentOS 4.8 Server i386 [ISPConfig 2]). El sistema debe tener una dirección IP estática. Uso 192.168.0.100 como mi dirección IP en este tutorial y server1.example.com como el nombre del host.

Debes asegurarte de que el firewall esté apagado (al menos por ahora) y que SELinux esté deshabilitado (¡esto es importante!).

Probé esta configuración en un sistema i386. La configuración debería ser similar o incluso idéntica para un sistema x86_64, pero no lo probé.

2 Instalar Algunos Programas

Primero actualizamos nuestros paquetes existentes en el sistema:

yum update

Ahora instalamos algunos programas que necesitaremos más adelante:

yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'

3 Instalar Apache, MySQL, phpMyAdmin

Primero habilitamos el repositorio RPMforge en nuestro sistema CentOS, ya que muchos de los paquetes que vamos a instalar en el transcurso de este tutorial no están disponibles en los repositorios oficiales de CentOS 4.8:

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpm

Después podemos instalar los paquetes necesarios con un solo comando (incluyendo los paquetes que necesitamos para construir Courier-IMAP):

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpmyadmin pcre-devel openldap-devel postgresql-devel expect openldap-servers libtool gdbm-devel pam-devel gamin-devel

4 Instalar Courier-IMAP, Courier-Authlib Y Maildrop

Desafortunadamente, no hay paquetes rpm para Courier-IMAP, Courier-Authlib y Maildrop, por lo que tenemos que construirlos nosotros mismos.

Los paquetes RPM no deben ser construidos como root; courier-imap incluso se negará a compilar si detecta que la compilación se está ejecutando como el usuario root. Por lo tanto, creamos una cuenta de usuario normal ahora (compileuser en este ejemplo) y le damos una contraseña:

useradd -m -s /bin/bash compileuser  
passwd compileuser

Necesitaremos el comando sudo más adelante para que el usuario compileuser pueda compilar e instalar los paquetes rpm. Pero primero, debemos permitir que compileuser ejecute todos los comandos usando sudo:

Ejecuta

visudo

En el archivo que se abre hay una línea root ALL=(ALL) ALL. Agrega una línea similar para falko justo debajo de esa línea:

| [...] root ALL=(ALL) ALL compileuser ALL=(ALL) ALL [...] |

Ahora estamos listos para construir nuestro paquete rpm. Primero conviértete en el usuario compileuser:

su compileuser

A continuación, creamos nuestro entorno de construcción:

mkdir $HOME/rpm  
mkdir $HOME/rpm/SOURCES  
mkdir $HOME/rpm/SPECS  
mkdir $HOME/rpm/BUILD  
mkdir $HOME/rpm/SRPMS  
mkdir $HOME/rpm/RPMS  
mkdir $HOME/rpm/RPMS/i386  
mkdir $HOME/rpm/RPMS/x86_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

Ahora descargamos los archivos fuente de http://www.courier-mta.org/download.php:

cd /tmp  
wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.4.tar.bz2  
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.6.0.tar.bz2  
wget http://prdownloads.sourceforge.net/courier/maildrop-2.2.0.tar.bz2

Ahora (todavía en /tmp) podemos construir courier-authlib:

sudo rpmbuild -ta courier-authlib-0.62.4.tar.bz2

Después del proceso de construcción, los paquetes rpm se pueden encontrar en $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 si estás en un sistema x86_64):

cd $HOME/rpm/RPMS/i386

El comando

ls -l

te muestra los paquetes rpm disponibles:

[compileuser@server1 i386]$ ls -l  
total 616  
-rw-r--r--  1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root  35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root  17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root  13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root  12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root   7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm  
-rw-r--r--  1 root root  32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm  
[compileuser@server1 i386]$

Selecciona los que deseas instalar e instálalos así:

sudo rpm -ivh courier-authlib-0.62.4-1.i386.rpm courier-authlib-mysql-0.62.4-1.i386.rpm courier-authlib-devel-0.62.4-1.i386.rpm

Ahora volvemos al directorio /tmp:

cd /tmp

y ejecutamos rpmbuild nuevamente, esta vez sin sudo, de lo contrario la compilación fallará porque se ejecutó como root:

rpmbuild -ta courier-imap-4.6.0.tar.bz2

Después del proceso de construcción, los paquetes rpm se pueden encontrar en $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 si estás en un sistema x86_64):

cd $HOME/rpm/RPMS/i386

El comando

ls -l

te muestra los paquetes rpm disponibles:

[compileuser@server1 i386]$ ls -l  
total 1812  
-rw-r--r--  1 root        root        142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root        346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root          7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm  
-rw-r--r--  1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm  
-rw-r--r--  1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm  
[compileuser@server1 i386]$

Puedes instalar courier-imap así:

sudo rpm -ivh courier-imap-4.6.0-1.i386.rpm

Ahora volvemos al directorio /tmp:

cd /tmp

y ejecutamos rpmbuild nuevamente, esta vez para construir un paquete maildrop:

sudo rpmbuild -ta maildrop-2.2.0.tar.bz2

Después del proceso de construcción, los paquetes rpm se pueden encontrar en $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 si estás en un sistema x86_64):

cd $HOME/rpm/RPMS/i386

El comando

ls -l

te muestra los paquetes rpm disponibles:

[compileuser@server1 i386]$ ls -l  
total 3012  
-rw-r--r--  1 root        root        142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root        346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root          7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm  
-rw-r--r--  1 root        root         32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm  
-rw-r--r--  1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm  
-rw-r--r--  1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm  
-rw-r--r--  1 root        root        283291 Sep 24 16:13 maildrop-2.2.0-1.i386.rpm  
-rw-r--r--  1 root        root        734265 Sep 24 16:13 maildrop-debuginfo-2.2.0-1.i386.rpm  
-rw-r--r--  1 root        root        122406 Sep 24 16:13 maildrop-devel-2.2.0-1.i386.rpm  
-rw-r--r--  1 root        root         63497 Sep 24 16:13 maildrop-man-2.2.0-1.i386.rpm  
[compileuser@server1 i386]$

Ahora puedes instalar maildrop así:

sudo rpm -ivh maildrop-2.2.0-1.i386.rpm

Después de haber compilado e instalado todos los paquetes necesarios, puedes convertirte en root nuevamente escribiendo

exit

5 Aplicar Parche de Cuota a Postfix

Tenemos que obtener el rpm fuente de Postfix, parcharlo con el parche de cuota, construir un nuevo paquete rpm de Postfix e instalarlo.

cd /usr/src  
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/4.8/os/SRPMS/postfix-2.2.10-1.2.1.el4_7.src.rpm  
rpm -ivh postfix-2.2.10-1.2.1.el4_7.src.rpm

El último comando mostrará algunas advertencias que puedes ignorar:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root
cd /usr/src/redhat/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-2.2.10-vda.patch.gz  
gunzip postfix-2.2.10-vda.patch.gz  
cd /usr/src/redhat/SPECS/

Ahora debemos editar el archivo postfix.spec:

vi postfix.spec

Cambia %define MYSQL 0 a %define MYSQL 1, agrega Patch0: postfix-2.2.10-vda.patch a la estrofa # Patches, y finalmente agrega %patch0 -p1 -b .vda a la estrofa %setup -q:

| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.2.10-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch4: postfix-hostname-fqdn.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch Patch10: postfix-2.2.10-CVE-2008-2936.patch [...] %setup -q # Apply obligatory patches %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch4 -p1 -b .postfix-hostname-fqdn %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |

Luego construimos nuestro nuevo paquete rpm de Postfix con soporte de cuota y MySQL:

rpmbuild -ba postfix.spec

Nuestro paquete rpm de Postfix se crea en /usr/src/redhat/RPMS/i386, ( /usr/src/redhat/RPMS/x86_64 en un sistema x86_64) así que vamos allí:

cd /usr/src/redhat/RPMS/i386

El comando

ls -l

te muestra los paquetes disponibles:

[root@server1 i386]# ls -l  
total 10052  
-rw-r--r--  1 root root 3237646 Sep 28 16:49 postfix-2.2.10-1.2.1.i386.rpm  
-rw-r--r--  1 root root 6984691 Sep 28 16:49 postfix-debuginfo-2.2.10-1.2.1.i386.rpm  
-rw-r--r--  1 root root   49047 Sep 28 16:49 postfix-pflogsumm-2.2.10-1.2.1.i386.rpm  
[root@server1 i386]#

Selecciona el paquete de Postfix e instálalo así:

rpm -ivh postfix-2.2.10-1.2.1.i386.rpm
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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