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 upgrade
shutdown -r now

Una 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 409B6B1796C275462A1703113804BB82D39DC0E3

Ahora instala RVM utilizando el siguiente comando.

curl -sSL https://get.rvm.io | bash -s stable

Para usar RVM de inmediato, necesitarás ejecutar el siguiente comando.

source /etc/profile.d/rvm.sh

Ahora obtén la lista de Ruby utilizando el siguiente comando.

rvm list known

Verá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.4

Usa la versión de Ruby utilizando el siguiente comando.

rvm use 2.4

Puedes verificar la versión de Ruby utilizando el siguiente comando.

ruby -v

Deberí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 bundler
gem install procodile

Instalar 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-dev

Ejecuta los siguientes comandos para iniciar MariaDB y habilitarlo para que se inicie al arrancar.

systemctl start mariadb
systemctl enable mariadb

Ahora ejecuta los siguientes comandos para asegurar tu instalación de MariaDB.

mysql_secure_installation

El 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 -p

El 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 erlang

Importa 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 update

Ahora puedes instalar RabbitMQ ejecutando el siguiente comando.

apt -y install rabbitmq-server

RabbitMQ ahora está instalado en tu sistema.

Configurar RabbitMQ

Puedes iniciar el proceso del servidor RabbitMQ ejecutando el siguiente comando.

systemctl start rabbitmq-server

Para iniciar RabbitMQ automáticamente al arrancar, ejecuta el siguiente comando.

systemctl enable rabbitmq-server

Ahora ejecuta el siguiente comando para crear un host virtual para Postal en el servidor RabbitMQ.

rabbitmqctl add_vhost /postal

Ahora agrega un usuario de RabbitMQ para Postal ejecutando el siguiente comando.

rabbitmqctl add_user postal StrongPassword

Reemplaza 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 git

Puedes verificar si Git se ha instalado correctamente comprobando la versión utilizando el siguiente comando.

git --version

Deberí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 nodejs

Puedes verificar si Node.js se ha instalado correctamente ejecutando el siguiente comando.

nodejs -v

Deberías obtener la siguiente salida.

root@ubuntu:~# nodejs -v
v4.7.2

Ahora 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 postal

El 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/ruby

Ahora 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/postal

Ahora crea un enlace simbólico al archivo binario de Postal ejecutando el siguiente comando.

ln -s /opt/postal/bin/postal /usr/bin/postal

Ahora 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 - postal

Ahora necesitarás instalar todas las dependencias de Ruby requeridas para ejecutar la aplicación.

postal bundle /opt/postal/vendor/bundle

Una vez que se hayan instalado las dependencias, necesitarás generar los archivos de configuración predeterminados.

postal initialize-config

El 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.yml

Encuentra 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 initialize

Crea el usuario administrador de Postal ejecutando el siguiente comando.

postal make-user

El 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 start

Para verificar si los servicios se han iniciado correctamente, ejecuta el siguiente comando.

postal status

Deberí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 stop

Configurando 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 nginx

Se 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 certbot

Una 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.com

Una 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 -e

Ingresa la siguiente línea en el archivo crontab.

30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

El 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.conf

Puebla 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 nginx

Para habilitar nginx para que se inicie automáticamente al arrancar, ejecuta el siguiente comando.

systemctl enable nginx

Ahora puedes acceder a Postal navegando por el siguiente sitio web a través de tu navegador web favorito.

https://mail.example.com

Configurando Postal

Una vez que navegues al sitio anterior, verás la siguiente interfaz.

Inicio de sesión de Postal

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.

Agregar organización en Postal

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.

Ingresa el nombre de la organización

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

Agregar 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.

Construir un nuevo servidor de correo

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.

Agregar 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.

Configurar registro MX

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

Detalles SMTP

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.

Enviando correo electrónico con Postal

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.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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