Servidor de correo · 9 min read · Oct 14, 2025

Usuarios y Dominios Virtuales Con Postfix, Courier, MySQL Y SquirrelMail (Fedora 17 x86_64)

Usuarios y Dominios Virtuales Con Postfix, Courier, MySQL Y SquirrelMail (Fedora 17 x86_64)

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este tutorial está protegido por derechos de autor (c) 2012 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 que utiliza 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 lidiar 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 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 tomo. No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

Este tutorial se basa en Fedora 17 x86_64, así que deberías configurar una instalación básica del servidor Fedora 17 antes de continuar con este tutorial. 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 de host.

Deberías asegurarte de que el firewall esté apagado (al menos por ahora).

También asegúrate de que SELinux esté deshabilitado:

Edita /etc/selinux/config y establece SELINUX=disabled:

vi /etc/selinux/config

| # Este archivo controla el estado de SELinux en el sistema. # SELINUX= puede tomar uno de estos tres valores: # enforcing - La política de seguridad de SELinux se aplica. # permissive - SELinux imprime advertencias en lugar de aplicar. # disabled - No se carga ninguna política de SELinux. SELINUX=disabled # SELINUXTYPE= puede tomar uno de estos dos valores: # targeted - Los procesos dirigidos están protegidos, # minimum - Modificación de la política dirigida. Solo se protegen procesos seleccionados. # mls - Protección de Seguridad de Múltiples Niveles. SELINUXTYPE=targeted |

Después de eso, debemos reiniciar el sistema:

reboot

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

Todo esto se puede instalar 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 libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-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 (falko en este ejemplo) y le damos una contraseña:

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

Necesitaremos el comando sudo más adelante para que el usuario falko pueda compilar e instalar los paquetes rpm. Pero primero, debemos permitir que falko 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:

| [...] ## Permitir a root ejecutar cualquier comando en cualquier lugar root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |

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

su falko

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/BUILDROOT  
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 creamos un directorio de descargas y descargamos los archivos fuente de http://www.courier-mta.org/download.php:

mkdir $HOME/downloads  
cd $HOME/downloads
wget https://sourceforge.net/projects/courier/files/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2  
wget https://sourceforge.net/projects/courier/files/maildrop/2.5.5/maildrop-2.5.5.tar.bz2

(Asegúrate de descargar courier-imap-4.9.3.tar.bz2 y no el más nuevo courier-imap-4.10.0.tar.bz2 - intentar construir courier-imap-4.10.0.tar.bz2 bloqueó mi sistema de manera reproducible.)

Ahora (aún en $HOME/downloads) podemos construir courier-authlib:

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

Después del proceso de construcción, los paquetes rpm se pueden encontrar en /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si estás en un sistema i386). El comando

sudo ls -l /root/rpmbuild/RPMS/x86_64

te muestra los paquetes rpm disponibles:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 580  
-rw-r--r-- 1 root root 127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
[falko@server1 downloads]$

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

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.64.0-1.fc17.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm

Ahora volvemos a nuestro directorio de descargas:

cd $HOME/downloads

Ejecuta los siguientes comandos para crear los directorios requeridos/cambiar los permisos del directorio (porque de lo contrario el proceso de construcción para Courier-Imap fallará):

sudo mkdir /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

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

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

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

cd $HOME/rpm/RPMS/x86_64

El comando

ls -l

te muestra los paquetes rpm disponibles:

[falko@server1 x86_64]$ ls -l  
total 1248  
-rw-rw-r-- 1 falko falko 318293 Jun 11 18:28 courier-imap-4.9.3-1.17.x86_64.rpm  
-rw-rw-r-- 1 falko falko 957697 Jun 11 18:28 courier-imap-debuginfo-4.9.3-1.17.x86_64.rpm  
[falko@server1 x86_64]$

Puedes instalar courier-imap así:

sudo rpm -ivh courier-imap-4.9.3-1.17.x86_64.rpm

Ahora volvemos a nuestro directorio de descargas:

cd $HOME/downloads

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

sudo rpmbuild -ta maildrop-2.5.5.tar.bz2

Después del proceso de construcción, los paquetes rpm se pueden encontrar en /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si estás en un sistema i386). El comando

sudo ls -l /root/rpmbuild/RPMS/x86_64

te muestra los paquetes rpm disponibles:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 1844  
-rw-r--r-- 1 root root 127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 285877 Jun 11 18:42 maildrop-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 829453 Jun 11 18:42 maildrop-debuginfo-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 102417 Jun 11 18:42 maildrop-devel-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  66177 Jun 11 18:42 maildrop-man-2.5.5-1.17.x86_64.rpm  
[falko@server1 downloads]$

Ahora puedes instalar maildrop así:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.5-1.17.x86_64.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, parchearlo 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/fedora/linux/releases/17/Everything/source/SRPMS/p/postfix-2.9.2-2.fc17.src.rpm  
rpm -ivh postfix-2.9.2-2.fc17.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 /root/rpmbuild/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.1.patch  
cd /root/rpmbuild/SPECS/

Ahora debemos editar el archivo postfix.spec:

vi postfix.spec

Agrega Patch0: postfix-vda-v11-2.9.1.patch a la estrofa # Patches, y %patch0 -p1 -b .vda-v11 a la estrofa %setup -q:

| [...] # Patches Patch0: postfix-vda-v11-2.9.1.patch Patch1: postfix-2.7.0-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.3-datecalc.patch [...] %prep %setup -q # Aplicar parches obligatorios %patch0 -p1 -b .vda-v11 %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

Antes de construir el nuevo paquete de Postfix, necesitamos instalar su requisito libdb-devel - y debido a que libdb-devel entra en conflicto con db4-devel, primero debemos eliminar ese paquete:

yum remove db4-devel
yum install libdb-devel

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 /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 si estás en un sistema i386), así que vamos allí:

cd /root/rpmbuild/RPMS/x86_64

El comando

ls -l

te muestra los paquetes disponibles:

[root@server1 x86_64]# ls -l  
total 10312  
-rw-r--r-- 1 root root  127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root    8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  285877 Jun 11 18:42 maildrop-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  829453 Jun 11 18:42 maildrop-debuginfo-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  102417 Jun 11 18:42 maildrop-devel-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root   66177 Jun 11 18:42 maildrop-man-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 2291437 Jun 11 19:04 postfix-2.9.2-2.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 6308357 Jun 11 19:04 postfix-debuginfo-2.9.2-2.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   65393 Jun 11 19:04 postfix-perl-scripts-2.9.2-2.fc17.x86_64.rpm  
[root@server1 x86_64]#

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

rpm -ivh postfix-2.9.2-2.fc17.x86_64.rpm
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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