Servidor de correo · 14 min read · Nov 06, 2025
Cómo crear un servidor de correo completo utilizando Postal
Postal es un servidor de correo completo, gratuito y de código abierto para enviar y recibir correos electrónicos. Está escrito en Ruby y JavaScript. Puedes instalar Postal fácilmente en tu propio servidor. También te ayuda a proporcionar la información DNS correcta necesaria para reducir los correos electrónicos de spam. Postal es utilizado por muchas organizaciones para enviar y recibir correos a diario.
En este tutorial, instalaremos el servidor de correo Postal en Ubuntu 17.04.
Requisitos previos
- Servidor Ubuntu 17.04 mínimo. Se recomiendan 8 GB de RAM.
- Privilegios de root. Esta guía está escrita como el usuario root, si has iniciado sesión como usuario sudo, ejecuta sudo -i.
- un nombre de dominio apuntando hacia tu servidor.
Actualizar el sistema base
Antes de instalar cualquier paquete, se recomienda que actualices los paquetes y el repositorio utilizando el siguiente comando.
apt update && apt -y upgradeshutdown -r nowUna vez que tu sistema esté actualizado, procede a instalar Ruby.
Instalar Ruby
Postal está escrito en Ruby, por lo tanto, es necesario instalar Ruby 2.3 o superior en tu sistema. En este tutorial, instalaremos la última versión de Ruby utilizando RVM. Ejecuta el siguiente comando para agregar la clave GPG de RVM en tu servidor.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3Ahora instala RVM utilizando el siguiente comando.
curl -sSL https://get.rvm.io | bash -s stablePara usar RVM de inmediato, necesitarás ejecutar el siguiente comando.
source /etc/profile.d/rvm.shAhora obtén la lista de Ruby utilizando el siguiente comando.
rvm list knownVerás la siguiente salida:
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head
Ahora instala la última versión de Ruby en la lista utilizando el siguiente comando.
rvm install 2.4Usa la versión de Ruby utilizando el siguiente comando.
rvm use 2.4Puedes verificar la versión de Ruby utilizando el siguiente comando.
ruby -vDeberías ver la siguiente salida si Ruby se ha instalado correctamente.
root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
Instalar Ruby Gems
Para ejecutar Postal en tu servidor, necesitarás instalar bundler y procodile en tu servidor. bundler es un gestor de dependencias para aplicaciones Ruby gem. procodile es una herramienta de gestión de procesos para aplicaciones Ruby. Instala ambas aplicaciones utilizando los siguientes comandos.
gem install bundlergem install procodileInstalar el servidor de base de datos MariaDB
MariaDB es un fork del servidor de base de datos MySQL. MySQL es un software de sistema de gestión de bases de datos relacional utilizado para almacenar datos en formato tabular. Para instalar MariaDB en tu servidor, ejecuta:
apt -y install mariadb-client mariadb-server libmysqlclient-devEjecuta los siguientes comandos para iniciar MariaDB y habilitarlo para que se inicie al arrancar.
systemctl start mariadbsystemctl enable mariadbAhora ejecuta los siguientes comandos para asegurar tu instalación de MariaDB.
mysql_secure_installationEl comando anterior ejecutará un script para asegurar la nueva instalación de MariaDB. El script te pedirá la contraseña del usuario root existente, como acabamos de instalar MariaDB, la contraseña de root no está establecida, simplemente presiona enter para continuar.
El script te preguntará si deseas establecer una contraseña de root para tu instalación de MariaDB, elige y establece una contraseña fuerte para la instalación. La mayoría de las preguntas son autoexplicativas y deberías responder sí o y a todas las preguntas.
Configurar la base de datos para Postal
Para crear una base de datos para Postal, primero necesitaremos iniciar sesión en la línea de comandos de MySQL. Ejecuta el siguiente comando para ello.
mysql -u root -pEl comando anterior iniciará sesión en el shell de MySQL del usuario root, te pedirá la contraseña del usuario root. Proporciona la contraseña para iniciar sesión. Ahora ejecuta la siguiente consulta para crear una nueva base de datos para tu instalación de Postal.
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;La consulta anterior creará una nueva base de datos llamada postal. Asegúrate de usar un punto y coma al final de cada consulta, ya que la consulta siempre termina con un punto y coma.
Ahora proporciona todos los privilegios a tu usuario de base de datos sobre la base de datos que has creado. Ejecuta el siguiente comando.
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Reemplaza StrongPassword con una contraseña muy fuerte y segura.
La base de datos será escrita automáticamente por Postal, pero para eso, necesitaremos proporcionar los permisos apropiados a los usuarios de Postal. Ejecuta el siguiente comando para proporcionar privilegios a todos los usuarios que comienzan con postal-.
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Ahora ejecuta el siguiente comando para aplicar inmediatamente los cambios en los privilegios de la base de datos.
FLUSH PRIVILEGES;Sal del aviso de MySQL utilizando el siguiente comando.
EXIT;Instalar RabbitMQ
RabbitMQ está escrito en el lenguaje Erlang, en este tutorial instalaremos la última versión de Erlang en el servidor. Instala Erlang utilizando el siguiente comando.
apt -y install erlangImporta la clave GPG ejecutando:
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -Ahora agrega el repositorio de RabbitMQ ejecutando el siguiente comando:
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'Actualiza el índice del repositorio ejecutando el siguiente comando.
apt updateAhora puedes instalar RabbitMQ ejecutando el siguiente comando.
apt -y install rabbitmq-serverRabbitMQ ahora está instalado en tu sistema.
Configurar RabbitMQ
Puedes iniciar el proceso del servidor RabbitMQ ejecutando el siguiente comando.
systemctl start rabbitmq-serverPara iniciar RabbitMQ automáticamente al arrancar, ejecuta el siguiente comando.
systemctl enable rabbitmq-serverAhora ejecuta el siguiente comando para crear un host virtual para Postal en el servidor RabbitMQ.
rabbitmqctl add_vhost /postalAhora agrega un usuario de RabbitMQ para Postal ejecutando el siguiente comando.
rabbitmqctl add_user postal StrongPasswordReemplaza StrongPassword con una contraseña muy fuerte.
Ahora establece los permisos apropiados en el host virtual de RabbitMQ para el usuario de RabbitMQ.
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"Instalar Git y Node.js
Git se utilizará para recuperar el paquete instalador y algunas dependencias. Ejecuta el siguiente comando para instalar Git en tu sistema.
apt -y install gitPuedes verificar si Git se ha instalado correctamente comprobando la versión utilizando el siguiente comando.
git --versionDeberías obtener la siguiente salida.
root@ubuntu:~# git --version
git version 2.11.0
Node.js se utilizará para compilar la biblioteca de JavaScript. Instala el software utilizando el siguiente comando.
apt -y install nodejsPuedes verificar si Node.js se ha instalado correctamente ejecutando el siguiente comando.
nodejs -vDeberías obtener la siguiente salida.
root@ubuntu:~# nodejs -v
v4.7.2Ahora que tenemos todas las dependencias listas, puedes instalar Postal.
Instalar Postal
Postal debe ejecutarse como su propio usuario aislado. Ejecuta el siguiente comando para crear un nuevo usuario.
useradd -r -m -d /opt/postal -s /bin/bash postalEl comando anterior creará un nuevo usuario con el nombre de usuario postal y el directorio home se establece en /opt/postal.
Permite que Ruby escuche en puertos privilegiados ejecutando el siguiente comando.
setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/rubyAhora que todo está listo, descarga el último archivo comprimido de Postal y extrae el archivo como el usuario Postal utilizando el siguiente comando.
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postalAhora crea un enlace simbólico al archivo binario de Postal ejecutando el siguiente comando.
ln -s /opt/postal/bin/postal /usr/bin/postalAhora puedes interactuar con tu servidor Postal desde cualquier directorio. Para ejecutar los siguientes comandos necesitarás iniciar sesión en la shell como usuario postal.
su - postalAhora necesitarás instalar todas las dependencias de Ruby requeridas para ejecutar la aplicación.
postal bundle /opt/postal/vendor/bundleUna vez que se hayan instalado las dependencias, necesitarás generar los archivos de configuración predeterminados.
postal initialize-configEl comando anterior generará la configuración requerida para tu instalación de Postal, incluidos varios claves y certificados. Esto también generará el archivo de configuración postal.yml predeterminado. Deberías obtener la siguiente salida.
postal@ubuntu:~$ postal initialize-config
Created example config file at /opt/postal/config/postal.yml
Created new private key for Let's Encrypt
Created new signing key for DKIM & HTTP requests
Created new private key for default fast server TLS connections
Created new self signed certificate for default fast server TLS connections
Ahora necesitarás configurar algunas opciones en el archivo de configuración postal.yml.
nano /opt/postal/config/postal.ymlEncuentra la siguiente línea:
web:
# El host que estará disponible la interfaz de gestión
host: postal.example.com
Cambia el nombre de host por tu nombre de dominio real. Además, encuentra las siguientes líneas.
main_db:
# Especifica los detalles de conexión para tu base de datos MySQL
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
database: postal
message_db:
# Especifica los detalles de conexión para tu servidor MySQL que albergará las
# bases de datos de mensajes para servidores de correo.
host: 127.0.0.1
username: postal
password: p0stalpassw0rd
prefix: postal
Cambia el nombre de usuario, la contraseña y el nombre de la base de datos de acuerdo con la base de datos que has creado. Además, encuentra estas líneas:
rabbitmq:
# Especifica los detalles de conexión para tu servidor RabbitMQ.
host: 127.0.0.1
username: postal
password: StrongPassword
vhost: /postal
Cambia la configuración anterior de acuerdo con el vhost y el usuario creado para RabbitMQ. A continuación, encuentra las configuraciones DNS.
dns:
# Especifica el registro DNS que has configurado. Consulta la documentación en
# https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration para más
# información sobre esto.
mx_records:
- mx.postal.example.com
smtp_server_hostname: postal.example.com
spf_include: spf.postal.example.com
return_path: rp.postal.example.com
route_domain: routes.postal.example.com
track_domain: track.postal.example.com
Cambia los dominios anteriores por los dominios reales que deseas usar con el servidor de correo.
Guarda el archivo y sal del editor. Ahora, inicializa la base de datos y otros activos ejecutando:
postal initializeCrea el usuario administrador de Postal ejecutando el siguiente comando.
postal make-userEl comando anterior te pedirá la dirección de correo electrónico, el nombre de usuario y la contraseña. El comando anterior generará la siguiente salida.
postal@ubuntu:~$ postal make-user
Postal User Creator
Enter the information required to create a new Postal user.
This tool is usually only used to create your initial admin user.
E-Mail Address : [email protected]
First Name : Liptan
Last Name : Biswas
Initial Password: : **************
User has been created with e-mail address [email protected]
La configuración de la línea de comandos de Postal ahora está terminada, puedes iniciar el servidor utilizando el siguiente comando.
postal startPara verificar si los servicios se han iniciado correctamente, ejecuta el siguiente comando.
postal statusDeberías obtener la siguiente salida.
postal@ubuntu:~$ postal status
Procodile Version 1.0.17
Application Root /opt/postal
Supervisor PID 5319
Started 2017-07-21 07:26:19 +0000
|| web
|| Quantity 1
|| Command bundle exec puma -C config/puma.rb
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => web.1 Running 07:26 pid:5325 respawns:0 port:- tag:-
|| worker
|| Quantity 1
|| Command bundle exec ruby script/worker.rb
|| Respawning 5 every 3600 seconds
|| Restart mode start-term
|| Log path none specified
|| Address/Port none
|| => worker.1 Running 07:26 pid:5327 respawns:0 port:- tag:-
|| cron
|| Quantity 1
|| Command bundle exec rake postal:cron
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => cron.1 Running 07:26 pid:5329 respawns:0 port:- tag:-
|| smtp
|| Quantity 1
|| Command bundle exec rake postal:smtp_server
|| Respawning 5 every 3600 seconds
|| Restart mode usr1
|| Log path none specified
|| Address/Port none
|| => smtp.1 Running 07:26 pid:5332 respawns:0 port:- tag:-
|| requeuer
|| Quantity 1
|| Command bundle exec rake postal:requeuer
|| Respawning 5 every 3600 seconds
|| Restart mode term-start
|| Log path none specified
|| Address/Port none
|| => requeuer.1 Running 07:26 pid:5334 respawns:0 port:- tag:-
Para detener Postal, siempre puedes ejecutar el siguiente comando.
postal stopConfigurando Nginx como proxy inverso
Por razones de seguridad, la interfaz web y la API de Postal deben estar detrás de cualquier servidor web de producción como Apache o Nginx. En este tutorial, instalaremos y configuraremos Nginx como un proxy inverso.
Instala el servidor web Nginx ejecutando el siguiente comando.
apt -y install nginxSe recomienda usar SSL para acceder a Nginx. Puedes usar un certificado autofirmado o el certificado SSL gratuito de Let’s Encrypt o un certificado comercial. En este tutorial, utilizaremos el SSL gratuito de Let’s Encrypt.
Instala el cliente de Let’s Encrypt también conocido como certbot ejecutando el siguiente comando.
apt -y install certbotUna vez que finalice la instalación, ejecuta el siguiente comando para obtener certificados de la autoridad de certificación de Let’s Encrypt. Asegúrate de que el nombre de dominio esté apuntando hacia tu servidor, ya que certbot verificará la autoridad del dominio antes de proporcionar los certificados. Reemplaza mail.example.com con tu nombre de dominio real.
certbot certonly --standalone -d mail.example.comUna vez que se generen los certificados, se almacenarán en /etc/letsencrypt/live/mail.example.com.
El SSL de Let’s Encrypt expira en 90 días, por lo que se recomienda establecer una renovación automática para tus certificados. Ejecuta el siguiente comando para abrir tu archivo crontab.
crontab -eIngresa la siguiente línea en el archivo crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.logEl trabajo cron anterior se ejecutará automáticamente todos los lunes a la 1:30 AM y si tus certificados están a punto de expirar, se renovará automáticamente.
Ahora crea un nuevo bloque de servidor para tu sitio web ejecutando el siguiente comando.
nano /etc/nginx/conf.d/mail.example.com.confPuebla el archivo con el siguiente contenido.
server {
listen [::]:80;
listen 0.0.0.0:80;
server_name mail.example.com;
return 301 https://$host$request_uri;
}
server {
listen [::]:443 ssl;
listen 0.0.0.0:443 ssl;
root /opt/postal/public;
server_name mail.example.com;
ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
location / {
client_max_body_size 50M;
try_files $uri $uri/index.html $uri.html @puma;
}
location /assets {
add_header Cache-Control max-age=3600;
}
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://127.0.0.1:5000;
}
}
Guarda el archivo y sal del editor. Ahora reinicia el servidor web nginx ejecutando.
systemctl restart nginxPara habilitar nginx para que se inicie automáticamente al arrancar, ejecuta el siguiente comando.
systemctl enable nginxAhora puedes acceder a Postal navegando por el siguiente sitio web a través de tu navegador web favorito.
https://mail.example.comConfigurando Postal
Una vez que navegues al sitio anterior, verás la siguiente interfaz.

Ingresa la dirección de correo electrónico y la contraseña del usuario que creaste anteriormente. Una vez que hayas iniciado sesión, se te pedirá que crees una nueva organización.

Proporciona el nombre de la organización. Puedes optar por usar el nombre corto generado automáticamente, o puedes especificar uno tú mismo. Los nombres cortos se utilizan como nombre de usuario al autenticarte con el servidor SMTP. Debe contener solo letras, números y guiones.

Una vez que se haya creado la organización, se te pedirá que crees un nuevo servidor de correo.

Proporciona el nombre, el nombre corto y el modo del servidor de correo. En modo en vivo, todos los correos electrónicos se enrutan y se entregan normalmente, pero en modo de desarrollo, solo son visibles en la interfaz web.

Una vez que hayas agregado el servidor de correo, necesitarás agregar un nuevo dominio en el servidor de correo. Haz clic en la pestaña Dominios y crea un nuevo nombre de dominio.

Una vez que hayas agregado el nombre de dominio, necesitarás configurar el DNS para el dominio. Necesitarás agregar dos registros TXT para SPF y DKIM. También necesitarás agregar un registro CNAME y un registro MX para la ruta de retorno y la entrega de correo. Una vez que configures el DNS, haz clic en el botón Verificar que mis registros son correctos para verificar la configuración del DNS.

Ahora necesitarás crear unas credenciales SMTP para enviar y recibir correos electrónicos.

Elige el tipo como SMTP o API. Proporciona el nombre para las credenciales SMTP, elige cómo deseas manejar la dirección de correo electrónico.
Una vez hecho esto, puedes volver a la pestaña Resumen y verás la información necesaria para enviar o recibir la dirección de correo electrónico.

Conclusión
En este tutorial, hemos configurado con éxito un servidor de correo completo utilizando Postal en Ubuntu 17.04. Puedes usar el servidor de correo para enviar y recibir los correos electrónicos de tu organización.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.