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 Sienormal 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 Sienormal 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 🙂