GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

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

In früheren Artikeln haben wir besprochen, wie Sie Ihren eigenen Mailserver unter CentOS 8/RHEL 8 von Grund auf neu einrichten. In Teil 1 und Teil 2 dieser Tutorial-Reihe haben wir gelernt, wie man einen Postfix-SMTP-Server einrichtet und Dovecot IMAP-Server , aber bisher können wir nur E-Mail-Adressen für Benutzer mit lokalem Unix-Konto haben. Dieses Tutorial zeigt Ihnen, wie Sie mit PostfixAdmin virtuelle Postfächer auf dem Mailserver CentOS 8/RHEL 8 erstellen , eine webbasierte Open-Source-Schnittstelle zum Konfigurieren und Verwalten eines Postfix-basierten E-Mail-Servers für viele Domains 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 (Ich persönlich denke, dass diese Funktion in Roundcube Webmail besser umgesetzt 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

Ich gehe davon aus, dass Sie Teil 1 und Teil 2 dieser Tutorial-Reihe befolgt haben. Wenn Sie Mailserver-Tutorials auf anderen Websites gefolgt sind, empfehle ich, Ihre Konfigurationen zu bereinigen und mit meiner Tutorial-Reihe neu zu beginnen, 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 auf CentOS 8/RHEL 8 installieren

PostfixAdmin ist in PHP geschrieben und benötigt eine Datenbank (MySQL/MariaDB, PostgreSQL oder SQLite). Dieser Artikel verwendet MariaDB, einen Drop-in-Ersatz für MySQL. 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 CentOS 8/RHEL 8 zu installieren.

sudo dnf install mariadb-server mariadb -y

Nachdem es installiert ist, müssen wir es starten.

sudo systemctl start mariadb

Autostart beim Systemstart aktivieren.

sudo systemctl enable mariadb

Status prüfen:

systemctl status mariadb

Ausgabe:

● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 18608 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 5092)
   Memory: 77.0M
   CGroup: /system.slice/mariadb.service
           └─18608 /usr/libexec/mysqld --basedir=/usr

Aktiviert “ zeigt an, dass der automatische Start beim Booten aktiviert ist, und wir können sehen, dass der MariaDB-Server ausgeführt wird. Jetzt müssen wir das Sicherheitsskript ausführen.

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 der Buchstabe Y wird groß geschrieben, was bedeutet, dass es die Standardantwort ist.)

Schritt 2:PostfixAdmin auf CentOS 8/RHEL 8 Server herunterladen

Melden Sie sich bei Ihrem Mailserver an und laden Sie dann die PostfixAdmin-Installationsdatei auf Ihren Server herunter. Gehen Sie zur PostfixAdmin-Gitbub-Seite, um die neueste Version herunterzuladen. Sie können das wget verwenden Tool, um es von der Befehlszeile herunterzuladen. Der Download-Link ist immer im untenstehenden Format verfügbar. Wenn eine neue Version herauskommt, ersetzen Sie einfach 3.3.8 durch die neue Versionsnummer.

sudo dnf install wget

wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz

Extrahieren Sie das Archiv nach dem Herunterladen.

Wenn Sie Apache verwenden, entpacken Sie es nach /var/www/ Verzeichnis und benennen Sie es in postfixadmin um .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/
sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin

Wenn Sie Nginx verwenden, extrahieren Sie es nach /usr/share/nginx/ Verzeichnis und benennen Sie es in postfixadmin um .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/
sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin

Schritt 3:Berechtigungen einrichten

PostfixAdmin benötigt ein templates_c Verzeichnis, und der Webserver benötigt Lese- und Schreibzugriff auf dieses Verzeichnis. Wir müssen auch den SELinux-Kontext ändern, um ihn beschreibbar zu machen. Führen Sie also die folgenden Befehle aus.

Apache

sudo mkdir /var/www/postfixadmin/templates_c
sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R

Nginx

sudo mkdir /usr/share/nginx/postfixadmin/templates_c
sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R

Standardmäßig verbietet SELinux Apache/Nginx, Netzwerkanfragen an andere Server zu stellen, aber später muss Apache/Nginx den TLS-Zertifikatsstatus vom Let’s Encrypt CA-Server für OCSP-Stapling anfordern, also müssen wir SELinux mitteilen, Apache/Nginx mit dem Folgenden zuzulassen Befehl.

sudo setsebool -P httpd_can_network_connect 1

Wenn Sie Nginx verwenden, müssen Sie auch den folgenden Befehl ausführen, um dem Nginx-Benutzer Lese- und Schreibberechtigungen für 3 Verzeichnisse zu erteilen.

sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/

Starten Sie Apache/Nginx neu.

sudo systemctl restart httpd

sudo systemctl restart nginx

Ab Dovecot 2.3.11 benötigt der Webserver-Benutzer die Berechtigung zum Lesen des TLS-Zertifikats von Let’s Encrypt, um Passwort-Hashing durchzuführen. Führen Sie die folgenden beiden Befehle aus, um Berechtigungen zu erteilen.

Apache

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

Nginx

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

Schritt 4:Erstellen Sie eine Datenbank und einen Benutzer für PostfixAdmin

Melden Sie sich mit dem folgenden Befehl als root bei der MySQL/MariaDB-Shell an. Sie müssen das MySQL/MariaDB-Root-Passwort eingeben.

mysql -u root -p

Sobald Sie angemeldet sind, erstellen Sie mit dem folgenden Befehl eine Datenbank für PostfixAdmin. Ich habe es postfixadmin genannt , aber Sie können einen beliebigen Namen verwenden. (Lassen Sie das Semikolon nicht aus.)

create database postfixadmin;

Geben Sie dann den folgenden Befehl ein, um einen Datenbankbenutzer für PostfixAdmin zu erstellen. Dieser Befehl gewährt dem Benutzer auch alle Berechtigungen der postfixadmin-Datenbank. Ersetzen Sie postfixadmin_password mit Ihrem bevorzugten Passwort. Beachten Sie, dass das Passwort nicht den # enthalten sollte Zeichen, oder Sie können sich später möglicherweise nicht anmelden.

grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';

Leeren Sie die Berechtigungstabelle, damit die Änderungen wirksam werden, und verlassen Sie dann die MariaDB-Shell.

flush privileges;

exit;

Schritt 5:PostfixAdmin konfigurieren

Die standardmäßige PostfixAdmin-Konfigurationsdatei ist config.inc.php . Wir müssen eine config.local.php erstellen Datei und benutzerdefinierte Konfigurationen hinzufügen.

Apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

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

Fügen Sie die folgenden Zeilen in die Datei ein, damit PostfixAdmin eine Verbindung zur MySQL/MariaDB-Datenbank herstellen kann. Ersetzen Sie postfixadmin_password mit dem echten PostfixAdmin-Passwort, das in Schritt 4 erstellt wurde.

<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['encrypt'] = 'dovecot:BLF-CRYPT';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";

Speichern und schließen Sie die Datei. Beachten Sie, dass wir das Passwortschema BLF-CRYPT verwenden werden.

Schritt 6: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/httpd/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.

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /var/www/postfixadmin/public/

  ErrorLog /var/log/httpd/postfixadmin_error.log
  CustomLog /var/log/httpd/postfixadmin_access.log combined

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

  <Directory /var/www/postfixadmin/public/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

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

sudo systemctl reload httpd

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/nginx/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-fpm/www.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 7:Erforderliche und empfohlene PHP-Module installieren

PostfixAdmin benötigt die php-imap Modul zum Erstellen von Unterordnern in Postfächern, aber php-imap ist nicht im standardmäßigen CentOS 8/RHEL 8-Repository enthalten, daher müssen wir das Remi-Repository verwenden, um dieses PHP-Modul zu installieren.

Installieren Sie das Remi Repo.

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Dann PHP-Modul-Streams zurücksetzen.

sudo dnf module reset php

Aktivieren Sie php:remi-7.4 Modul-Stream.

sudo dnf module enable php:remi-7.4 -y

Dann können Sie den folgenden Befehl ausführen, um PHP-Module zu installieren, die von PostfixAdmin benötigt oder empfohlen werden.

sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp

Wir müssen den folgenden Befehl ausführen, um SELinux anzuweisen, Apache zuzulassen um PHP-Code über PHP-FPM auszuführen.

sudo setsebool -P httpd_execmem 1

Wenn Sie Nginx verwenden , bearbeiten Sie die PHP-FPM-Konfigurationsdatei:

nano /etc/php-fpm.d/www.conf

Standardmäßig läuft PHP-FPM als apache Benutzer. Da Sie den Nginx-Webserver verwenden, müssen wir ihn ändern. Suchen Sie die folgenden zwei Zeilen.

user = apache
group = apache

Ändern Sie sie in

user = nginx
group = nginx

Speichern und schließen Sie die Datei. Starten Sie dann PHP-FPM.

sudo systemctl start php-fpm

Autostart beim Systemstart aktivieren.

sudo systemctl enable php-fpm

Starten Sie Apache oder Nginx neu.

sudo systemctl restart httpd

sudo systemctl restart nginx

Schritt 8:HTTPS aktivieren

Um den HTTP-Datenverkehr zu verschlüsseln, können wir HTTPS aktivieren, indem wir ein kostenloses TLS-Zertifikat installieren, das von Let’s Encrypt ausgestellt wurde.

Wenn Sie Apache verwenden, 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, führen Sie 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:

  • --apache :Verwenden Sie das Apache-Plugin.
  • --nginx :Verwenden Sie das nginx-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.
  • --email :E-Mail, die für die Registrierung und den Wiederherstellungskontakt verwendet wird.
  • -d Flag folgt eine durch Kommas getrennte Liste von Domänennamen. Sie können bis zu 100 Domainnamen hinzufügen.

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

Schritt 9:Generieren Sie eine benutzerdefinierte SELinux-Richtlinie für den Webserver

Während der Installation muss PostfixAdmin die Dovecot-Konfigurationsdateien lesen, um ein Passwort zu erstellen. Standardmäßig erlaubt SELinux dem Webserver nicht, Dovecot-Konfigurationsdateien zu lesen. Wir müssen eine benutzerdefinierte SELinux-Richtlinie erstellen, um diese Aktion zuzulassen.

Erforderliche Pakete installieren.

sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel

Generieren Sie eine benutzerdefinierte Richtlinie für httpd. (Wenn Sie Nginx verwenden, ersetzen Sie httpd mit nginx .)

sudo sepolicy generate --init /usr/sbin/httpd

Bearbeiten Sie die Type Enforcement-Datei.

sudo nano httpd.te

Fügen Sie am Ende dieser Datei die folgende Zeile hinzu, damit Apache/Nginx Dovecot-Konfigurationsdateien lesen kann.

dovecot_read_config(httpd_t)

Speichern und schließen Sie die Datei. Installieren Sie dann die neue SELinux-Richtlinie.

sudo ./httpd.sh

Jetzt sollte Apache/Nginx Dovecot-Konfigurationsdateien lesen können.

Wenn Sie nicht wissen, was Sie zu httpd.te hinzufügen sollen führen Sie den folgenden Befehl aus, nachdem eine SELinux-Verweigerung erfolgt ist.

sudo ausearch -m AVC -ts recent | audit2allow -R

audit2allow wird Änderungen vorschlagen.

Schritt 10: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. Wenn Sie Nginx verwenden, ändern Sie apache zu nginx .

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

unix_listener stats-writer {
    user = apache
    group = apache
    mode = 0660
  }
}

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

Apache

sudo gpasswd -a apache dovecot

NGinx

sudo gpasswd -a nginx dovecot

Starten Sie Dovecot neu.

sudo systemctl restart dovecot

Schritt 11:Beenden Sie die Installation im Webbrowser

Gehen Sie zu postfixadmin.example.com/setup.php um den webbasierten Einrichtungsassistenten auszuführen. Zuerst müssen Sie ein Setup-Passwort für PostfixAdmin erstellen.

Nachdem der Passwort-Hash erstellt wurde, zeigt PostfixAdmin eine Zeile wie unten an.

$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';

Sie müssen die config.local.php öffnen Datei.

Apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

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

Fügen Sie die Zeilenanzeige auf der PostfixAdmin-Setup-Seite am Ende der Datei hinzu, wie unten gezeigt.

Nach dem Speichern der Datei müssen Sie die Setup-Seite von PostfixAdmin aktualisieren und das Setup-Passwort erneut eingeben und dann das Administratorkonto erstellen. 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.

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

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

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

Dies liegt daran, dass der Benutzer des Webservers keine Berechtigung zum Lesen des TLS-Zertifikats von Let’s Encrypt hat. Um das Problem zu beheben, führen Sie die folgenden beiden Befehle aus, um Berechtigungen zu erteilen.

Apache

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

Nginx

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

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,

mysql -u root -p

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.

Schritt 12: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 dnf 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. (Im Nano-Texteditor können Sie Ctrl+W drücken , dann Ctrl+V zum Ende einer Datei zu springen.)

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 postfixadmin_password mit dem postfixadmin-Passwort, das Sie in Schritt 4 festgelegt haben.

user = postfixadmin
password = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = linuxbabe.com, $myhostname, 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 --uid 2000 --user-group --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

Wir müssen auch den SELinux-Kontext ändern, um ihn beschreibbar zu machen.

sudo chcon -t mail_spool_t /var/vmail/ -R

Schritt 13: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 dnf 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 die Domäne wegfallen zu lassen, 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 der Datei, damit Dovecot Benutzerinformationen aus der 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/maillog 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.

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

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

Hier ist der Inhalt, den Sie haben sollten. Ersetzen Sie postfixadmin_password mit dem postfixadmin-Passwort, das Sie in Schritt 4 festgelegt haben.

driver = mysql

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

default_pass_scheme = BLF-CRYPT

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

Speichern und schließen Sie die Datei. Und starten Sie Dovecot neu.

sudo systemctl restart dovecot

Wenn ein Benutzer versucht, sich anzumelden, generiert Dovecot einen BLF-CRYPT-Hash aus dem vom Benutzer eingegebenen Passwort und vergleicht ihn dann mit dem in der Datenbank gespeicherten Passwort-Hash.

Schritt 14: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.

Starten Sie jetzt Ihren Desktop-E-Mail-Client wie Mozilla Thunderbird und fügen Sie ein E-Mail-Konto hinzu. Wenn Thunderbird Ihre Mailserver-Konfiguration wie unten gefunden hat, klicken Sie einfach auf Fertig Schaltfläche und Sie können E-Mails lesen und senden.

Wenn Thunderbird Ihre Mailserver-Konfiguration nicht gefunden hat, klicken Sie auf Manuelle Konfiguration Schaltfläche, um die Details Ihres Mailservers einzugeben.

  • 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!

Tipps zur Fehlerbehebung

Als Faustregel sollten Sie immer das E-Mail-Protokoll (/var/log/maillog ) 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/maillog ), was Ihnen einige Hinweise geben kann. Wenn Dovecot nicht gestartet werden kann, wird der Fehler möglicherweise nicht in /var/log/maillog 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 should be used for SMTP server to SMTP server communications.

iOS Mail App

If you use the iOS Mail app to log into your mail server and encounter the following error.

You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.

Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.

Temporary Lookup Failure

If your mail server was working fine for some time, but suddenly you find the following error in the mail log,

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

It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.

sudo journalctl -eu mariadb

oder

sudo journalctl -eu mysql

A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.

htop

oder

free -m

Change User Password in PostfixAdmin

Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php , then change their passwords.

Automatically Clean the Junk Folder and Trash Folder

To delete emails in Junk folder for all users, you can run

sudo doveadm expunge -u *@example.com mailbox Junk all

To delete emails in Trash folder for all users, run

sudo doveadm expunge -u *@example.com mailbox Trash all

I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.

sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w

Then add a cron job to automate the job.

sudo crontab -e

Add the following line to clean Junk and Trash folder every day

@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w

Restricting Access to Sendmail

By default, any local user can use the sendmail binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.

sudo nano /etc/postfix/main.cf

Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.

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

I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.

If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful,  subscribe to our free newsletter to get more tips and tricks. Pass auf dich auf 🙂


Cent OS
  1. Installieren Sie den Apache-Webserver CentOS 6 / RHEL 6

  2. So installieren Sie Puppet auf RHEL 8/CentOS 8

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

  4. So richten Sie einen Mailserver mit PostfixAdmin auf CentOS 7 ein

  5. So erstellen Sie ein SSH-Banner in CentOS/RHEL Server

Samba-Server auf CentOS 8/RHEL 8 für die Dateifreigabe einrichten

Hosten Sie mehrere E-Mail-Domänen in PostfixAdmin auf CentOS/RHEL

Installieren und konfigurieren Sie OpenDKIM auf dem Mailserver CentOS 8/RHEL 8

Teil 4:SPF und DKIM mit Postfix auf CentOS 8/RHEL 8 Mailserver einrichten

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

So installieren Sie den Mailserver mit PostfixAdmin unter CentOS 7