So erstellen Sie einen Mailserver mit Postal

Postal ist ein kostenloser und quelloffener kompletter Mailserver zum Senden und Empfangen von E-Mails. Es ist in Ruby und JavaScript geschrieben. Sie können Postal einfach auf Ihrem eigenen Server installieren. Es hilft Ihnen auch bei der Bereitstellung korrekter DNS-Informationen, die zur Reduzierung von Spam-E-Mails erforderlich sind. Die Post wird von vielen Organisationen zum täglichen Versenden und Empfangen von Mails genutzt.

In diesem Tutorial werden wir Postal Mail Server auf Ubuntu 17.04 installieren.

Voraussetzung

  • Minimaler Ubuntu 18.04 Server. 8 GB RAM empfohlen.
  • Root-Privilegien. Diese Anleitung ist als Benutzer root geschrieben, wenn Sie als sudo-Benutzer angemeldet sind, führen Sie sudo -i aus.
  • ein Domain-Name, der auf Ihren Server zeigt.

Update Basissystem

Bevor Sie ein Paket installieren, wird empfohlen, die Pakete und das Repository mit dem folgenden Befehl zu aktualisieren.

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

Sobald dein System aktualisiert ist, fahre mit der Installation von Ruby fort.

Ruby installieren

Postal ist in Ruby geschrieben, daher ist es erforderlich, Ruby 2.3 oder höher auf deinem System zu installieren. In diesem Tutorial werden wir die neueste Version von Ruby mit RVM installieren. Führen Sie den folgenden Befehl aus, um den GPG-Schlüssel von RVM auf Ihrem Server hinzuzufügen.

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

Installieren Sie nun RVM mit folgendem Befehl.

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

Um RVM sofort zu benutzen, müssen Sie den folgenden Befehl ausführen.

source /etc/profile.d/rvm.sh

Holen Sie sich nun die Liste der Ruby mit folgendem Befehl.

rvm list known

Sie werden folgende Ausgabe sehen:

# 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

Installiere nun die neueste Version von Ruby in der Liste mit dem folgenden Befehl.

rvm install 2.4

Verwenden Sie die Ruby-Version mit dem folgenden Befehl.

rvm use 2.4

Du kannst die Version von Ruby mit folgendem Befehl überprüfen.

ruby -v

Du solltest die folgende Ausgabe sehen, wenn Ruby erfolgreich installiert ist.

root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

Ruby Gems installieren

Um Postel auf deinem Server zu betreiben, musst du Bundler und procodile auf deinem Server installieren. bundler ist ein Abhängigkeitsmanager für Ruby gem Anwendungen. procodile ist ein Prozessmanagement-Tool für Ruby Anwendungen. Installieren Sie die beiden Anwendungen mit den folgenden Befehlen.

gem install bundler
gem install procodile

MariaDB-Datenbank-Server installieren

MariaDB ist eine Abspaltung des MySQL-Datenbankservers. MySQL ist ein relationales Datenbankmanagementsystem, mit dem Daten in tabellarischer Form gespeichert werden können. Um MariaDB auf Ihrem Server zu installieren, starten Sie:

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

Führen Sie die folgenden Befehle aus, um MariaDB zu starten und zu ermöglichen, dass es zur Bootzeit gestartet wird.

systemctl start mariadb
systemctl enable mariadb

Führen Sie nun die folgenden Befehle aus, um Ihre MariaDB-Installation zu sichern.

mysql_secure_installation

Der obige Befehl führt ein Skript aus, um eine neue MariaDB-Installation zu sichern. Das Skript fragt nach dem bestehenden Root-Benutzer-Passwort, wir haben gerade MariaDB installiert, das Root-Passwort ist nicht gesetzt, drücken Sie einfach die Eingabetaste, um weiter zu gehen.

Das Skript fragt Sie, ob Sie ein root-Passwort für Ihre MariaDB-Installation setzen wollen, wählen Sie y und setzen Sie ein starkes Passwort für die Installation. Die meisten Fragen sind selbsterklärend und Sie sollten alle Fragen mit ja oder nein beantworten.

Einrichten der Datenbank für die Post

Um eine Datenbank für Postal zu erstellen, müssen wir uns zuerst in die MySQL-Kommandozeile einloggen. Führen Sie den folgenden Befehl für dasselbe aus.

mysql -u root -p

Der obige Befehl loggt sich in die MySQL-Shell des Root-Benutzers ein, er fragt nach dem Passwort des Root-Benutzers. Geben Sie das Passwort für die Anmeldung an. Führen Sie nun die folgende Abfrage aus, um eine neue Datenbank für Ihre Postal-Installation zu erstellen.

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

Die obige Abfrage erzeugt eine neue Datenbank mit dem Namen postal. Stellen Sie sicher, dass Sie am Ende jeder Abfrage ein Semikolon verwenden, da die Abfrage immer mit einem Semikolon endet.

Geben Sie nun Ihrem Datenbankbenutzer alle Privilegien über die von Ihnen erstellte Datenbank. Führen Sie den folgenden Befehl aus.

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

Ersetzen Sie StrongPassword durch ein sehr starkes und sicheres Passwort.

Die Datenbank wird automatisch von Postal geschrieben, aber dafür müssen wir den Postbenutzern entsprechende Berechtigungen erteilen. Führen Sie den folgenden Befehl aus, um allen Benutzern, die mit postal- beginnen, Rechte zuzuweisen.

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

Führen Sie nun den folgenden Befehl aus, um die Änderungen an den Datenbankprivilegien sofort zu übernehmen.

FLUSH PRIVILEGES;

Beenden Sie die MySQL-Eingabeaufforderung mit dem folgenden Befehl.

EXIT;

RabbitMQ installieren

RabbitMQ ist in der Erlang-Sprache geschrieben, in diesem Tutorial werden wir die neueste Version von Erlang auf dem Server installieren. Installieren Sie Erlang mit folgendem Befehl.

apt -y install erlang

Importieren Sie den GPG-Schlüssel durch Ausführen:

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

Fügen Sie nun das RabbitMQ-Repository hinzu, indem Sie den folgenden Befehl ausführen:

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

Aktualisieren Sie den Repository-Index, indem Sie den folgenden Befehl ausführen.

apt update

Jetzt können Sie RabbitMQ installieren, indem Sie den folgenden Befehl ausführen.

apt -y install rabbitmq-server

RabbitMQ ist nun auf Ihrem System installiert.

Einrichtung RabbitMQ

Sie können den RabbitMQ Serverprozess starten, indem Sie den folgenden Befehl ausführen.

systemctl start rabbitmq-server

Um RabbitMQ automatisch beim Booten zu starten, führen Sie den folgenden Befehl aus.

systemctl enable rabbitmq-server

Führen Sie nun den folgenden Befehl aus, um einen virtuellen Host für Postal im RabbitMQ-Server zu erstellen.

rabbitmqctl add_vhost /postal

Fügen Sie nun einen RabbitMQ-Benutzer für Postal hinzu, indem Sie den folgenden Befehl ausführen.

rabbitmqctl add_user postal StrongPassword

Ersetzen Sie StrongPassword ist sehr starkes Passwort.

Setzen Sie nun die entsprechenden Rechte auf dem virtuellen RabbitMQ-Host auf den RabbitMQ-Benutzer.

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

Git und Node.js installieren

Git wird verwendet, um das Installationspaket und einige wenige Abhängigkeiten abzurufen. Führe den folgenden Befehl aus, um Git auf deinem System zu installieren.

apt -y install git

Sie können überprüfen, ob Git erfolgreich installiert wurde, indem Sie die Version mit dem folgenden Befehl überprüfen.

git --version

Sie sollten folgende Ausgabe erhalten.

root@ubuntu:~# git --version
git version 2.11.0

Node.js wird verwendet, um die JavaScript-Bibliothek zu kompilieren. Installieren Sie die Software mit dem folgenden Befehl.

apt -y install nodejs

Sie können überprüfen, ob Node.js erfolgreich installiert wurde, indem Sie den folgenden Befehl ausführen.

nodejs -v

Sie sollten folgende Ausgabe erhalten.

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

Nun, da wir alle Abhängigkeiten fertig haben, können Sie das Postal installieren.

Post installieren

Postal sollte als eigener, isolierter Benutzer laufen. Führen Sie den folgenden Befehl aus, um einen neuen Benutzer zu erstellen.

useradd -r -m -d /opt/postal -s /bin/bash postal

Der obige Befehl erzeugt einen neuen Benutzer mit dem Benutzernamen postal und das Heimatverzeichnis wird auf /opt/postal gesetzt.

Erlauben Sie Ruby, auf privilegierte Ports zu lauschen, indem Sie den folgenden Befehl ausführen.

setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby

Nun, da alles fertig ist, laden Sie das aktuelle Postal-Archiv herunter und entpacken Sie das Archiv als Postal-Benutzer mit dem folgenden Befehl.

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

Erstellen Sie nun einen symbolischen Link auf die Postal-Binärdatei, indem Sie den folgenden Befehl ausführen.

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

Jetzt können Sie von jedem Verzeichnis aus mit Ihrem Postal-Server interagieren. Um die nächsten Befehle auszuführen, müssen Sie sich als Postalischer Benutzer an der Shell anmelden.

su - postal

Jetzt müssen Sie alle Ruby-Abhängigkeiten installieren, die für die Ausführung der Anwendung erforderlich sind.

postal bundle /opt/postal/vendor/bundle

Sobald die Abhängigkeiten installiert sind, müssen Sie die Standardkonfigurationsdateien generieren.

postal initialize-config

Der obige Befehl erzeugt die erforderliche Konfiguration für Ihre Postal-Installation einschließlich verschiedener Schlüssel und Zertifikate. Dadurch wird auch die Standardkonfigurationsdatei postal.yml erzeugt. Sie sollten folgende Ausgabe erhalten.

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

Nun müssen Sie einige Optionen in der postal.yml Konfiguration konfigurieren.

nano /opt/postal/config/postal.yml

Suchen Sie die folgende Zeile:

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

Ändern Sie den Hostnamen in Ihren tatsächlichen Domainnamen. Weiter finden Sie die folgenden Zeilen.

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

Ändern Sie den Benutzernamen, das Passwort und den Datenbanknamen entsprechend der von Ihnen erstellten Datenbank. Weiter, finden Sie diese Zeilen:

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

Ändern Sie die obige Konfiguration entsprechend dem für RabbitMQ erstellten vhost und Benutzer. Als nächstes finden Sie die DNS-Konfigurationen.

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

Ändern Sie die oben genannten Domains mit den tatsächlichen Domains, die Sie mit dem Mailserver verwenden möchten.

Speichern Sie die Datei und verlassen Sie den Editor. Nun initialisieren Sie die Datenbank und andere Assets durch Ausführen:

postal initialize

Erstellen Sie den Benutzer „Postalischer Administrator“, indem Sie den folgenden Befehl ausführen.

postal make-user

Der obige Befehl wird Sie nach der E-Mail-Adresse, dem Benutzernamen und dem Passwort fragen. Der obige Befehl erzeugt die folgende Ausgabe.

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      : me@liptanbiswas.com
First Name          : Liptan
Last Name           : Biswas
Initial Password:   : **************

User has been created with e-mail address me@liptanbiswas.com

Das Kommandozeilen-Setup von Postal ist nun abgeschlossen, Sie können den Server mit dem folgenden Befehl starten.

postal start

Um zu überprüfen, ob die Dienste korrekt gestartet wurden, führen Sie den folgenden Befehl aus.

postal status

Sie sollten folgende Ausgabe erhalten.

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:-

Um Postal zu stoppen, können Sie jederzeit den folgenden Befehl ausführen.

postal stop

Nginx als Reverse Proxy konfigurieren

Aus Sicherheitsgründen sollte das Postal-Webinterface und die API hinter jedem Produktionswebserver wie Apache oder Nginx stehen. In diesem Tutorial werden wir Nginx als Reverse-Proxy installieren und konfigurieren.

Installieren Sie den Nginx-Webserver, indem Sie den folgenden Befehl ausführen.

apt -y install nginx

Es wird empfohlen, SSL für den Zugriff auf Nginx zu verwenden. Sie können entweder ein selbstsigniertes Zertifikat oder Let’s Encrypt ein kostenloses SSL-Zertifikat oder ein kommerzielles Zertifikat verwenden. In diesem Tutorial werden wir Let’s Encrypt free SSL verwenden.

Installieren Sie Let’s Encrypt client auch bekannt als certbot, indem Sie den folgenden Befehl ausführen.

apt -y install certbot

Sobald die Installation beendet ist, führen Sie den folgenden Befehl aus, um Zertifikate von der Zertifizierungsstelle Let’s Encrypt zu erhalten. Vergewissern Sie sich, dass der Domainname auf Ihren Server zeigt, da certbot vor der Bereitstellung der Zertifikate die Domänenautorität überprüft. Ersetzen Sie mail.example.com durch Ihren tatsächlichen Domainnamen.

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

Sobald die Zertifikate generiert sind, werden sie in der Datei /etc/letsencrypt/live/mail.example.com gespeichert.

Let’s Encrypt SSL läuft in 90 Tagen ab, daher wird empfohlen, eine automatische Erneuerung für Ihre Zertifikate festzulegen. Führen Sie den folgenden Befehl aus, um Ihre crontab-Datei zu öffnen.

crontab -e

Geben Sie die folgende Zeile in die crontab-Datei ein.

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

Der obige Cron-Job läuft automatisch jeden Montag um 1:30 Uhr und erneuert Ihre Zertifikate automatisch, wenn diese fällig sind.

Erstellen Sie nun einen neuen Server-Block für Ihre Website, indem Sie den folgenden Befehl ausführen.

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

Füllen Sie die Datei mit dem folgenden Inhalt.

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

Speichern Sie die Datei und verlassen Sie den Editor. Starten Sie nun den nginx Webserver neu, indem Sie ihn laufen lassen.

systemctl restart nginx

Damit nginx automatisch zur Bootzeit startet, führen Sie den folgenden Befehl aus.

systemctl enable nginx

Sie können jetzt auf Postal on zugreifen, indem Sie die folgende Website über Ihren Lieblings-Webbrowser aufrufen.

https://mail.example.com

Konfigurieren der Post

Sobald Sie die obige Seite durchsuchen, sehen Sie die folgende Schnittstelle.

Postalische Anmeldung

Geben Sie die E-Mail-Adresse und das Passwort des Benutzers ein, den Sie zuvor angelegt haben. Sobald Sie eingeloggt sind, werden Sie aufgefordert, eine neue Organisation zu erstellen.

Organisation in Post hinzufügen

Geben Sie den Namen der Organisation an. Sie können entweder den automatisch generierten Kurznamen verwenden oder einen selbst festlegen. Die Kurznamen werden bei der Authentifizierung mit dem SMTP-Server als Benutzername verwendet. Sie sollte nur Buchstaben, Zahlen und Bindestriche enthalten.

Eingabe Organisationsname

Sobald die Organisation erstellt ist, werden Sie aufgefordert, einen neuen Mailserver zu erstellen.

Add Mail Server

Geben Sie den Namen, den Kurznamen und den Modus des E-Mail-Servers an. Im Live-Modus werden alle E-Mails normal weitergeleitet und zugestellt, aber im Entwicklungsmodus sind sie nur in der Weboberfläche sichtbar.

Erstellen eines neuen Mail-Servers

Nachdem Sie den Mailserver hinzugefügt haben, müssen Sie eine neue Domain im Mailserver hinzufügen. Klicken Sie auf die Registerkarte Domains und erstellen Sie einen neuen Domainnamen.

Domain hinzufügen

Nachdem Sie den Domainnamen hinzugefügt haben, müssen Sie den DNS für die Domain konfigurieren. Sie müssen zwei TXT-Datensätze für SPF und DKIM hinzufügen. Außerdem müssen Sie einen CNAME- und MX-Eintrag für den Rückweg und die Postzustellung hinzufügen. Nachdem Sie die DNS-Konfiguration vorgenommen haben, klicken Sie auf die Schaltfläche Check my records are correct, um die DNS-Konfiguration zu überprüfen.

MX-Eintrag konfigurieren

Nun müssen Sie einen SMTP-Zugang für das Senden und Empfangen von E-Mails erstellen.

SMTP-Details

Wählen Sie den Typ als SMTP oder API aus. Geben Sie den Namen für die SMTP-Zugangsdaten an, wählen Sie, wie Sie die E-Mail-Adresse behandeln möchten.

Wenn Sie fertig sind, können Sie zur Registerkarte Übersicht zurückkehren und Sie sehen die Informationen, die zum Senden oder Empfangen der E-Mail-Adresse erforderlich sind.

E-Mail mit Post versenden

Fazit

In diesem Tutorial haben wir erfolgreich einen voll ausgestatteten Mailserver mit Postal auf Ubuntu 17.04 eingerichtet. Sie können den E-Mail-Server zum Senden und Empfangen der E-Mails Ihrer Organisation verwenden.

Das könnte Dich auch interessieren …