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
aussudo 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 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! 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ührensudo doveadm expunge -A mailbox Junk all
Um E-Mails im Papierkorbordner zu löschen, führen Sie
aussudo 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 🙂