Un servidor de correo es un sistema que gestiona el envío y la recepción correcta de correos electrónicos entre el remitente y el destinatario. Por ejemplo, cuando envías un correo desde Gmail, estás utilizando el servidor de correo de Google.
Un cliente de correo, en cambio, es un programa que permite leer, enviar y almacenar correos. Ejemplos comunes son Microsoft Outlook, Thunderbird y otros.
Choose your server now!
El servidor de salida utiliza el protocolo SMTP, siglas de Simple Mail Transfer Protocol.
Sus funciones principales son:
Verificar la configuración del remitente y permitir que el dispositivo envíe el mensaje.
Transmitir el correo y recibir el código de respuesta.
Los servidores SMTP usan los puertos 25 (sin cifrar) y 465 (cifrado).
POP3 es un protocolo para recibir correos electrónicos. Permite que el cliente de correo se conecte al servidor y descargue los mensajes al dispositivo local, haciéndolos accesibles incluso sin conexión. Normalmente, los correos se eliminan del servidor tras la descarga (aunque se puede conservar una copia).
POP3 usa los puertos 110 (sin cifrar) y 995 (con cifrado SSL/TLS).
Como POP3, IMAP sirve para recibir correos, pero permite gestionarlos directamente en el servidor sin descargarlos. Esto resulta útil si accedes al correo desde varios dispositivos.
IMAP usa los puertos 143 (sin cifrar) y 993 (con cifrado SSL/TLS).
La respuesta más habitual es:
“Para usar mi propio dominio en la dirección de correo.”
Es cierto, pero no del todo. Puedes usar tu dominio sin configurar un servidor propio: muchos servicios permiten vincular tu dominio a sus servidores. El mayor beneficio es que ya disponen de un SMTP configurado, con reenvíos, filtros antispam y cifrado. Solo necesitas definir correctamente los registros NS (Name Server), lo cual es mucho más simple que montar un servidor completo.
Sin embargo, los servicios de terceros presentan limitaciones:
Menor control: no podrás gestionar todos los aspectos del correo.
Límites de envío: cada proveedor impone un número máximo de correos por día o por hora. Si envías grandes volúmenes (por ejemplo, en entornos corporativos o newsletters), estos límites pueden ser problemáticos.
Si decides crear tu propio servidor, deberás ocuparte de:
Cuotas y límites de envío
Copias de seguridad
Evitar listas negras de spam
Permisos de acceso si hay varios usuarios
Un servidor de correo propio ofrece control total, pero exige mayor conocimiento técnico y responsabilidad.
En esta guía crearemos un servidor de correo en un servidor en la nube de Hostman, usando Ubuntu 20.04 como sistema operativo.
El servidor soportará cifrado, protección antispam y dispondrá de un panel web de administración para gestionar las cuentas.
Cambia al modo superusuario:
sudo su
Actualiza los paquetes:
apt update && apt upgrade
Verifica el nombre de host del servidor:
hostname
Si no coincide con el dominio deseado:
hostnamectl set-hostname mail.hostname.com
Configura la zona horaria e instala chrony para la sincronización de tiempo:
apt install chrony
timedatectl set-timezone Europe/Athens
Lista de zonas horarias disponibles:
timedatectl list-timezones
Habilita chrony:
systemctl enable chrony
Usa iptables para abrir los puertos:
25, 465 — SMTP (envío)
110, 995 — POP3 (recepción)
143, 993 — IMAP (recepción)
iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995,80,443 -j ACCEPT
Guarda las reglas para que sean persistentes:
netfilter-persistent save
Ahora, con el servidor correctamente configurado, podemos proceder a instalar el software necesario para crear un servidor de correo completamente funcional.
Postfix es un MTA (Mail Transfer Agent) de código abierto con arquitectura modular.
Instálalo junto al módulo de integración con MySQL:
apt install postfix postfix-mysql
Durante la instalación: Selecciona Internet Site y define tu FQDN.
Crea un usuario y grupo dedicados:
addgroup -gid 1080 vmail
A continuación, cree el usuario vmail y asigne el directorio de inicio a /home/mail:
adduser --home /home/mail -gid 1080 -uid 1080 vmail
Verifica los permisos:
ll /home
Edita el archivo de configuración:
nano /etc/postfix/main.cf
Agrega o modifica:
# Domains we accept mail for
mydestination = localhost.$mydomain, localhost, localhost.localdomain
# Postfix protocol
inet_protocols = ipv4
# Path to the public certificate
smtpd_tls_cert_file = /etc/ssl/mail/public.pem
# Path to the private certificate
smtpd_tls_key_file = /etc/ssl/mail/private.key
Then, add additional options required for Postfix to function correctly:
# Mail storage location
virtual_mailbox_base = /home/mail
# Path to alias maps
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# Domain storage format
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
# Mailbox storage format
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
# Minimum virtual user ID
virtual_minimum_uid = 1080
# UID for the main user handling mail
virtual_uid_maps = static:1080
# GID for the group handling mail
virtual_gid_maps = static:1080
# Register Dovecot as the mail delivery agent
virtual_transport = dovecot
# Enable secure authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# Enable TLS encryption for outgoing SMTP connections
smtp_use_tls = yes
# Enable TLS support for incoming connections
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
Alias:
nano /etc/postfix/mysql_virtual_alias_maps.cf
Añade el siguiente contenido:
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Dominios:
nano /etc/postfix/mysql_virtual_domains_maps.cf
Agregar:
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'
Buzones:
nano /etc/postfix/mysql_virtual_mailbox_maps.cf
Agregar:
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
Modificación de master.cf:
nano /etc/postfix/master.cf
Agrega:
submission inet n - n - - smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Crea el directorio:
mkdir -p /etc/ssl/mail
Genera los certificados:
openssl req -new -x509 -days 1000 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=CY/ST=Limassol/L=Limassol/O=Global Security/OU=IT Department/CN=mail.devnullhost.com"
Activa y reinicia Postfix:
systemctl enable postfix && systemctl restart postfix
Dovecot es un servidor IMAP y POP3 de código abierto.
Instálalo junto al módulo MySQL:
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Edita:
nano /etc/dovecot/conf.d/10-mail.conf
En el archivo, especifique la estructura de directorios para almacenar el correo. Usaremos una jerarquía de dominio → usuario:
mail_location = maildir:/home/mail/%d/%u/
Configuración de sockets:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
}
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Edite el archivo de configuración de autenticación de Dovecot:
nano /etc/dovecot/conf.d/10-auth.conf
Reemplace la línea !include auth-system.conf.ext con !include auth-sql.conf.ext, lo que indica que se debe utilizar la autenticación basada en SQL.
Cifrado SSL:
nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key
Creación automática de buzones:
nano /etc/dovecot/conf.d/15-lda.conf
Añade la siguiente línea:
lda_mailbox_autocreate = yes
Conexión a MySQL:
nano /etc/dovecot/dovecot-sql.conf.ext
Agregue las siguientes líneas para configurar MySQL:
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfixPa$$w0rd
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u'
Abra el archivo de configuración principal de Dovecot para configurar la interfaz del servidor:
nano /etc/dovecot/dovecot.conf
En este archivo, agregue la siguiente línea para escuchar en todas las interfaces de red disponibles:
listen = *
Habilita y reinicia Dovecot:
systemctl enable dovecot && systemctl restart dovecot
Requisitos: servidor web, PHP y MySQL.
Instala las extensiones PHP necesarias:
apt install php-mysql php-mbstring php-imap
Descarga PostfixAdmin:
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
Cree un directorio para PostfixAdmin y extraiga el contenido del archivo:
mkdir -p /var/www/html/postfixadmin && tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1
Luego, crea un directorio para almacenar cachés de plantillas:
mkdir /var/www/html/postfixadmin/templates_c
Establezca los permisos correctos para que el servidor web acceda al directorio PostfixAdmin:
chown -R www-data:www-data /var/www/html/postfixadmin
Crea la base de datos:
mysql -u root
CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfixPa$$w0rd';
exit;
Configura PostfixAdmin:
nano /var/www/html/postfixadmin/config.local.php
El contenido del archivo debe ser:
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'en';
$CONF['database_password'] = 'postfixPa$$w0rd';
$CONF['emailcheck_resolve_domain']='NO';
?>
Abre /postfixadmin/public/setup.php, genera el hash de contraseña, insértalo en el archivo y accede a /postfixadmin/public/login.php.
nano /var/www/html/postfixadmin/config.local.php
Actualice la página /postfixadmin/public/setup.php e inicie sesión con la contraseña que usó para generar el hash. Si todo está configurado correctamente, debería ver una página de comprobación de la configuración.
Al final de esta página, encontrará un formulario para crear una cuenta de administrador. Tras crearla correctamente, vaya a /postfixadmin/public/login.php e inicie sesión con las credenciales que acaba de configurar.
Será redirigido al panel de administración de PostfixAdmin.
Desde el panel web:
Domain List → New Domain
Luego Overview → Create Mailbox
Parámetros de conexión en el cliente de correo:
Server: El nombre de host de su servidor
IMAP: Port 143, STARTTLS
POP3: Port 110, STARTTLS
SMTP: Port 25, STARTTLS
Login and Password: Las credenciales que especificó al crear el buzón
Choose your server now!
En esta guía vimos cómo crear un servidor de correo autogestionado y configurarlo completamente. Un servidor propio te da control total: puedes crear buzones ilimitados, alias y gestionar usuarios libremente.
Todo esto es posible en un servidor en la nube de Hostman, siguiendo paso a paso esta guía para obtener un sistema de correo seguro y funcional.