GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Teil 3:PostfixAdmin – Erstellen Sie virtuelle Postfächer auf dem Ubuntu 20.04 Mailserver

In früheren Artikeln haben wir besprochen, wie Sie Ihren eigenen Mailserver unter Ubuntu von Grund auf neu einrichten. In Teil 1 und Teil 2 dieser Tutorial-Serie haben wir gelernt, wie Postfix-SMTP-Server und Dovecot-IMAP-Server eingerichtet werden, aber bisher können wir nur E-Mail-Adressen für Benutzer mit lokalen Unix-Konten haben. Dieses Tutorial zeigt Ihnen, wie Sie virtuelle Postfächer auf dem Ubuntu 20.04-Mailserver mit PostfixAdmin erstellen, einer webbasierten Open-Source-Schnittstelle zum Konfigurieren und Verwalten eines Postfix-basierten E-Mail-Servers für viele Domänen und Benutzer.

Mit virtuellen Postfächern müssen wir nicht für jede E-Mail-Adresse ein lokales Unix-Konto erstellen. Wenn Sie einen Mailserver für ein Unternehmen oder eine Organisation einrichten, ist es immer besser, eine einfache Möglichkeit zu haben, virtuelle Postfächer in einer webbasierten Oberfläche zu erstellen, die es den Benutzern auch ermöglicht, ihre Passwörter zu ändern. Hier kommt PostfixAdmin ins Spiel.

PostfixAdmin-Funktionen

  • Postfächer, virtuelle Domains und Aliase verwalten
  • Urlaubs-/Abwesenheitsnachrichten (persönlich denke ich, dass es in Roundcube-Webmail besser gemacht wird)
  • Alias-Domains (Weiterleitung einer Domain an eine andere mit Empfängervalidierung)
  • Benutzer können ihr eigenes Postfach verwalten (Alias, Passwort und Abwesenheitsnachricht ändern)
  • Kontingentunterstützung für einzelne Postfächer und Gesamtkontingent einer Domain
  • Fetchmail-Integration:Sie können E-Mails von Ihrer ursprünglichen E-Mail-Adresse an Ihre neue E-Mail-Adresse abrufen.
  • Befehlszeilen-Client postfixadmin-cli für diejenigen, die nicht in einer Weboberfläche herumklicken möchten 😉

Hinweis Hinweis:Wenn Sie Teil 3 abgeschlossen haben, können Sie keine lokalen Unix-Konten mehr als E-Mail-Adressen verwenden. Sie müssen E-Mail-Adressen über die PostfixAdmin-Weboberfläche erstellen.

Voraussetzungen

Es ist erforderlich, dass Sie Teil 1 und Teil 2 dieser Tutorial-Serie befolgt haben, bevor Sie mit dem Lesen dieses Artikels fortfahren. Wenn Sie Mailserver-Tutorials auf anderen Websites gefolgt sind, empfehle ich, Ihre Konfigurationen zu löschen (sudo apt purge postfix dovecot-core ) und beginnen Sie noch einmal mit meiner Tutorial-Serie, damit Sie nicht durch verschiedene Einrichtungsprozesse verwirrt werden.

Sobald die oben genannten Anforderungen erfüllt sind, installieren und konfigurieren wir PostfixAdmin.

Schritt 1:MariaDB-Datenbankserver installieren

PostfixAdmin ist in PHP geschrieben und benötigt eine Datenbank (MySQL/MariaDB, PostgreSQL oder SQLite). Dieser Artikel verwendet die MariaDB-Datenbank, die ein Drop-in-Ersatz für MySQL ist. Es wurde von ehemaligen Mitgliedern des MySQL-Teams entwickelt, die befürchten, dass Oracle MySQL in ein Closed-Source-Produkt verwandeln könnte. Geben Sie den folgenden Befehl ein, um MariaDB auf Ubuntu 20.04 zu installieren.

sudo apt install mariadb-server mariadb-client

Nach der Installation sollte der MariaDB-Server automatisch gestartet werden. Verwenden Sie systemctl um seinen Status zu überprüfen.

systemctl status mariadb

Ausgabe:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

Wenn es nicht läuft, starten Sie es mit diesem Befehl:

sudo systemctl start mariadb

Damit MariaDB beim Booten automatisch startet, führen Sie

aus
sudo systemctl enable mariadb

Führen Sie nun das Sicherheitsskript nach der Installation aus.

sudo mysql_secure_installation

Wenn Sie aufgefordert werden, das MariaDB-Root-Passwort einzugeben, drücken Sie die Eingabetaste, da das Root-Passwort noch nicht festgelegt ist. Geben Sie dann y ein um das Root-Passwort für den MariaDB-Server festzulegen.

Als nächstes können Sie die Eingabetaste drücken, um alle verbleibenden Fragen zu beantworten, wodurch der anonyme Benutzer entfernt, die Remote-Root-Anmeldung deaktiviert und die Testdatenbank entfernt wird. Dieser Schritt ist eine Grundvoraussetzung für die MariaDB-Datenbanksicherheit. (Beachten Sie, dass Y großgeschrieben wird, was bedeutet, dass es die Standardantwort ist. )

Schritt 2:PostfixAdmin auf Ubuntu 20.04 Server installieren

Melden Sie sich bei Ihrem Mailserver an. Da einige Leser den MariaDB-Server verwenden, während andere MySQL verwenden, was die Sache kompliziert macht, installieren wir vor der Installation von PostfixAdmin den dbconfig-no-thanks Paket, um den postfixadmin zu verhindern Paket vom Starten des Datenbank-Konfigurationsassistenten.

sudo apt install dbconfig-no-thanks

Installieren Sie dann PostfixAdmin aus dem standardmäßigen Ubuntu-Software-Repository.

sudo apt install postfixadmin

Hinweis :Wenn Sie zuvor mysql-server installiert haben unter Ubuntu wird die Installation von PostfixAdmin wahrscheinlich den mysql-server entfernen Paket von Ihrem System. Sie können es erneut installieren, indem Sie den folgenden Befehl ausführen.

sudo apt install mysql-server

Jetzt müssen wir dbconfig-no-thanks entfernen Paket.

sudo apt remove dbconfig-no-thanks

Starten Sie dann den Datenbankkonfigurationsassistenten für PostfixAdmin.

sudo dpkg-reconfigure postfixadmin

Während der Installation werden Sie gefragt, ob Sie die Datenbank für PostfixAdmin neu installieren möchten. Das bedeutet einfach, eine Datenbank mit dem Namen postfixadmin zu erstellen , werden Ihre vorhandenen Datenbanken nicht entfernt. Drücken Sie die Tabulatortaste, um Ja auszuwählen .

Wählen Sie dann den Standard-Datenbanktyp:mysql , wenn Sie MySQL oder MariaDB verwenden.

Wählen Sie als Nächstes die Standardverbindungsmethode:Unix socket .

Wählen Sie dann das Standard-Authentifizierungs-Plugin für MySQL/MariaDB.

Drücken Sie die Eingabetaste, um den Standarddatenbanknamen für PostfixAdmin auszuwählen.

Drücken Sie die Eingabetaste, um den Standarddatenbank-Benutzernamen für PostfixAdmin auszuwählen.

Danach müssen Sie ein Passwort für diesen Benutzer festlegen. Beachten Sie, dass das Passwort nicht den # enthalten sollte Zeichen, oder Sie können sich später möglicherweise nicht anmelden.


Wählen Sie schließlich den standardmäßigen Administratorbenutzer für die Datenbank aus.

Nachdem PostfixAdmin installiert ist, können Sie sich mit dem folgenden Befehl bei der MySQL/MariaDB-Konsole anmelden. Sie müssen das Passwort für den postfixadmin eingeben Benutzer.

mysql -u postfixadmin -p

Und Sie können mit dem folgenden Befehl prüfen, auf welche Datenbanken der Benutzer zugreifen darf.

SHOW DATABASES;

Ausgabe:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| postfixadmin       |
+--------------------+
2 rows in set (0.002 sec)

Standardmäßig ist der postfixadmin Datenbank enthält keine Tabellen. Sie können sich mit dem folgenden Befehl von der MySQL/MariaDB-Konsole abmelden.

EXIT;

Die Installation erstellt außerdem zwei Konfigurationsdateien:/etc/dbconfig-common/postfixadmin.conf und /etc/postfixadmin/dbconfig.inc.php , die beide die Datenbankzugriffseinstellungen enthalten, einschließlich des Datenbankbenutzernamens und des Kennworts. Wir müssen den Datenbanktyp von mysql ändern zu mysqli in beiden Dateien.

sudo nano /etc/dbconfig-common/postfixadmin.conf

Ändern

dbc_dbtype='mysql'

zu

dbc_dbtype='mysqli'

Bearbeiten Sie dann die zweite Datei.

sudo nano /etc/postfixadmin/dbconfig.inc.php

Ändern

$dbtype='mysql';

zu

$dbtype='mysqli';

Die Webdateien werden unter /usr/share/postfixadmin/ installiert Verzeichnis, das root gehört. PostfixAdmin benötigt ein templates_c Verzeichnis, also erstelle es.

sudo mkdir /usr/share/postfixadmin/templates_c

Wir müssen www-data angeben Benutzer Lese-, Schreib- und Ausführungsberechtigungen für dieses Verzeichnis mit dem folgenden Befehl.

sudo setfacl -R -m u:www-data:rwx /usr/share/postfixadmin/templates_c/

Wenn Ihr System die Datei setfacl nicht finden kann Befehl müssen Sie die acl installieren Paket.

sudo apt install acl

Schritt 3:Apache Virtual Host oder Nginx-Konfigurationsdatei für PostfixAdmin erstellen

Apache

Wenn Sie den Apache-Webserver verwenden, erstellen Sie einen virtuellen Host für PostfixAdmin.

sudo nano /etc/apache2/sites-available/postfixadmin.conf

Fügen Sie den folgenden Text in die Datei ein. Ersetzen Sie postfixadmin.example.com mit Ihrem echten Domainnamen und vergessen Sie nicht, dafür einen DNS-A-Eintrag festzulegen.

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /usr/share/postfixadmin/public

  ErrorLog ${APACHE_LOG_DIR}/postfixadmin_error.log
  CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /usr/share/postfixadmin/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Speichern und schließen Sie die Datei. Aktivieren Sie dann diesen virtuellen Host mit:

sudo a2ensite postfixadmin.conf

Laden Sie Apache neu, damit die Änderungen wirksam werden.

sudo systemctl reload apache2

Jetzt sollten Sie den webbasierten Installationsassistenten von PostfixAdmin unter http://postfixadmin.example.com/setup.php sehen können .

Nginx

Wenn Sie den Nginx-Webserver verwenden, erstellen Sie einen virtuellen Host für PostfixAdmin.

sudo nano /etc/nginx/conf.d/postfixadmin.conf

Fügen Sie den folgenden Text in die Datei ein. Ersetzen Sie postfixadmin.example.com mit Ihrem echten Domainnamen und vergessen Sie nicht, dafür einen DNS-A-Eintrag festzulegen.

server {
   listen 80;
   listen [::]:80;
   server_name postfixadmin.example.com;

   root /usr/share/postfixadmin/public/;
   index index.php index.html;

   access_log /var/log/nginx/postfixadmin_access.log;
   error_log /var/log/nginx/postfixadmin_error.log;

   location / {
       try_files $uri $uri/ /index.php;
   }

   location ~ ^/(.+\.php)$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
   }
}

Speichern und schließen Sie die Datei. Testen Sie dann die Nginx-Konfiguration.

sudo nginx -t

Wenn der Test erfolgreich ist, laden Sie Nginx neu, damit die Änderungen wirksam werden.

sudo systemctl reload nginx

Jetzt sollten Sie den webbasierten Installationsassistenten von PostfixAdmin unter http://postfixadmin.example.com/setup.php sehen können .

Schritt 4:Erforderliche und empfohlene PHP-Module installieren

Führen Sie den folgenden Befehl aus, um PHP-Module zu installieren, die von PostfixAdmin benötigt oder empfohlen werden.

sudo apt install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp

Starten Sie dann Apache neu. (Wenn Sie Nginx verwenden, müssen Sie Nginx nicht neu starten.)

sudo systemctl restart apache2

Schritt 5:HTTPS aktivieren

Um den HTTP-Verkehr zu verschlüsseln, können wir HTTPS aktivieren, indem wir ein kostenloses TLS-Zertifikat installieren, das von Let’s Encrypt ausgestellt wurde. Führen Sie den folgenden Befehl aus, um den Let’s Encrypt-Client (certbot) auf dem Ubuntu 20.04-Server zu installieren.

sudo apt install certbot

Wenn Sie Apache verwenden, installieren Sie das Certbot Apache-Plugin.

sudo apt install python3-certbot-apache

Und führen Sie diesen Befehl aus, um das TLS-Zertifikat zu erhalten und zu installieren.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Wenn Sie Nginx verwenden, müssen Sie auch das Certbot Nginx-Plugin installieren.

sudo apt install python3-certbot-nginx

Führen Sie als Nächstes den folgenden Befehl aus, um das TLS-Zertifikat zu erhalten und zu installieren.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Wo

  • --nginx :Verwenden Sie das nginx-Plugin.
  • --apache :Verwenden Sie das Apache-Plugin.
  • --agree-tos :Nutzungsbedingungen akzeptieren.
  • --redirect :HTTPS durch 301-Umleitung erzwingen.
  • --hsts : Fügen Sie den Strict-Transport-Security-Header zu jeder HTTP-Antwort hinzu. Erzwingen, dass der Browser immer TLS für die Domäne verwendet. Schützt vor SSL/TLS-Stripping.
  • --staple-ocsp : Aktiviert OCSP-Heften. Eine gültige OCSP-Antwort wird an das Zertifikat geheftet, das der Server während TLS anbietet.

Das Zertifikat sollte nun bezogen und automatisch installiert werden, was durch die Meldung unten angezeigt wird.

Schritt 6:Verwenden Sie ein starkes Passwortschema in PostfixAdmin und Dovecot

Standardmäßig verwenden PostfixAdmin und Dovecot MD5-CRYPT, ein schwaches Kennwortschema. Mit dem folgenden Befehl können Sie verfügbare Passwortschemata in Dovecot auflisten.

sudo doveadm pw -l

Beispielausgabe:

SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

Argon2 ist ein ziemlich starkes Passwortschema. Um es zu verwenden, müssen wir die PostfixAdmin-Konfigurationsdatei bearbeiten, die standardmäßig /usr/share/postfixadmin/config.inc.php ist , aber wir können eine separate Datei erstellen (config.local.php ), um unsere Änderungen zu speichern, damit sie nicht überschrieben werden, wenn in Zukunft eine neue Version von PostfixAdmin installiert wird.

sudo nano /usr/share/postfixadmin/config.local.php

Fügen Sie die folgenden Zeilen in die Datei ein, um das Argon2-Passwortschema zu verwenden.

<?php
$CONF['encrypt'] = 'dovecot:ARGON2I';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5";
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171
    $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian
}

Speichern und schließen Sie die Datei. Wir können auch einen Symlink in /etc/postfixadmin/ erstellen Verzeichnis, nur für den Fall, dass PostfixAdmin die Datei nicht finden kann.

sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php

Wir werden das Passwortschema für Dovecot in Schritt 11 konfigurieren.

Schritt 7:Statistiken in Dovecot aktivieren

PostfixAdmin muss Dovecot-Statistiken lesen. Bearbeiten Sie die Dovecot-Konfigurationsdatei.

sudo nano /etc/dovecot/conf.d/10-master.conf

Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu.

service stats {
    unix_listener stats-reader {
    user = www-data
    group = www-data
    mode = 0660
}

unix_listener stats-writer {
    user = www-data
    group = www-data
    mode = 0660
  }
}

Speichern und schließen Sie die Datei. Fügen Sie dann den Webserver zum dovecot hinzu Gruppe.

sudo gpasswd -a www-data dovecot

Starten Sie Dovecot neu.

sudo systemctl restart dovecot

Schritt 8:Beenden Sie die Installation im Webbrowser

Gehen Sie zu postfixadmin.example.com/setup.php um den webbasierten Einrichtungsassistenten auszuführen. Zuerst prüft es, ob alle Abhängigkeiten installiert sind und erstellt die Datenbanktabellen.

Wenn Sie den folgenden Fehler sehen,

Invalid query: Specified key was too long; max key length is 1000 bytes

Dann müssen Sie sich über die Befehlszeile als root beim MySQL/MariaDB-Datenbankserver anmelden,

sudo mysql -u root

und ändern Sie die Standardsortierung von utf8mb4_general_ci zu utf8_general_ci .

MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';

Beenden Sie die MySQL/MariaDB-Konsole und laden Sie die Seite setup.php neu. Wenn alle Anforderungen erfüllt sind, können Sie ein Setup-Passwort für PostfixAdmin erstellen.

Nachdem Sie den Passwort-Hash erstellt haben, müssen Sie die /usr/share/postfixadmin/config.local.php öffnen Datei und fügen Sie den Setup-Passwort-Hash am Ende der Datei wie unten hinzu. Natürlich müssen Sie Ihren eigenen Passwort-Hash verwenden.

Erstellen Sie als Nächstes das Administratorkonto. Bitte verwenden Sie keine Gmail-, Yahoo Mail- oder Microsoft-E-Mail-Adresse für das Administratorkonto, da Sie sich sonst möglicherweise später nicht anmelden können. Verwenden Sie eine E-Mail-Adresse in Ihrer eigenen Domain. Sie können die E-Mail-Adresse später in PostfixAdmin erstellen.

Wenn beim Versuch, ein Superadmin-Konto zu erstellen, die folgende Fehlermeldung angezeigt wird,

can’t encrypt password with dovecotpw, see error log for details

Das liegt daran, dass die www-data Der Benutzer hat keine Berechtigung zum Lesen des TLS-Zertifikats von Let’s Encrypt. Um das Problem zu beheben, führen Sie den folgenden Befehl aus, um Berechtigungen zu erteilen.

sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Nachdem das Superadmin-Konto erstellt wurde, können Sie sich unter postfixadmin.example.com/login.php bei PostfixAdmin anmelden .

Schritt 9:Tabellen in der Datenbank prüfen

Der PostfixAdmin-Setup-Prozess füllt den postfixadmin Datenbank mit einigen Standardtabellen. Es ist hilfreich für uns, die Namen und die Struktur der Tabellen zu kennen. Melden Sie sich bei der MySQL/MariaDB-Konsole an.

sudo mysql -u root

Wählen Sie den postfixadmin Datenbank.

USE postfixadmin;

Alle Tabellen in dieser Datenbank auflisten.

SHOW TABLES;

Ausgabe:

+------------------------+
| Tables_in_postfixadmin |
+------------------------+
| admin                  |
| alias                  |
| alias_domain           |
| config                 |
| domain                 |
| domain_admins          |
| fetchmail              |
| log                    |
| mailbox                |
| quota                  |
| quota2                 |
| vacation               |
| vacation_notification  |
+------------------------+
13 rows in set (0.001 sec)

Die 3 wichtigsten Tabellen sind:

  • domain :enthält Informationen zu den Domänen, die Ihren Mailserver zum Senden und Empfangen von E-Mails verwenden.
  • mailbox :enthält Informationen zu jeder E-Mail-Adresse, einschließlich gehashtem Passwort und dem Speicherort von E-Mail-Dateien.
  • alias :enthält den Alias ​​jeder E-Mail-Adresse.

Wenn Sie interessiert sind, können Sie überprüfen, welche Spalten jede Tabelle enthält. Der folgende Befehl zeigt uns beispielsweise die Spalten in der domain Tabelle.

DESCRIBE domain;

Ausgabe:

+-------------+--------------+------+-----+---------------------+-------+
| Field       | Type         | Null | Key | Default             | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain      | varchar(255) | NO   | PRI | NULL                |       |
| description | varchar(255) | NO   |     | NULL                |       |
| aliases     | int(10)      | NO   |     | 0                   |       |
| mailboxes   | int(10)      | NO   |     | 0                   |       |
| maxquota    | bigint(20)   | NO   |     | 0                   |       |
| quota       | bigint(20)   | NO   |     | 0                   |       |
| transport   | varchar(255) | NO   |     | NULL                |       |
| backupmx    | tinyint(1)   | NO   |     | 0                   |       |
| created     | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| modified    | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| active      | tinyint(1)   | NO   |     | 1                   |       |
+-------------+--------------+------+-----+---------------------+-------+

Melden Sie sich von der MySQL/MariaDB-Konsole ab.

EXIT;

Schritt 10:Konfigurieren Sie Postfix für die Verwendung der MySQL/MariaDB-Datenbank

Standardmäßig stellt Postfix E-Mails nur an Benutzer mit einem lokalen Unix-Konto zu. Damit es E-Mails an virtuelle Benutzer liefert, deren Informationen in der Datenbank gespeichert sind, müssen wir Postfix so konfigurieren, dass es virtuelle Mailbox-Domains verwendet.

Zuerst müssen wir MySQL-Zuordnungsunterstützung für Postfix hinzufügen, indem wir postfix-mysql installieren Paket.

sudo apt install postfix-mysql

Bearbeiten Sie dann die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu.

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Wo:

  • virtual_mailbox_domains verweist auf eine Datei, die Postfix mitteilt, wie Domain-Informationen aus der Datenbank nachzuschlagen sind.
  • virtual_mailbox_maps verweist auf Dateien, die Postfix mitteilen, wie E-Mail-Adressen in der Datenbank gesucht werden sollen.
  • virtual_alias_maps verweist auf Dateien, die Postfix mitteilen, wie es Aliase in der Datenbank nachschlagen soll.

Wir möchten dovecot verwenden, um eingehende E-Mails an den Nachrichtenspeicher der virtuellen Benutzer zu liefern, also fügen Sie auch die folgende Zeile am Ende dieser Datei hinzu.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Speichern und schließen Sie die Datei. Als nächstes müssen wir die .cf erstellen Dateien einzeln. Erstellen Sie das SQL-Verzeichnis.

sudo mkdir /etc/postfix/sql/

Erstellen Sie die mysql_virtual_domains_maps.cf Datei.

sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf

Fügen Sie den folgenden Inhalt hinzu. Ersetzen Sie password mit dem Postfixadmin-Passwort, das Sie in Schritt 2 festgelegt haben.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100

Erstellen Sie die mysql_virtual_mailbox_maps.cf Datei.

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Fügen Sie den folgenden Inhalt hinzu.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100

Erstellen Sie die Datei mysql_virtual_alias_domain_mailbox_maps.cf Datei.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Fügen Sie den folgenden Inhalt hinzu.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

Erstellen Sie die mysql_virtual_alias_maps.cf Datei.

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

Fügen Sie den folgenden Inhalt hinzu.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

Erstellen Sie die mysql_virtual_alias_domain_maps.cf Datei.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

Fügen Sie den folgenden Inhalt hinzu.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Erstellen Sie die mysql_virtual_alias_domain_catchall_maps Datei.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Fügen Sie den folgenden Inhalt hinzu.

# handles catch-all settings of target-domain
user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Da die Datenbankpasswörter im Klartext gespeichert werden, sollten sie nur vom Benutzer Postfix und Root gelesen werden können, was durch Ausführen der folgenden beiden Befehle erreicht wird.

sudo chmod 0640 /etc/postfix/sql/*
sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/

Als nächstes müssen wir den Wert von mydestination ändern Parameter in Postfix. Aktuellen Wert anzeigen:

postconf mydestination

Beispielausgabe:

mydestination = $myhostname, linuxbabe.com, localhost.$mydomain, localhost

Der mydestination Der Parameter enthält eine Liste von Domänennamen, die E-Mails erhalten, die an lokale Unix-Konten gesendet werden. In Teil 1 haben wir den Apex-Domainnamen (wie linuxbabe.com) zu mydestination hinzugefügt . Da wir ein virtuelles Postfach verwenden werden, müssen wir den Apex-Domänennamen aus der Liste entfernen, indem wir den folgenden Befehl ausführen.

sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"

Öffnen wir nun erneut die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu.

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

Die erste Zeile definiert den Basisspeicherort von Maildateien. Die verbleibenden 3 Zeilen definieren, welche Benutzer-ID und Gruppen-ID Postfix beim Zustellen eingehender E-Mails an das Postfach verwendet. Wir verwenden die Benutzer-ID 2000 und die Gruppen-ID 2000.

Speichern und schließen Sie die Datei. Starten Sie Postfix neu, damit die Änderungen wirksam werden.

sudo systemctl restart postfix

Als nächstes müssen wir einen Benutzer namens vmail erstellen mit ID 2000 und eine Gruppe mit ID 2000.

sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home

Erstellen Sie den Standort der Mail-Basis.

sudo mkdir /var/vmail/

Erstellen Sie vmail als Eigentümer.

sudo chown vmail:vmail /var/vmail/ -R

Schritt 11:Konfigurieren Sie Dovecot für die Verwendung der MySQL/MariaDB-Datenbank

Wir müssen auch den Dovecot-IMAP-Server konfigurieren, um Benutzerinformationen aus der Datenbank abzufragen. Führen Sie zuerst den folgenden Befehl aus, um MySQL-Unterstützung für Dovecot hinzuzufügen.

sudo apt install dovecot-mysql

Bearbeiten Sie dann die 10-mail.conf Datei.

sudo nano /etc/dovecot/conf.d/10-mail.conf

In Teil 2 haben wir den folgenden mail_location verwendet . E-Mail-Nachrichten werden unter Maildir gespeichert Verzeichnis unter dem Home-Verzeichnis jedes Benutzers.

mail_location = maildir:~/Maildir

Da wir jetzt eine virtuelle Postfachdomäne verwenden, müssen wir mail_home aktivieren für die virtuellen Benutzer durch Hinzufügen der folgenden Zeile in der Datei, da virtuelle Benutzer standardmäßig keine Home-Verzeichnisse haben.

mail_home = /var/vmail/%d/%n/

Speichern und schließen Sie die Datei. Bearbeiten Sie dann die 10-auth.conf Datei.

sudo nano /etc/dovecot/conf.d/10-auth.conf

In Teil 2 haben wir den folgenden Wert für auth_username_format verwendet .

auth_username_format = %n

Der %n würde die Domain fallen lassen, wenn sie gegeben wäre. Da wir in Teil 2 ein lokales Unix-Konto für den Benutzernamen jeder E-Mail-Adresse verwendet haben, müssen wir %n verwenden um die Domäne zu löschen, sodass Benutzer sich mit der vollständigen E-Mail-Adresse anmelden konnten.

Jetzt verwenden wir virtuelle Postfachdomänen, was bedeutet, dass der Benutzername jeder E-Mail-Adresse den Domänenteil enthält, also müssen wir das auth_username_format ändern wie folgt. %u wird die Domain nicht löschen. Dadurch können sich Benutzer mit der vollständigen E-Mail-Adresse anmelden.

auth_username_format = %u

Entkommentieren Sie die folgende Zeile am Ende dieser Datei, damit Dovecot Benutzerinformationen aus der MySQL/MariaDB-Datenbank abfragen kann.

!include auth-sql.conf.ext

Jetzt möchten Sie wahrscheinlich nicht, dass lokale Unix-Benutzer E-Mails senden, ohne E-Mail-Adressen in PostfixAdmin zu registrieren, und kommentieren Sie dann die folgende Zeile aus, indem Sie das #-Zeichen am Anfang hinzufügen, damit Dovecot den lokalen /etc/passwd oder /etc/shadow Datei.

#!include auth-system.conf.ext

Es kann hilfreich sein, die folgenden zwei Zeilen in diese Datei einzufügen, um Anmeldeprobleme zu beheben. Die Anmeldefehler werden in /var/log/mail.log protokolliert Datei. (Sobald sich Benutzer problemlos anmelden können, können Sie die folgenden zwei Zeilen auskommentieren.)

auth_debug = yes
auth_debug_passwords = yes

Speichern und schließen Sie die Datei.

Bearbeiten Sie die dovecot-sql.conf.ext Datei.

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Hier ist der Inhalt, den Sie in dieser Datei haben sollten. Standardmäßig sind alle Zeilen in dieser Datei auskommentiert, sodass Sie sie einfach kopieren und unten einfügen können. Ersetzen Sie password mit dem Postfixadmin-Passwort, das Sie in Schritt 2 festgelegt haben.

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=password

default_pass_scheme = ARGON2I

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

iterate_query = SELECT username AS user FROM mailbox

Starten Sie Dovecot neu.

sudo systemctl restart dovecot

Wenn ein Benutzer versucht, sich anzumelden, verwendet Dovecot den Argon2-Algorithmus, um einen Passwort-Hash aus dem vom Benutzer eingegebenen Passwort zu generieren und ihn dann mit dem in der Datenbank gespeicherten Passwort-Hash zu vergleichen.

Schritt 12:Domäne und Postfächer in PostfixAdmin hinzufügen

Melden Sie sich als Administrator bei der PostfixAdmin-Weboberfläche an. Klicken Sie auf die Domain List und wählen Sie New Domain um eine Domäne hinzuzufügen. Sie können auswählen, wie viele Aliase und Postfächer für diese Domain zulässig sind.

Klicken Sie dann auf Virtual List und wählen Sie Add Mailbox um eine neue E-Mail-Adresse für Ihre Domain hinzuzufügen.

Als Nächstes können Sie Ihren Desktop-E-Mail-Client wie Mozilla Thunderbird öffnen und ein E-Mail-Konto hinzufügen.

  • Wählen Sie im Abschnitt für eingehende Server das IMAP-Protokoll aus und geben Sie mail.your-domain.com ein Wählen Sie als Servernamen Port 143 und STARTTLS. Wählen Sie normal password als Authentifizierungsmethode.
  • Wählen Sie im ausgehenden Abschnitt das SMTP-Protokoll aus und geben Sie mail.your-domain.com ein Wählen Sie als Servernamen Port 587 und STARTTLS. Wählen Sie normal password als Authentifizierungsmethode.

Hinweis :Sie können auch Port 993 mit SSL/TLS-Verschlüsselung für IMAP und Port 465 mit SSL/TLS-Verschlüsselung für SMTP verwenden. Das sollten Sie nicht Verwenden Sie Port 25 als SMTP-Port in E-Mail-Clients, um ausgehende E-Mails zu übermitteln.

Sie sollten jetzt in der Lage sein, sich mit Ihrem eigenen E-Mail-Server zu verbinden und E-Mails mit Ihrem Desktop-E-Mail-Client zu senden und zu empfangen! Beachten Sie, dass Sie sich jetzt nicht mit lokalen Unix-Konten anmelden können. Sie müssen sich mit dem virtuellen Benutzer anmelden, der über die PostfixAdmin-Weboberfläche erstellt wurde.

Tipps zur Fehlerbehebung

Als Faustregel gilt, dass Sie immer das Mail-Log (/var/log/mail.log) überprüfen sollten ) auf Ihrem Mailserver, wenn ein Fehler auftritt. Im Folgenden finden Sie eine Liste mit spezifischen Fehlern und Tipps zur Fehlerbehebung.

Anmeldung über E-Mail-Clients nicht möglich

Wenn Sie sich von einem Desktop-Mail-Client nicht bei Ihrem Mailserver anmelden können, scannen Sie Ihren Mailserver, um festzustellen, ob die Ports offen sind. Beachten Sie, dass Sie den folgenden Befehl von einem anderen Linux-Computer oder -Server ausführen sollten. Wenn Sie es auf Ihrem Mailserver ausführen, erscheinen die Ports immer offen.

sudo nmap mail.your-domain.com

Und überprüfen Sie, ob Dovecot ausgeführt wird.

systemctl status dovecot

Sie können auch das E-Mail-Protokoll überprüfen (/var/log/mail.log ), was Ihnen einige Hinweise geben kann. Wenn Dovecot nicht gestartet werden kann, wird der Fehler möglicherweise nicht in /var/log/mail.log protokolliert Datei können Sie den folgenden Befehl ausführen, um zu sehen, was falsch ist.

sudo journalctl -eu dovecot

Wenn Sie den folgenden Fehler im Mail-Protokoll sehen, haben Sie wahrscheinlich kein korrektes Passwort in der .cf festgelegt Dateien unter /etc/postfix/sql/ Verzeichnis.

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure

Wenn Sie den folgenden Fehler im E-Mail-Protokoll sehen, liegt das daran, dass Sie vergessen haben, mail_location = maildir:~/Maildir hinzuzufügen in /etc/dovecot/conf.d/10-mail.conf Datei.

open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775

Cloudflare-DNS

Wie ich in Teil 1 gesagt habe, sollten Sie, wenn Sie den Cloudflare-DNS-Dienst verwenden, die CDN-Funktion (Proxy) nicht aktivieren, wenn Sie einen DNS-A-Eintrag und einen AAAA-Eintrag für den Hostnamen Ihres Mailservers erstellen. Cloudflare unterstützt keinen SMTP- oder IMAP-Proxy.

Relay-Zugriff verweigert

Wenn Sie die Meldung „Relay-Zugriff verweigert sehen ” Fehler beim Versuch, E-Mails von einem E-Mail-Client zu senden, verwenden Sie höchstwahrscheinlich Port 25 als SMTP-Port in Ihrem E-Mail-Client. Wie ich vor einer Weile sagte, sollten Sie Port 587 verwenden oder 465 als SMTP-Port in E-Mail-Clients (Mozilla Thunberbird, Microsoft Outlook usw.), um ausgehende E-Mails zu übermitteln. Port 25 sollte für die Kommunikation von SMTP-Server zu SMTP-Server verwendet werden.

iOS Mail-App

Wenn Sie die iOS Mail-App verwenden, um sich bei Ihrem Mailserver anzumelden, und der folgende Fehler auftritt.

Sie können versuchen, das Problem zu beheben, indem Sie die SSL-Verschlüsselung sowohl für SMTP als auch für IMAP erzwingen.

Unterhaltsame Tatsache :Es scheint, dass die iOS-Mail-App Schwierigkeiten hat, STARTTLS auf IMAP-Port 143 zu unterstützen, aber sie unterstützt STARTTLS auf dem Übermittlungsport 587.

Vorübergehender Suchfehler

Wenn Ihr E-Mail-Server einige Zeit einwandfrei funktioniert hat, finden Sie plötzlich den folgenden Fehler im E-Mail-Protokoll,

Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure;  proto=ESMTP
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure

Es ist wahrscheinlich, dass Ihre MariaDB/MySQL-Datenbank irgendwie gestoppt wurde. Sie können den folgenden Befehl verwenden, um zu überprüfen, wann Ihr Datenbankserver gestoppt wurde.

sudo journalctl -eu mariadb

oder

sudo journalctl -eu mysql

Eine häufige Ursache für diese Situation ist, dass Ihr Server nicht genügend Arbeitsspeicher hat. Überprüfen Sie, ob Ihr Server über genügend Arbeitsspeicher verfügt.

htop

oder

free -m

Den Junk-Ordner und den Papierkorb automatisch bereinigen

Um E-Mails im Junk-Ordner für alle Benutzer zu löschen, können Sie

ausführen
sudo doveadm expunge -A mailbox Junk all

Um E-Mails im Papierkorbordner zu löschen, führen Sie

aus
sudo doveadm expunge -A mailbox Trash all

Ich denke, es ist besser, E-Mails zu löschen, die länger als zwei Wochen im Junk- oder Papierkorbordner waren, anstatt alle E-Mails zu löschen.

sudo doveadm expunge -A mailbox Junk savedbefore 2w

Fügen Sie dann einen Cron-Job hinzu, um den Job zu automatisieren.

sudo crontab -e

Fügen Sie die folgende Zeile hinzu, um jeden Tag den Junk- und Papierkorbordner zu bereinigen.

@daily doveadm expunge -A mailbox Junk savedbefore 2w;doveadm expunge -A mailbox Trash savedbefore 2w

Um einen Bericht zu erhalten, wenn ein Cron-Job einen Fehler erzeugt, können Sie die folgende Zeile über allen Cron-Jobs hinzufügen.

MAILTO="[email protected]"

Speichern und schließen Sie die Datei. Und fertig.

Benutzerpasswort in PostfixAdmin ändern

Benutzer können sich unter https://postfixadmin.example.com/users/login.php bei PostfixAdmin anmelden , und ändern Sie dann ihre Passwörter.

Einschränken des Zugriffs auf Sendmail

Standardmäßig kann jeder lokale Benutzer sendmail verwenden binär, um ausgehende E-Mails zu senden. Da Ihr Mailserver nun virtuelle Postfächer verwendet, möchten Sie vielleicht den Zugriff auf sendmail einschränken binär nur an vertrauenswürdige lokale Benutzer, sodass ein böswilliger Benutzer sie nicht verwenden kann, um eine große Menge an E-Mails zu senden, um den Ruf Ihres Mailservers zu schädigen. Bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile am Ende dieser Datei hinzu, damit nur der Benutzer root und www-data E-Mails über sendmail senden kann. Sie können auch andere Benutzernamen hinzufügen.

authorized_submit_users = root,www-data

Speichern und schließen Sie die Datei. Starten Sie dann Postfix neu.

sudo systemctl restart postfix

Nächster Schritt

Ich hoffe, dieses Tutorial hat Ihnen geholfen, PostfixAdmin unter Ubuntu 20.04 zu installieren und zu verwenden, um virtuelle Postfächer zu erstellen. In Teil 4 zeige ich Ihnen, wie Sie SPF und DKIM mit Postfix einrichten, um die E-Mail-Zustellbarkeit zu verbessern, und in einem zukünftigen Tutorial werde ich Ihnen zeigen, wie Sie mehrere Domains mit PostfixAdmin hosten.

Wenn Sie über einen Webbrowser auf E-Mails zugreifen möchten, empfehle ich Roundcube, einen sehr beliebten und funktionsreichen Open-Source-Webmail-Client. Wenn Sie diesen Beitrag nützlich fanden, abonnieren Sie wie immer unseren kostenlosen Newsletter, um weitere Tipps und Tricks zu erhalten. Pass auf dich auf 🙂


Ubuntu
  1. So richten Sie den Zimbra-Mailserver unter Ubuntu 16 ein

  2. Installieren Sie den Apache-Webserver auf Ubuntu 12.10

  3. Einfacher Ubuntu-FTP-Server?

  4. Richten Sie einen Mailserver mit PostfixAdmin und MariaDB auf CentOS 7 ein

  5. So installieren Sie einen Mailserver mit PostfixAdmin unter Ubuntu 20.04

So erstellen Sie eine virtuelle Python 3-Umgebung unter Ubuntu 20.04

So erstellen Sie einen umfassenden Mailserver unter Ubuntu

So installieren Sie den Postfix-Mailserver unter Ubuntu 20.04

Teil 3:PostfixAdmin – Virtuelle Postfächer auf CentOS 8/RHEL 8 Mailserver erstellen

So installieren Sie den Mailserver mit PostfixAdmin unter CentOS 7

So erstellen Sie einen Minecraft-Server unter Ubuntu 20.04