Postfix MySQL · 6 min read · Sep 28, 2025

Usuarios y Dominios Virtuales Con Postfix, Courier Y MySQL (CentOS 5.1)

Usuarios y Dominios Virtuales Con Postfix, Courier Y MySQL (CentOS 5.1)

Versión 1.0
Autor: Falko Timme

Este tutorial es Copyright (c) 2007 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.

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 “real”. 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 cómo hacerlo. 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 CentOS 5.1 (i386). Ya deberías haber configurado un sistema básico de CentOS, como se describe aquí: https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig y https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p2. Además, debes asegurarte de que el firewall esté desactivado (al menos por ahora) y que SELinux esté deshabilitado (¡esto es importante!), como se muestra en el capítulo seis en https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p3.

Este cómo hacerlo 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 este no es el único modo 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 Editar /etc/hosts

Nuestro nombre de host en este ejemplo es server1.example.com, y tiene la dirección IP 192.168.0.100, así que cambiamos /etc/hosts de la siguiente manera:

vi /etc/hosts

| # No elimines la siguiente línea, o varios programas # que requieren funcionalidad de red fallarán. 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 ::1 localhost6.localdomain6 localhost6 |

2 Instalar Algunos Software

Primero importamos las claves GPG para los paquetes de software:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Luego actualizamos nuestros paquetes existentes en el sistema:

yum update

Ahora instalamos algunos software 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 5.1:

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

(Si el enlace anterior ya no funciona, puedes encontrar la versión actual de rpmforge-release aquí: http://apt.sw.be/packages/rpmforge-release/)

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 php-mcrypt phpmyadmin rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel 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 tanto, tenemos que instalarlos como se describe en este tutorial: Cómo instalar courier-imap, courier-authlib y maildrop en Fedora, RedHat, CentOS

En caso de que tengas problemas creando los paquetes rpm, puedes descargar los míos:

  • courier-authlib-0.60.2-1.i386.rpm
  • courier-authlib-devel-0.60.2-1.i386.rpm
  • courier-authlib-mysql-0.60.2-1.i386.rpm
  • courier-imap-4.2.1-1.i386.rpm
  • maildrop-2.0.4-1.i386.rpm

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/5.1/os/SRPMS/postfix-2.3.3-2.src.rpm  
rpm -ivh postfix-2.3.3-2.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.3.3-vda.patch.gz  
gunzip postfix-2.3.3-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, añade Patch0: postfix-2.3.3-vda.patch a la estrofa # Patches, y finalmente añade %patch0 -p1 -b .vda a la estrofa %setup -q:

| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.3.3-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.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 [...] %setup -q # Aplicar parches obligatorios %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus [...] |

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

rpmbuild -ba postfix.spec

Verás muchas advertencias como estas que puedes ignorar:

msg.h:12:1: warning: "/*" within comment  
msg.h:14:1: warning: "/*" within comment  
msg.h:33:1: warning: "/*" within comment  
msg.h:34:1: warning: "/*" within comment  
msg.h:35:1: warning: "/*" within comment  
msg.h:36:1: warning: "/*" within comment

Nuestro paquete rpm de Postfix se crea en /usr/src/redhat/RPMS/i386, 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 11280  
-rw-r--r-- 1 root root 3819299 Dec  5 15:25 postfix-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root 7655069 Dec  5 15:25 postfix-debuginfo-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root   50346 Dec  5 15:25 postfix-pflogsumm-2.3.3-2.i386.rpm  
[root@server1 i386]#

Elige el paquete Postfix e instálalo así:

rpm -ivh postfix-2.3.3-2.i386.rpm

(En caso de que tengas problemas creando el paquete rpm de Postfix, puedes descargar el mío desde aquí: postfix-2.3.3-2.i386.rpm.)

6 Establecer Contraseñas de MySQL Y Configurar phpMyAdmin

Inicia MySQL:

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start

Luego establece contraseñas para la cuenta root de MySQL:

mysqladmin -u root password yourrootsqlpassword  
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

Ahora configuramos phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no solo desde localhost (comentando la estrofa ):

vi /etc/httpd/conf.d/phpmyadmin.conf

| # # Aplicación web para gestionar MySQL # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin |

A continuación, cambiamos la autenticación en phpMyAdmin de cookie a http:

vi /usr/share/phpmyadmin/config.inc.php

| [...] /* Tipo de autenticación */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |

Luego creamos los enlaces de inicio del sistema para Apache y lo iniciamos:

chkconfig --levels 235 httpd on  
/etc/init.d/httpd start

Ahora puedes dirigir tu navegador a http://server1.example.com/phpmyadmin/ o http://192.168.0.100/phpmyadmin/ e iniciar sesión con el nombre de usuario root y tu nueva contraseña root de MySQL.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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