Introducción
En Ubuntu 20.04, puede utilizar herramientas como Postfix, Dovecot, MySQL, y SpamAssassin para configurar un servidor de correo. El proceso puede resultar confuso para alguien que lo intenta por primera vez. Este tutorial tiene como objetivo simplificar el proceso de configuración del servidor de correo con pasos detallados. Al final de este tutorial, sabrá cómo agregar dominios virtuales, usuarios y alias. En última instancia, hará que su servidor virtual sea más seguro frente a los centros de spam.
Requisitos previos
Antes de comenzar con la configuración del servidor de correo, hay algunos requisitos previos que debe tener en cuenta. Primero, asegúrese de que su servidor privado virtual tenga un dominio que esté apuntando a su servidor. También necesita instalar y configurar MySQL. Además, debe tener un usuario con privilegios de root concedidos e instalar un certificado SSL. Finalmente, asegúrese de que su FQDN esté configurado e identificado.
Si instala sus paquetes como usuario root, tendrá todos los privilegios. Por eso lo recomendamos:
|
1 |
sudo -i |
Introduzca la contraseña de su usuario. En este punto, verá que el símbolo $ cambia a #. A continuación, exploremos los diferentes aspectos de la configuración uno por uno.
Paso 1: Instalación de paquetes
Comenzaremos aprendiendo cómo instalar paquetes:
|
1 |
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql |
Cuando aparezca la configuración de Postfix, seleccione Sitio de Internet:

Se le preguntará sobre el nombre de correo del sistema. Aquí, puede utilizar el FQDN o el dominio principal:

Paso 2: Creación de una base de datos MySQL, dominios virtuales, usuarios y alias
A continuación, una vez instalados todos los paquetes, continuaremos con la configuración. Nuestro objetivo es configurar tres tablas. Una será para los dominios, otra para los usuarios y otra para los alias. Estas se alojarán en una base de datos MySQL que crearemos.
Supongamos que queremos llamar a nuestra base de datos servermail. Es libre de utilizar el nombre que elija. Así es como la crearemos:
|
1 |
mysqladmin -p create servermail |
Debe iniciar sesión como usuario root de MySQL:
|
1 |
mysql -u root -p |
A continuación, introduzca su contraseña. Si el intento es exitoso, se mostrará este resultado:
|
1 |
mysql > |
A continuación, crearemos un nuevo usuario para la autenticación de correo en particular. Otorgue el permiso SELECT de esta manera:
|
1 |
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword'; |
Después de eso, recargue sus privilegios de MySQL para aplicar los permisos correctamente:
|
1 |
mysql > FLUSH PRIVILEGES; |
A continuación, utilizaremos nuestra base de datos para crear las tablas e introducir los datos:
|
1 |
mysql> USE servermail; |
Crearemos tablas individuales para los dominios específicos que se reconocen como dominios autorizados:
|
1 2 3 4 5 |
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
El objetivo es introducir usuarios a la tabla. Por lo tanto, agregaremos la dirección de correo electrónico y la contraseña correspondientes. Tenga en cuenta que debe asociar cada usuario con un dominio:
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
A continuación, crearemos una tabla para todos nuestros alias virtuales para especificar todos los correos electrónicos que redirigiremos al otro correo electrónico:
|
1 2 3 4 5 6 7 8 |
CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Al final de este proceso, habrá creado con éxito tres tablas. A continuación, tenemos que introducir los datos.
-
Dominios virtuales
En esta sección, aprenderemos cómo introducir dominios dentro de la tabla
virtual_domains . Específicamente, nos centraremos en cómo introducir el dominio principal (example.com) y el FQDN (hostname.example.com):
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'); |
-
Correos electrónicos virtuales
A continuación, introduzca la dirección de correo electrónico y las contraseñas asociadas para cada uno de los dominios. Asegúrese de cambiar toda la información con su información específica:
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com'); |
-
Alias virtuales
Ahora puede introducir la dirección de correo electrónico a la que redirigirá la otra dirección de correo electrónico. La primera es el origen mientras que la segunda es el destino:
|
1 2 3 4 |
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com'); |
Luego, puede salir de MySQL:
|
1 |
mysql > exit |
Step 3: Configuring Postfix
Es importante configurar Postfix para que pueda gestionar las conexiones SMTP. También tiene que ser capaz de enviar los mensajes para todos los usuarios introducidos en la base de datos MySQL. Comencemos haciendo una copia del archivo predeterminado. Esto es para que pueda volver fácilmente a la configuración predeterminada si es necesario y cuando lo sea:
|
1 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig |
Ahora abra el archivo main.cf para modificarlo:
|
1 |
nano /etc/postfix/main.cf |
Comience comentando los parámetros TLS y luego agregue cualquier otro parámetro. En nuestro ejemplo, estamos utilizando los certificados SSL gratuitos. Por supuesto, puede cambiar la configuración según sus requisitos:
|
1 2 3 4 5 6 7 8 9 10 11 |
# Parámetros TLS #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes |
A continuación, agregará estos parámetros debajo de la configuración de TLS:
|
1 2 3 4 5 6 7 |
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination |
Después de eso, tenemos que comentar la configuración por defecto de mydestination. Luego, lo reemplazaremos con localhost. Con este cambio, el VPS podrá utilizar los dominios virtuales en la tabla MySQL:
|
1 2 |
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost |
Ahora use este comando para verificar que el parámetro myhostname está configurado en su FQDN:
|
1 |
myhostname = hostname.example.com |
Además, añada esta línea para activar la entrega de correo local a todos los dominios virtuales listados en la tabla:
|
1 |
virtual_transport = lmtp:unix:private/dovecot-lmtp |
Por último, añadiremos los siguientes parámetros para indicarle a Postfix que configure los dominios, usuarios y alias virtuales:
|
1 2 3 |
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Para asegurarse de que no haya errores, compare estos cambios con el siguiente archivo:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
Once all of that is checked, you will create three files to append in the main.cf. El objetivo aquí es dar instrucciones a Postfix sobre cómo conectarse con MySQL. Para hacer esto, comenzaremos creando el archivo mysql-virtual-mailbox-domains.cf. Por supuesto, en su archivo, realizará los cambios según su configuración personal:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-domains.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s' |
A continuación, reinicie Postfix:
|
1 |
service postfix restart |
Debe asegurarse de que Postfix sea capaz de encontrar su dominio. Para probar esto, use este comando:
|
1 |
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf |
El comando devolverá 1 si tiene éxito. En este caso, puede proceder creando el archivo mysql-virtual-mailbox-maps.cf :
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s' |
Reinicie Postfix una vez más:
|
1 |
service postfix restart |
Nuevamente, nos aseguraremos de que Postfix sea capaz de encontrar la primera dirección de correo electrónico. Para probar esto, use el siguiente comando:
|
1 |
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf |
Si tiene éxito, obtendrá un resultado de 1 a cambio. Por lo tanto, pasaremos a crear el último archivo:
|
1 |
nano /etc/postfix/mysql-virtual-alias-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s' |
Esto completa la configuración entre Postfix y MySQL. Reinicie Postfix para aplicar:
|
1 |
service postfix restart |
Para confirmar que Postfix realmente está encontrando sus alias, use este comando:
|
1 |
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Idealmente, debería recibir el correo que se reenvía al alias como salida. También puede modificar el /etc/postfix/master.cf archivo de esta manera si desea conectar el puerto 587 con clientes de correo electrónico de forma segura:
|
1 |
nano /etc/postfix/master.cf |
Aquí se explica cómo descomentar ciertas líneas y agregar parámetros:
|
1 2 3 4 5 |
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject |
A veces, es posible que deba reiniciar Postfix para confirmar que el puerto está abierto:
|
1 |
service postfix restart |
Esta herramienta también se puede utilizar para escanear los puertos del dominio. Puede usarla para verificar que los puertos 25 y 587 estén abiertos.
Paso 4: Configuración de Dovecot
Ahora es el momento de configurar Dovecot. Para esta sección, tendremos que copiar los 7 archivos que desea modificar. Esto es para asegurar que pueda revertir los cambios si es necesario. Ingrese este comando uno por uno:
|
1 2 3 4 5 6 |
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig |
Tiene que editar el archivo de configuración de Dovecot:
|
1 |
nano /etc/dovecot/dovecot.conf |
Asegúrese de que la opción esté descomentada:
|
1 |
!include conf.d/*.conf |
A continuación, habilitaremos los protocolos debajo de la línea
!include_try /usr/share/dovecot/protocols.d/*.protocol . Si lo desea, también puede agregar pop3:
|
1 2 |
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp |
Para asegurarse de que no haya errores, compárelo con este archivo:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
A continuación, edite el archivo de configuración de correo:
|
1 |
nano /etc/dovecot/conf.d/10-mail.conf |
Busque la línea mail_location . Debe descomentarla y agregar este parámetro:
|
1 |
mail_location = maildir:/var/mail/vhosts/%d/%n |
Después de eso, busque la línea mail_privileged_group . Nuevamente, descoméntela y agregue el parámetro mail:
|
1 |
mail_privileged_group = mail |
Para eliminar cualquier posibilidad de errores, compárelo con este archivo:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
-
Verificación de permisos
Para verificar los permisos, use este comando:
|
1 |
ls -ld /var/mail |
Asegúrese de que sus permisos se muestren de la siguiente manera:
|
1 |
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail |
Puede crear una carpeta para cada dominio. Todas estas carpetas se registrarán en la tabla MySQL:
|
1 |
mkdir -p /var/mail/vhosts/example.com |
Cree un usuario y grupo vmail usando un id de 5000:
|
1 2 |
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail |
A continuación, debe cambiar el propietario de la carpeta /var/mail al usuario vmail:
|
1 |
chown -R vmail:vmail /var/mail |
Ahora edite el archivo /etc/dovecot/conf.d/10-auth.conf :
|
1 |
nano /etc/dovecot/conf.d/10-auth.conf |
Añada la siguiente línea después de descomentar la autenticación de texto plano:
|
1 |
disable_plaintext_auth = yes |
Utilice esto para modificar el auth_mechanisms parámetro:
|
1 |
auth_mechanisms = plain login |
Ahora comente esta línea:
|
1 |
#!include auth-system.conf.ext |
Para habilitar la autorización de MySQL, tiene que descomentar la siguiente línea:
|
1 |
!include auth-sql.conf.ext |
Para detectar y editar errores, utilice el siguiente archivo:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
Crear un archivo /etc/dovecot/dovecot-sql.conf.ext con su información le permitirá autenticarse:
|
1 |
nano /etc/dovecot/conf.d/auth-sql.conf.ext |
Introduzca este código en el archivo:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } |
Utilizaremos nuestra información personalizada de MySQL para modificar el archivo /etc/dovecot/dovecot-sql.conf.ext :
|
1 |
nano /etc/dovecot/dovecot-sql.conf.ext |
Establezca MySQL como parámetro después de descomentar el parámetro driver de esta manera:
|
1 |
driver = mysql |
Puede introducir su información específica de MySQL descomentando la línea connect :
|
1 |
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword |
Ahora tiene que descomentar la línea default_pass_scheme y cambiarla a SHA-512:
|
1 |
default_pass_scheme = SHA512-CRYPT |
Añada la siguiente información después de descomentar password_query:
|
1 |
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; |
Para detectar errores, utilice este archivo para comparar:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
A continuación, puede cambiar el propietario y el grupo de la carpeta dovecot al usuario vmail:
|
1 2 |
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot |
El siguiente paso es modificar el archivo /etc/dovecot/conf.d/10-master.conf . Debe tener mucho cuidado aquí, ya que se cambiarán diferentes parámetros:
|
1 |
nano /etc/dovecot/conf.d/10-master.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
##Descomente inet_listener_imap y modifique al puerto 0 service imap-login { inet_listener imap { port = 0 } #Cree el socket LMTP y estas configuraciones service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # Evite hacer que LMTP sea visible para todo Internet #address = #port = #} } |
Utilice el siguiente código para cambiar el parámetro unix_listener a service_auth:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot } |
A continuación, tiene que editar service auth-worker así:
|
1 2 3 4 5 6 |
servicio auth-worker { # El proceso auth worker se ejecuta como root por defecto, para que pueda acceder a # /etc/shadow. Si esto no es necesario, el usuario debería cambiarse a # $default_internal_user. usuario = vmail } |
Detecte errores comparando con este archivo:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
El siguiente paso es modificar el archivo de configuración SSL de Dovecot. Si planea usar la configuración predeterminada, puede omitir este paso e ir a la siguiente sección:
|
1 |
# nano /etc/dovecot/conf.d/10-ssl.conf |
A continuación, cambie el ssl parámetro a required de esta manera:
|
1 |
ssl = required |
También modificaremos la ruta para ambos ssl_cert y ssl_key:
|
1 2 |
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem |
Reinicie Dovecot:
|
1 |
service dovecot restart |
Asegúrese de verificar que el puerto 993 esté abierto. Si ha habilitado pop3, entonces también verifique el puerto 995:
|
1 |
telnet example.com 993 |
Si ha completado los pasos hasta este punto, ¡felicitaciones! Ha configurado su servidor de correo con éxito. Para asegurarse de haber realizado todos los pasos correctamente, puede probar su cuenta con la ayuda de un cliente de correo electrónico como este:
|
1 2 3 4 |
- Nombre de usuario: email1@example.com - Contraseña: email1's contraseña - IMAP: example.com - SMTP: example.com |
El puerto 993 se utiliza para IMAP seguro y el puerto 587/puerto 25 para SMTP.
Paso 5: Configuración de SpamAssassin
Finalmente hemos llegado a la última sección del tutorial donde configuraremos SpamAssassin. Comenzaremos instalando SpamAssassin:
|
1 |
apt-get install spamassassin spamc |
Cree un usuario para SpamAssassin de esta manera:
|
1 |
adduser spamd --disabled-login |
Debe abrir y modificar los ajustes de configuración para poder configurar SpamAssassin:
|
1 |
nano /etc/default/spamassassin |
Ahora que está aquí, debe cambiar el ENABLED parámetro para habilitar el demonio de SpamAssassin:
|
1 |
ENABLED=1 |
Modifique los parámetros home y options con este código:
|
1 2 |
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" |
Use esta línea para especificar el PID_File parámetro:
|
1 |
PIDFILE="${SPAMD_HOME}spamd.pid" |
A continuación, use este comando para indicar que las reglas de SpamAssassin se actualizarán automáticamente:
|
1 |
CRON=1 |
Verifique si hay errores comparando con el siguiente documento:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
Si desea configurar las reglas anti-spam, debe abrir el /etc/spamassassin/local.cf archivo de nuevo:
|
1 |
nano /etc/spamassassin/local.cf |
La forma en que funciona SpamAssassin es que califica cada correo recibido por el usuario. Evalúa las puntuaciones de los correos electrónicos y, si es superior a 5.0 en su control de spam, el correo se marca como spam. Aquí están los parámetros que puede usar para configurar estas reglas anti-spam:
|
1 2 3 4 5 6 7 8 9 10 |
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0 |
Una vez configuradas las reglas anti-spam, debe indicarle a Postfix que cada correo electrónico debe ser verificado con SpamAssassin. Para este propósito, necesitamos modificar el /etc/postfix/master.cf archivo:
|
1 |
nano /etc/postfix/master.cf |
Busque la siguiente línea y agregue el spamassassin filtro:
|
1 2 |
smtp inet n - - - - smtpd -o content_filter=spamassassin |
Ahora puede añadir estos parámetros:
|
1 2 3 |
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} |
Finalmente, inicie SpamAssassin y reinicie Postfix para aplicar los cambios. Cuando vuelva a iniciar, Postfix comenzará a verificar el spam de los correos electrónicos:
|
1 2 |
service spamassassin start service postfix restart |
¡Y eso es todo! Ha configurado con éxito su servidor de correo con Postfix y Dovecot. También realizó la autenticación MySQL y configuró el filtrado de spam con SpamAssassin.
Conclusión
Este tutorial describe los pasos que debe seguir para realizar la configuración de su servidor de correo con las herramientas mencionadas anteriormente. Podría utilizarse como una guía completa para que configure su servidor de correo de forma independiente. Si está interesado en utilizar la función de servidor SMTP de Google, siga este tutorial.
¡Feliz informática!
Comentarios
Aún no hay comentarios. Sea el primero.