Procedemos a explicar nuestro servidor de correo con Instalación de Postfix Admin, mysql y Dovecoot.
1.1 Introducción
Partiendo de la base de que tenemos ya un servidor de correo instalado y funcionando con Postfix (SMTP) y Dovecot (IMAP y POP3), queremos dar un paso más y añadir las siguientes mejoras:
▪ Utilizar usuarios virtuales (en lugar de cuentas del sistema).
▪ Instalar una aplicación web que nos permita gestionar de forma cómoda dominios, usuarios, aliases, etc.
▪ Instalar una aplicación webmail que nos permita acceder a nuestro correo mediante navegador.
▪ Instalar una aplicación para automatizar y mejorar la gestión de listas de
distribución de correo.
1.2 Preparativo
Antes de nada, esta prática a sido realizada con una tarjeta de red Solo-Anfitrión desde VirtualBox.
Instalamos los siguientes paquetes que nos serán necesarios (como consejo, nos damos permisos de root con sudo su para ejecutar los servicios/permisos más rápidamente):
Capa de seguridad y autenticación sencilla
apt-get install sasl2-bin
SGBD MySQL
apt-get install mysql-server
Nos pedirá una contraseña para nuestro usuario root en mysql, en mi caso pondre root/root.
Paquetes de integración de Postfix y Dovecot MySQL
apt-get install postfix-mysql dovecot-mysql
Funciones IMAP para aplicaciones en PHP
apt-get install php7.0-imap
Funciones IMAP y POP para Dovecot
apt-get install dovecot-imapd dovecot-pop3d
Paquetes de integración de Postixadmin
apt-get install postfixadmin
Tras ver que el servicio apache2 funciona, vemos la IP de nuestro equipo para conectarnos a su url con ifconfig.
Ahora accedemos a un navegador y añadimos la siguiente ruta IP(de nuestra máquina, en mi caso 172.20.12.221)
172.20.12.221/postfixadmin/login.php
Como vemos en la anterior imagen, tendremos un error del cual tendremos que solucionar editando el archivo con la siguiente ruta con nano:
usr/share/postfixadmin/upgrade.php
Ahora con control W y Control R (remplazamos los 0000-00-00 por una fecha cualquiera, en mi caso las sustitui por 2019-10-02, aceptamos a todas)
Seguiremos teniendo un fallo en nuestro navegador, esta vez de incompatibilidad con PHP7, para eso vamos a proceder hacerlo compatible con dicha versión editando con nano la siguiente dirección y archivo:
/etc/postfixadmin/dbconfig.inc.php
Añadimos una «i» a dbtype como se indica en la imagen siguiente
Volvemos a nuestro navegador y esta vez vamos actualizar postfixadmin con upgrade:
172.20.12.221/postfixadmin/upgrade.php
Nos dará un problema de PHP5, para resolverlo editamos con nano la siguiente dirección y archivo archivo :
/usr/share/postfixadmin/setup.php
Al ser un archivo PHP lo comentamos «//» la linea multibyte y el if/else tal aparece en la imagen siguiente
Volvemos a nuestro navegador :
172.20.12.221/postfixadmin/setup.php
Ahora todo funciona y pondremos root/root en la contraseña.
Podemos ver que la contraseña sale cifrada, para ello vamos a conectarnos al PUTTY para mayor facilidades con «copy&paste» copiamos la contraseña cifrada y la pegamos con nano en el siguiente archivo archivo con su respectiva ruta:
/etc/postfixadmin/config.inc.php
Sustituimos el $CONF[‘setup_password’] por la contraseña cifrada. También debemos cambiar el admin email por admin@misitio.com en $CONF[‘admin_email’] y podremos poner el lengua de por defecto en Español poniendo en $CONF[‘default_language’] = ‘es’;
En mi caso, en la interfaz del navegador, ponemos como administrador admin@misitio.com con contraseña admin y ya tendremos al administrador añadido
Ya podremos acceder con admin@misitio.com y la contraseña admin desde 172.20.12.221/postfixadmin/login.php
Procedemos a crear un nuevo dominio como se indica en la siguiente imagen (debe ser un dominio existente, asi que debes de tener el dominio o comprobar que existe).
Añadimos un nuevo buzón y habremos terminado con postfixadmin.
Preparamos los usuarios de la base de datos de Postfix Admin, abriendo una consola con mysql -u root -p
Acto seguido daremos los siguientes permisos al usuario postfixadmin, cambiando la clave por segundo nos convenga.
Nota: Una vez terminado este tutorial, quizas debas repetir este paso de privilegios para postfixadmin
GRANT ALL PRIVILEGES ON postfixadmin.* TO ‘postfixadmin’@’%’
IDENTIFIED BY ‘admin’;
GRANT SELECT ON postfixadmin.* TO ‘postfix’@’localhost’ IDENTIFIED BY ‘admin’;
FLUSH PRIVILEGES;
QUIT;
Creamos un usuario especial del sistema operativo donde se guardarán a partir de ahora todos los buzones virtuales:
sudo groupadd -g 5000 vmail
sudo useradd -d /home/vmail -m -u 5000 -g 5000 vmail
Editamos el siguiente archivo de la siguiente ruta con nano /etc/postfix/main.cf
Añadiremos las siguientes notas:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
En mydestination añadiremos nuestro sistema de correo, en mi caso es jmartin.misition.com
A continuación debemos crear el archivo mysql para crear una serie de archivos con los que le indicamos a Postfix cómo debe obtener de la base de datos la lista de dominios, usuarios, buzones, etc
Tabla de dominios virtuales
Contiene la lista de dominios para los que este servidor es el destino final.
Creamos el archivo nano /etc/postfix/mysql /virtual_mailbox_domains.cf para acceder a la lista de dominios virtuales:
Escribimos lo siguiente
hosts = 127.0.0.1
user = postfix
password = admin #Reemplazar por la contraseña adecuada
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain=’%s’ and backupmx = 0 and active = 1
Tabla de buzones virtuales
Contiene la lista de direcciones de correo validas (para nuestros dominios) y la localización del buzón asociado a cada una de ellas.
Creamos el archivo nano /etc/postfix/mysql /virtual_mailbox_maps.cf para acceder a la lista de buzones virtuales de usuario:
Escribimos lo siguiente:
hosts = 127.0.0.1
user = postfix
password = admin #Reemplazar por la contraseña adecuada
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username=’%s’ AND active = 1
Tabla de aliases virtuale
Permite especificar aliases para direcciones de correo.
Creamos el archivo nano /etc/postfix/mysql/virtual_alias_maps.cf para acceder a la lista de aliases virtuales:
Escribimos lo siguiente:
hosts = 127.0.0.1
user = postfix
password = admin #Reemplazar por la contraseña adecuada
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address=’%s’ AND active = 1
Tabla de dominios hacia los que se acepta retransmitir
Lista de dominios y subdominios hacia los que este servidor acepta retransmitir correos. Es decir, correos que van dirigidos a otros sistemas que son aceptados para reenviárselos al servidor adecuado. Esto permite por ejemplo, a un servidor conectado a Internet, retransmitir correos hacia otro que se encuentra en una red interna. Aunque la utilidad más interesante estaría en que nuestro servidor pueda funcionar como sistema de respaldo admitiendo correos dirigidos a otro servidor principal mientras éste último se encuentre fuera de servicio. Más tarde, cuando el servidor principal vuelva a estar disponible, el servidor de respaldo le reenviará los correos. Para que este mecanismo funcione sería necesario asignar al servidor principal mayor prioridad que al servidor de respaldo en los registros MX del DNS.
Creamos el archivo con nano /etc/postfix/mysql/relay_domains.cf para acceder a la lista de dominios para los que se transmitirá correo:
Escribimos lo siguiente:
hosts = 127.0.0.1
user = postfix
password = admin #Reemplazar por la contraseña adecuada
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain=’%s’ and backupmx = 1
Configurar el servicio SMTP para requerir autenticación gestionada por SASL
Creamos el archivo nano /etc/postfix/sasl/smtpd.conf
Y con contenido será el siguiente:
pwcheck_method: saslauthd
mech_list: PLAIN LOGI
Añadimos el usuario postfix al grupo sasl:
adduser postfix sasl
Configurar Dovecot para usar los usuarios de la base de datos
A continuación debemos modificar una serie de archivos para que indicar a Dovecot que queremos autenticar a los usuarios con una base de datos de MySQL.
En primer lugar editamos el archivo /etc/dovecot/conf.d/10-auth.conf
Descomentamos una línea para indicar que se debe incluir el archivo de configuración auth-sql.conf.ext y comentamos auth-system.conf.ext
En el archivo /etc/dovecot/conf.d/auth-sql.conf.ext
Indicaremos a Dovecot el método para obtener la lista de usuarios y contraseñas:
userdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf
}
passdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf
}
Creamos el archivo /etc/dovecot/dovecot-mysql.conf
Pondremos el siguiente contenido con el que indicamos cómo consultar los datos de los usuarios:
driver = mysql
connect = host=127.0.0.1 dbname=postfixadmin user=postfix password=root
default_pass_scheme = MD5-CRYPT
user_query = SELECT ‘/home/vmail/%d/%n’ as home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = ‘%u’
password_query = SELECT password FROM mailbox WHERE username = ‘%u’
También nos hará falta modificar el archivo /etc/dovecot/conf.d/10-mail.conf
Vamos a indicar dónde se van a guardar los buzones, así como los UID y GID que tienen permitida la autenticación:
mail_location = maildir:/home/vmail/%d/%n/Maildir:INDEX=/home/vmail/%d/%n/Maildir/indexes
first_valid_uid = 5000
last_valid_uid = 5000
first_valid_gid = 5000
last_valid_gid = 5000
A continuación, en el archivo /etc/dovecot/conf.d/10-master.conf
Vamos hacer los siguientes cambios que permitirán a Postfix autenticar las conexiones SMTP a través de Dovecot (IMAP):
service auth {
#auth_socket_path points to this userdb socket by default. It’s typically
#used by dovecot-lda, doveadm, possibly imap process, etc. Its default
#permissions make it readable only by root, but you may need to relax these
#permissions. Users that have access to this socket are able to get a list
#of all usernames and get results of everyone’s userdb lookups.
unix_listener auth-userdb {
#mode = 0600
user = vmail
group = vmail
}
#Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
#Auth process is run as this user.
#user = $default_internal_use
}
Por último, cambiamos algunos datos necesarios en el archivo /etc/dovecot/conf.d/15-lda.conf
Nos conviene utilizar a Dovecot como agente de entrega de correo (MDA):
postmaster_address = postmaster@dom00.example.com
hostname = server.dom00.example.com
protocol lda {
#Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins
}
Configurar Postfix para que utilice a Dovecot como MDA
Editamos /etc/postfix/main.cf
Añadimos las opciones:
mailbox_command = /usr/lib/dovecot/deliver
mailbox_transport = dovecot
Editamos el archivo /etc/postfix/master.cf
Añadiremos un nuevo servicio para Dovecot:
dovecot unix – n n – – pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Configurar SASL para que autentique los usuarios a través de un servidor IMAP
Actualizamos el archivo /etc/default/saslauthd de la siguiente forma:
START=yes
#Autenticar con servidor IMAPyes
MECHANISMS=»rimap»
#Dirección del servidor IMAP
MECH_OPTIONS=»localhost»
OPTIONS=»-c -m /var/spool/postfix/var/run/saslauthd -r»
Reiniciar los servicios y comprobar la autenticación
Comprobamos la configuración de Postfix por si hay errores con postfix check
Reiniciamos los servicios:
service postfix restart
service dovecot restart
service saslauthd restart
Comprobamos que funciona la autenticación mediante SASL:
testsaslauthd -f /var/spool/postfix/var/run/saslauthd/mux -u misitio@misitio.com -p admin -s smtp
En caso de fallo, podemos intentar averiguar qué ocurre echando un vistazo al archivo de log tail /var/log/auth.log