GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear un servidor de correo con todas las funciones usando 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. Puede instalar Postal fácilmente en su propio servidor. También lo ayuda a proporcionar la información de DNS correcta requerida para reducir los correos electrónicos no deseados. Muchas organizaciones utilizan el correo postal para enviar y recibir correos electrónicos a diario.

En este tutorial, instalaremos Postal Mail Server en Ubuntu 17.04.

Requisito previo

  • Servidor Ubuntu 17.04 mínimo. Se recomiendan 8 GB de RAM.
  • Privilegios de raíz. Esta guía está escrita como usuario root, si ha iniciado sesión como usuario sudo, ejecute sudo -i.
  • un nombre de dominio apuntando hacia su servidor.

Actualizar sistema base

Antes de instalar cualquier paquete, se recomienda que actualice los paquetes y el repositorio con el siguiente comando.

apt update && apt -y upgrade
shutdown -r now

Una vez que su sistema esté actualizado, continúe con la instalación de Ruby.

Instalar Ruby

Postal está escrito en Ruby, por lo que se requiere instalar Ruby 2.3 o superior en su sistema. En este tutorial, instalaremos la última versión de Ruby usando RVM. Ejecute el siguiente comando para agregar la clave GPG de RVM en su servidor.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

Ahora instale RVM usando el siguiente comando.

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

Para usar RVM inmediatamente, deberá ejecutar el siguiente comando.

source /etc/profile.d/rvm.sh

Ahora busque la lista de Ruby usando el siguiente comando.

rvm list known

Verá el siguiente resultado:

# 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 instale la última versión de Ruby en la lista usando el siguiente comando.

rvm install 2.4

Use la versión de Ruby usando el siguiente comando.

rvm use 2.4

Puede verificar la versión de Ruby usando el siguiente comando.

ruby -v

Debería ver el siguiente resultado si Ruby se instaló correctamente.

[email protected]:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

Instalar Ruby Gems

Para ejecutar Postel en su servidor, deberá instalar Bundler y Procodile en su servidor. bundler es un administrador de dependencias para aplicaciones de gemas de Ruby. procodile es una herramienta de gestión de procesos para aplicaciones Ruby. Instale ambas aplicaciones usando los siguientes comandos.

gem install bundler
gem install procodile

Instalar servidor de base de datos MariaDB

MariaDB es una bifurcación del servidor de base de datos MySQL. MySQL es un software de sistema de gestión de bases de datos relacionales que se utiliza para almacenar datos en formato tabular. Para instalar MariaDB en su servidor, ejecute:

apt -y install mariadb-client mariadb-server libmysqlclient-dev

Ejecute los siguientes comandos para iniciar MariaDB y permitir que se inicie en el momento del arranque.

systemctl start mariadb
systemctl enable mariadb

Ahora ejecute los siguientes comandos para asegurar su instalación de MariaDB.

mysql_secure_installation

El comando anterior ejecutará un script para asegurar una nueva instalación de MariaDB. El script le pedirá la contraseña de usuario root existente, acabamos de instalar MariaDB, la contraseña de root no está configurada, solo presione enter para continuar.

El script le preguntará si desea establecer una contraseña de root para su instalación de MariaDB, elija y y establezca una contraseña segura para la instalación. La mayoría de las preguntas se explican por sí mismas y debe responder sí o y a todas las preguntas.

Configurar base de datos para correo

Para crear una base de datos para Postal, primero debemos iniciar sesión en la línea de comandos de MySQL. Ejecute el siguiente comando para lo mismo.

mysql -u root -p

El comando anterior iniciará sesión en el shell de MySQL del usuario root, le solicitará la contraseña del usuario root. Proporcione la contraseña para iniciar sesión. Ahora ejecute la siguiente consulta para crear una nueva base de datos para su 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úrese de utilizar un punto y coma al final de cada consulta, ya que la consulta siempre termina con un punto y coma.

Ahora proporcione todos los privilegios al usuario de su base de datos sobre la base de datos que ha creado. Ejecute el siguiente comando.

GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";

Reemplace StrongPassword con una contraseña muy fuerte y segura.

Postal escribirá automáticamente la base de datos, pero para eso, necesitaremos otorgar los permisos apropiados a los usuarios de Postal. Ejecute el siguiente comando para otorgar privilegios a todos los usuarios que comienzan con postal-.

GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1`  IDENTIFIED BY "StrongPassword";

Ahora ejecute el siguiente comando para aplicar inmediatamente los cambios en los privilegios de la base de datos.

FLUSH PRIVILEGES;

Salga del indicador de MySQL usando el siguiente comando.

EXIT;

Instalar RabbitMQ

RabbitMQ está escrito en lenguaje Erlang, en este tutorial instalaremos la última versión de Erlang en el servidor. Instale Erlang usando el siguiente comando.

apt -y install erlang

Importe la clave GPG ejecutando:

curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

Ahora agregue el repositorio RabbitMQ ejecutando el siguiente comando:

add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'

Actualice el índice del repositorio ejecutando el siguiente comando.

apt update

Ahora puede instalar RabbitMQ ejecutando el siguiente comando.

apt -y install rabbitmq-server

RabbitMQ ya está instalado en su sistema.

Configurar RabbitMQ

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

systemctl start rabbitmq-server

Para iniciar RabbitMQ automáticamente en el momento del arranque, ejecute el siguiente comando.

systemctl enable rabbitmq-server

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

rabbitmqctl add_vhost /postal

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

rabbitmqctl add_user postal StrongPassword

Reemplazar StrongPassword es una contraseña muy segura.

Ahora establezca el permiso apropiado en el host virtual de RabbitMQ para el usuario de RabbitMQ.

rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

Instalar Git y Node.js

Git se usará para recuperar el paquete de instalación y algunas dependencias. Ejecute el siguiente comando para instalar Git en su sistema.

apt -y install git

Puede verificar si Git se instaló correctamente al verificar la versión usando el siguiente comando.

git --version

Debería obtener el siguiente resultado.

[email protected]:~# git --version
git version 2.11.0

Node.js se usará para compilar la biblioteca de JavaScript. Instale el software usando el siguiente comando.

apt -y install nodejs

Puede verificar si Node.js se instaló correctamente ejecutando el siguiente comando.

nodejs -v

Debería obtener el siguiente resultado.

[email protected]:~# nodejs -v
v4.7.2

Ahora que tenemos todas las dependencias listas, puedes instalar el Postal.

Instalar postal

Postal debe ejecutarse como su propio usuario aislado. Ejecute 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 de inicio se establecerá en /opt/postal.

Permita que Ruby escuche los 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, descargue el archivo Postal más reciente y extraiga el archivo como usuario Postal usando el siguiente comando.

wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal

Ahora cree un enlace simbólico al archivo binario 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, deberá iniciar sesión en Shell como usuario postal.

su - postal

Ahora deberá instalar todas las dependencias de Ruby necesarias para ejecutar la aplicación.

postal bundle /opt/postal/vendor/bundle

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

postal initialize-config

El comando anterior generará la configuración requerida para su instalación Postal, incluidas varias claves y certificados. Esto también generará el archivo de configuración postal.yml predeterminado. Debería obtener el siguiente resultado.

[email protected]:~$ 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 deberá configurar algunas opciones en la configuración de postal.yml.

nano /opt/postal/config/postal.yml

Busque la siguiente línea:

web:
  # The host that the management interface will be available on
  host: postal.example.com

Cambie el nombre de host a su nombre de dominio real. Además, busque las siguientes líneas.

main_db:
  # Specify the connection details for your MySQL database
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  database: postal

message_db:
  # Specify the connection details for your MySQL server that will be house the
  # message databases for mail servers.
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  prefix: postal

Cambie el nombre de usuario, la contraseña y el nombre de la base de datos según la base de datos que haya creado. Además, encuentre estas líneas:

rabbitmq:
  # Specify the connection details for your RabbitMQ server.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

Cambie la configuración anterior según el vhost y el usuario creado para RabbitMQ. A continuación, busque las configuraciones de DNS.

dns:
  # Specifies the DNS record that you have configured. Refer to the documentation at
  # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further
  # information about these.
  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

Cambie los dominios anteriores con los dominios reales que desea usar con el servidor de correo.

Guarde el archivo y salga del editor. Ahora, inicialice la base de datos y otros activos ejecutando:

postal initialize

Cree el usuario Administrador Postal ejecutando el siguiente comando.

postal make-user

El comando anterior le pedirá la dirección de correo electrónico, el nombre de usuario y la contraseña. El comando anterior generará el siguiente resultado.

[email protected]:~$ 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 ya ha finalizado, puede iniciar el servidor con el siguiente comando.

postal start

Para verificar si los servicios se iniciaron correctamente, ejecute el siguiente comando.

postal status

Debería obtener el siguiente resultado.

[email protected]:~$ 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 puede ejecutar el siguiente comando.

postal stop

Configurar Nginx como proxy inverso

Por razones de seguridad, la API y la interfaz web 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 proxy inverso.

Instale el servidor web Nginx ejecutando el siguiente comando.

apt -y install nginx

Se recomienda utilizar SSL para acceder a Nginx. Puede usar un certificado autofirmado o un certificado SSL gratuito de Let's Encrypt o un certificado comercial. En este tutorial, utilizaremos SSL gratuito de Let's Encrypt.

Instale el cliente Let's Encrypt, también conocido como certbot, ejecutando el siguiente comando.

apt -y install certbot

Una vez que finalice la instalación, ejecute el siguiente comando para obtener certificados de la autoridad de certificación de Let's Encrypt. Asegúrese de que el nombre de dominio apunte hacia su servidor, ya que certbot verificará la autoridad del dominio antes de proporcionar los certificados. Reemplace mail.example.com con su nombre de dominio real.

certbot certonly --standalone -d mail.example.com

Una vez que se generan los certificados, se almacenarán en /etc/letsencrypt/live/mail.example.com.

Let's Encrypt SSL caduca en 90 días, por lo que se recomienda configurar una renovación automática para sus certificados. Ejecute el siguiente comando para abrir su archivo crontab.

crontab -e

Ingrese 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 a. m. y si sus certificados están a punto de caducar, los renovará automáticamente.

Ahora cree un nuevo bloque de servidor para su sitio web ejecutando el siguiente comando.

nano /etc/nginx/conf.d/mail.example.com.conf

Complete 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;
    }
}

Guarde el archivo y salga del editor. Ahora reinicie el servidor web nginx ejecutando.

systemctl restart nginx

Para permitir que nginx se inicie automáticamente en el momento del arranque, ejecute el siguiente comando.

systemctl enable nginx

Ahora puede acceder a Postal on navegando por el siguiente sitio web a través de su navegador web favorito.

https://mail.example.com

Configuración postal

Una vez que navegue por el sitio anterior, verá la siguiente interfaz.


Ingrese la dirección de correo electrónico y la contraseña del usuario que creó anteriormente. Una vez que haya iniciado sesión, se le pedirá que cree una nueva organización.

Proporcione el nombre de la organización. Puede optar por utilizar el nombre abreviado generado automáticamente o puede especificar uno usted mismo. Los nombres cortos se utilizan como nombre de usuario durante la autenticación con el servidor SMTP. Solo debe contener letras, números y guiones.


Una vez creada la organización, se le pedirá que cree un nuevo servidor de correo.


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


Una vez que haya agregado el servidor de correo, deberá agregar un nuevo dominio en el servidor de correo. Haga clic en Dominios pestaña y cree un nuevo nombre de dominio.

Una vez que haya agregado el nombre de dominio, deberá configurar el DNS para el dominio. Deberá agregar dos registros TXT para SPF y DKIM. También deberá agregar un registro CNAME y un registro MX para la ruta de retorno y la entrega de correo. Una vez que configure el DNS, haga clic en Comprobar que mis registros son correctos botón para verificar la configuración de DNS.

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

Elija el tipo como SMTP o API. Proporcione el nombre para las credenciales SMTP, elija cómo desea manejar la dirección de correo electrónico.

Una vez hecho esto, puede volver a Descripción general y verá 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 con todas las funciones utilizando Postal en Ubuntu 17.04. Puede utilizar el servidor de correo para enviar y recibir los correos electrónicos de su organización.


Linux
  1. Cómo instalar SQL Server en Windows 10

  2. Cómo instalar el servidor de correo postfix en RHEL 8 / CentOS 8

  3. Cómo instalar DKIM en el servidor Ubuntu

  4. ¿Cómo enviar Ssh a un servidor usando otro servidor?

  5. Cómo instalar CVS y crear un repositorio CVS en un servidor Linux

¿Cómo instalar un servidor FTP en Ubuntu?

Cómo instalar Nginx en Ubuntu 14.04

Cómo instalar LEMP usando la aplicación de un clic de Atlantic.Net

Cómo instalar LAMP usando la instalación con un solo clic de Atlantic.Net

Cómo configurar un servidor de correo con todas las funciones con Postfix, Dovecot y Roundcube en Ubuntu 18.04

Cómo crear un proxy HTTP usando Squid en CentOS 8