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

Postfix-Mailserver-Setup auf Ubuntu 20.04

Verifiziert und getestet am 27.02.2021

Einführung

In diesem Anleitungsartikel führen wir Sie durch den Aufbau eines vollständigen Mailservers unter Ubuntu 20.04 mit Postfix. Das Erstellen eines Linux-Mailservers von Grund auf kann ein schmerzhafter Prozess sein, es sei denn, Sie tun es Tag für Tag, aber wir werden Ihnen zeigen, wie es so einfach wie möglich geht.

Ein Mailserver besteht normalerweise aus einer Reihe verschiedener Pakete, die SMTP, POP3/IMAP, die Speicherung der Mail und Spam-bezogene Aufgaben handhaben, und sie müssen alle miteinander kommunizieren. Hier ist ein Überblick über die Pakete und Ziele für diesen Anleitungsartikel.

Paketübersicht und Konfigurationsschritte

1 – Grundlegende Servervorbereitung
2 – LAMP-Webserver aufbauen
3 – PHP konfigurieren
4 – Apache2 konfigurieren
5 – Memcached installieren und konfigurieren
6 – Installieren die Mailserver-Pakete
7 – Erstellen einer MySQL-Datenbank für den Mailserver
8.1 – Installieren von Postfix Admin
8.2 – Konfigurieren von Postfix Admin
9 – Hinzufügen von Benutzerkonten (Mailboxen) zu Postfix Admin
10 – Erstellen Sie einen Systembenutzer, der virtuelle E-Mail-Verzeichnisse verwaltet
11 – Konfigurieren von Dovecot
12 – Konfigurieren von Spam- und Antivirenfiltern
13 – Konfigurieren von Postfix
14 – Umgekehrter DNS-Lookup
15 – Installieren Sie RoundCube Webmail

Voraussetzungen

– Vollständig aktualisierter Ubuntu 20.04-Server, wenn Sie keinen Ubuntu-Server auf einem Server wie dem Linux-VPS-Hosting von Atlantic.net ausführen.

– Zugriff auf den Domänennamen, für den Sie E-Mail einrichten werden (wir verwenden „email.linuxbuz.com ” in den Beispielen in diesem Artikel).
.

1 – Grundlegende Servervorbereitung

Die Basisinstallation von Ubuntu enthält eine begrenzte Anzahl von Paketen, daher möchten wir als Erstes die Tools installieren, mit denen wir alle Aufgaben erledigen werden.

Stellen Sie zunächst sicher, dass Sie als Root-Benutzerkonto angemeldet sind.

sudo su -

Lassen Sie uns nun die grundlegenden Tools installieren, damit wir Dateien herunterladen und Konfigurationsdateien einfach bearbeiten können.

apt-get install wget nano ssl-cert
  • wget :Paket zum Abrufen von Dateien über HTTP, HTTPS und FTP, die am weitesten verbreiteten Internetprotokolle.
  • Nano :Befehlszeilen-Texteditor mit einfach zu bedienenden Steuerelementen.
  • ssl-cert :Paket, das die Erstellung von SSL-Zertifikaten ermöglicht.

Als Nächstes aktualisieren wir den Hostnamen und den Domänennamen des Servers, sodass diese beim Senden von E-Mails mit dem umgekehrten Zeiger-DNS-Eintrag übereinstimmen, den wir bei Ihrem Hosting-Provider eingerichtet haben. Wir werden auch /etc/hostname aktualisieren Datei. Stellen Sie sicher, dass Sie example durch Ihren echten Hostnamen und Domänennamen ersetzen.

hostnamectl set-hostname email.linuxbuz.com

Jetzt werden wir die Datei /etc/hosts manuell bearbeiten Konfigurationsdatei so, dass sie mit dem gerade eingegebenen Namen übereinstimmt.

nano /etc/hosts

Bearbeiten Sie die erste Zeile und fügen Sie Ihren FQDN (vollständig qualifizierter Domänenname) direkt nach der IP-Adresse 127.0.0.1 hinzu.

127.0.0.1 email.linuxbuz.com lokaler Host

Wir werden jetzt das Standard-SSL-Zertifikat auf dem Server aktualisieren, damit es mit unserem neuen Hostnamen übereinstimmt. Wenn Sie ein SSL-Zertifikat für Ihren Mailserver erworben haben, können Sie diesen Schritt überspringen.

make-ssl-cert generate-default-snakeoil --force-overwrite

Dieser Befehl weist den Server an, das Standard-SSL-Zertifikat des Systems neu zu generieren und zwingt ihn, die ursprünglichen CRT- und KEY-Dateien zu überschreiben.

Wir haben jetzt die grundlegende Servervorbereitung abgeschlossen und können mit der Installation unserer Webserverdienste fortfahren.

[Zurück nach oben]

2 – Bauen Sie den LAMP-Webserver auf

In diesem Schritt werden wir die „LAMP“-Pakete installieren. LAMP steht für Linux, Apache, MySQL und PHP. Diese Pakete zusammen ermöglichen Ihrem Server, dynamische Webdienste mit MySQL-Konnektivität bereitzustellen.

Lassen Sie uns zuerst die Pakete installieren. Dies wird als Aufgabenpaketinstallation bezeichnet.

apt-get install lamp-server^

Um eine Liste der Pakete anzuzeigen, die in dieser Gruppeninstallation enthalten sind, können Sie Folgendes ausführen:

tasksel --task-packages Lampenserver

Nachdem alle Pakete installiert sind, können wir einige zusätzliche PHP-Module installieren. Diese zusätzlichen Module ermöglichen Ihrem Server, APC User Cache für PHP 5, Memcached, cURL, einen XML-Parser und GD-Bildverarbeitung zu unterstützen.

apt-get install php-apcu php-memcache php-curl php-mbstring php-gd php-xml php-imap php-xmlrpc libdbi-perl libdbd-mysql-perl -y

Als nächstes müssen Sie das MySQL-Root-Passwort festlegen und die MySQL-Installation sichern. Sie können dies mit dem folgenden Befehl tun:

mysql_secure_installation

Beantworten Sie alle Fragen wie unten gezeigt:

Neues Passwort:Neues Passwort erneut eingeben:Möchten Sie mit dem angegebenen Passwort fortfahren?(Drücken Sie y|Y für Ja, jede andere Taste für Nein) :YAnonyme Benutzer entfernen? (Drücken Sie y|Y für Yes, jede andere Taste für No) :YDisallow root login remote? (Drücken Sie y|Y für Ja, jede andere Taste für Nein) :YBerechtigungstabellen jetzt neu laden? (Drücken Sie y|Y für Ja, jede andere Taste für Nein) :Y

Melden Sie sich als Nächstes bei MySQL an und ändern Sie die Kennwortrichtlinie auf „Niedrig“:

mysql -u root -pSET GLOBAL validate_password.policy =0;FLUSH PRIVILEGES;EXIT;

[Zurück nach oben]

3 – PHP konfigurieren

Wir werden jetzt die Konfiguration von PHP aktualisieren. Die Standardkonfiguration ist normalerweise für die meisten Systeme ausreichend; Wir möchten jedoch sicherstellen, dass PHP potenziellen Angreifern keine Informationen preisgibt. Wir werden die Datei /etc/php/7.4/apache2/php.ini bearbeiten .

nano /etc/php/7.4/apache2/php.ini

Suchen Sie die Variable expose_php und aktualisieren Sie den Wert von On auf Off . Mit Nano können Sie suchen, indem Sie CTRL-W drücken und geben Sie dann Ihren Suchbegriff ein.

367;;;;;;;;;;;;;;;;;368; Sonstiges;369;;;;;;;;;;;;;;;;;370 371; Entscheidet, ob PHP die Tatsache offenlegen darf, dass es auf dem Server372 installiert ist; (z. B. durch Hinzufügen seiner Signatur zum Header des Webservers). Es ist keine Sicherheit373; Bedrohung in irgendeiner Weise, aber es ermöglicht festzustellen, ob Sie PHP374 verwenden; auf Ihrem Server oder nicht.375; http://php.net/expose-php376 exposure_php =Off377

[Zurück nach oben]

4 – Apache2 konfigurieren

Wir können jetzt mit der Anpassung der Konfiguration der Apache-Webdienste fortfahren. Das Endergebnis für Apache ist, dass es eine einzelne Website mit ein paar laufenden Webanwendungen bedienen wird:Webmail (RoundCube) und Postfix Admin. Der gesamte Datenverkehr wird an (gesicherte) HTTPS-Webdienste geleitet.

Zuerst werden wir die Informationen minimieren, die Apache der Öffentlichkeit zugänglich macht. Mit nano bearbeiten wir die Konfigurationsdatei /etc/apache2/conf-available/security.conf .

nano /etc/apache2/conf-available/security.conf

Suchen Sie nach der Konfigurationsvariablen ServerTokens und setzen Sie den Wert von OS zu Prod .

# ServerTokens# Diese Direktive konfiguriert, was Sie als HTTP-Antwort#-Header des Servers zurückgeben. Der Standardwert ist „Vollständig“, der Informationen über den Betriebssystemtyp# sendet und in Module kompiliert.# Auf einen der folgenden Werte setzen:Vollständig | Betriebssystem | minimal | Kleine | Major | Prod# wobei Full die meisten Informationen und Prod die wenigsten übermittelt. #ServerTokens MinimalServerTokens Prod#ServerTokens Full

Suchen Sie nun nach der Konfigurationsvariablen ServerSignature und setzen Sie den Wert von On auf Off .

# Optional eine Zeile hinzufügen, die die Serverversion und den Namen des virtuellen Hosts# zu servergenerierten Seiten enthält (interne Fehlerdokumente, FTP-Verzeichnis#-Auflistungen, mod_status- und mod_info-Ausgabe usw., aber keine CGI-generierten# Dokumente oder benutzerdefinierten Fehlerdokumente) .# Auf „EMail“ setzen, um auch einen mailto:-Link zum ServerAdmin einzufügen.# Auf einen der folgenden Werte setzen:On | Aus | EMailServerSignatur Aus#ServerSignatur Ein

Sie können diese Konfigurationsdatei jetzt speichern und beenden.

Wir werden jetzt die zusätzlichen Module rewrite aktivieren und ssl in Apache, sodass wir standardmäßigen HTTP-Verkehr an den HTTPS-Port umleiten und SSL-Zertifikate in Apache unterstützen können.

a2enmod rewrite ssla2ensite default-ssl

Wir fahren nun mit der Anpassung der Website-Konfiguration fort. Diese Dateien befinden sich im Verzeichnis /etc/apache2/sites-available . Wir werden die vorhandenen Standardkonfigurationsdateien aktualisieren, um SSL-Dienste zu unterstützen.

Bearbeiten Sie zunächst die Konfigurationsdatei 000-default.conf . Sie können die vorhandene Konfiguration durch die untenstehende ersetzen, ersetzen Sie einfach den ServerName Variable mit Ihrem Hostnamen.

nano /etc/apache2/sites-available/000-default.conf
 # Die Direktive ServerName legt das Anforderungsschema, den Hostnamen und den Port fest, # die der Server verwendet, um sich selbst zu identifizieren. Dies wird beim Erstellen von # Weiterleitungs-URLs verwendet. Im Zusammenhang mit virtuellen Hosts gibt der ServerName # an, welcher Hostname im Host:-Header der Anfrage erscheinen muss, um # mit diesem virtuellen Host übereinzustimmen. Für den standardmäßigen virtuellen Host (diese Datei) ist dieser #-Wert nicht entscheidend, da er trotzdem als letzter Ausweg-Host verwendet wird. # Sie müssen es jedoch für jeden weiteren virtuellen Host explizit festlegen. ServerName email.linuxbuz.com DocumentRoot /var/www/html  Options FollowSymLinks AllowOverride All  # Verfügbare Loglevel:trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # Es ist auch möglich, den Loglevel für bestimmte # Module zu konfigurieren, z. LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log kombiniert # Für die meisten Konfigurationsdateien von conf-available/, die # auf globaler Ebene aktiviert oder deaktiviert sind, ist dies möglich # Fügen Sie eine Zeile nur für einen bestimmten virtuellen Host ein. Beispielsweise aktiviert die # folgende Zeile die CGI-Konfiguration für diesen Host erst, # nachdem sie mit "a2disconf" global deaktiviert wurde. #conf-available/serve-cgi-bin.conf einschließen

Sie können diese Konfigurationsdatei jetzt speichern und beenden.

Wenn Sie kein eigenes SSL-Zertifikat erworben haben, wird die Standard-SSL-Konfigurationsdatei default-ssl.conf des Systems verwendet wird für unsere Bedürfnisse arbeiten. Wenn Sie jedoch ein benutzerdefiniertes SSL-Zertifikat erworben haben, müssen Sie die Konfigurationsdatei bearbeiten und die Variablen SSLCertificateFile aktualisieren , SSLCertificateKeyFile und SSLCertificateChainFile um auf den Speicherort zu verweisen, an dem Sie Ihr Zertifikat und Ihre Schlüsseldateien gespeichert haben (wenden Sie sich an Ihre Zertifizierungsstelle oder Ihren Anbieter, um weitere Unterstützung bei der Konfiguration zu erhalten).

Wir werden jetzt eine .htaccess erstellen Konfigurationsdatei, die Besucher Ihres Webservers dazu zwingt, das HTTPS (SSL)-Protokoll zu verwenden.

nano /var/www/html/.htaccess

Kopieren Sie die folgenden Variablen und fügen Sie sie in die .htaccess ein Konfiguration.

RewriteEngine OnRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [L]

Diese Konfigurationsvariablen weisen Apache an, die mod_rewrite-Engine zu aktivieren und dann Besucher auf HTTP (Port 80) auf die HTTPS-URL (Port 443) umzuleiten.

[Zurück nach oben]

5 – Memcached installieren und konfigurieren

Memcached ist ein hochleistungsfähiges, verteiltes Speicherobjekt-Caching-System. Dieses Paket hilft, dynamische Webanwendungen wie RoundCube und Postfix Webadmin zu beschleunigen.

Zuerst installieren wir das Paket mit apt-get.

apt-get install memcached

Für kleinere Systeme ist die Standardkonfiguration normalerweise ausreichend. Es sperrt den Zugriff auf den Localhost und stellt ausreichend Speicherzuweisungswerte bereit. Wenn Sie jedoch einen größeren Server bauen, der möglicherweise stark ausgelastet ist, werden Sie höchstwahrscheinlich die Speicherzuweisungswerte auf einen höheren Wert als den Standardwert von 64 MB ändern wollen.

Die memcached-Konfigurationsdateien befinden sich unter /etc/memcached.conf .

[Zurück nach oben]

6 – Installieren Sie die Mailserver-Pakete

Wir sind jetzt bereit, die Mailserver-Pakete zu installieren. Auch diese befinden sich in einer tasksel Paketgruppe.

apt-get install mail-server^

Um eine Liste der Pakete anzuzeigen, die in dieser Gruppeninstallation enthalten sind, können Sie Folgendes ausführen:

tasksel --task-packages Mailserver

Während der Paketinstallation wird Postfix Ihnen eine Reihe von Fragen stellen:

  1. Installationskonfigurationstyp –
    Sie sollten „Internet-Site auswählen ” als Konfigurationstyp.
  2. Hostname des Mailservers –
    Achten Sie darauf, denselben Hostnamen (FQDN) einzugeben, den Sie in Schritt 1 verwendet haben
  3. Erstellen Sie ein selbstsigniertes SSL-Zertifikat –
    Wählen Sie die Option „Ja“ aus
  4. Geben Sie den Common Name des SSL-Zertifikats ein –
    Geben Sie denselben Hostnamen (FQDN) ein, den Sie in Schritt 1 verwendet haben

Wir werden jetzt die restlichen Pakete installieren, die für den Mailserver benötigt werden, um MySQL-basierte Benutzer zu unterstützen, sowie die Spam- und Antivirus-Erkennungspakete. (Hinweis:Diese Pakete können über eine einzige apt-get install installiert werden Befehl, wobei jeder Paketname durch ein Leerzeichen getrennt ist, aber sie werden hier der besseren Lesbarkeit halber als separate Befehle dargestellt.)

apt-get install postfix-mysql dovecot-mysql dovecot-imapd postgreyapt-get install amavis clamav clamav-daemon spamassassinapt-get install php-imap

Diese nächste Gruppe optionaler Pakete erweitert die Möglichkeiten der Anti-Spam- und Antivirus-Erkennungspakete, indem sie eine umfassendere Untersuchung angehängter Dateien ermöglicht, die auf Ihrem Mailserver eingehen.

apt-get install libnet-dns-perl pyzor razorapt-get install arj bzip2 cabextract cpio file gzip nomarch pax unzip zip

Lassen Sie uns nun die Apache2-Dienste neu starten, damit sie die neuen Module sehen, die wir bereitgestellt haben.

systemctl startet Apache2 neu

[Zurück nach oben]

7 – Erstellen einer MySQL-Datenbank für den E-Mail-Server

Wir sind jetzt bereit, die Datenbank für unsere Benutzerkonten und andere Mailserverfunktionen zu erstellen.

Zunächst müssen wir uns als Root-Benutzer beim MySQL-Datenbankdienst anmelden. Sie benötigen das Passwort, das Sie zuerst in Schritt #2 eingegeben haben.

mysql -u root -p

Sie sehen nun eine andere Eingabeaufforderung für die Befehlszeile (mysql> ). Dies ist die MySQL-CLI-Konsole, in der Sie Ihre MySQL-Serverdatenbanken und -tabellen verwalten können.

Zuerst werden wir eine neue Datenbank mit dem Namen „mail“ erstellen und dann werden wir ein Systembenutzerkonto mit vollen Berechtigungen für diese neue Datenbank erstellen. Achten Sie darauf, <secure password> zu ersetzen Variable mit einem anderen *neuen* sicheren Passwort für dieses Konto. Verwenden Sie nicht dasselbe Passwort, das Sie für das Root-Benutzerkonto verwendet haben .

DATENBANK-Mail ERSTELLEN;BENUTZER 'mail'@'localhost' ERSTELLEN, IDENTIFIZIERT DURCH 'mypassword';ALLE PRIVILEGIEN AUF mail GEWÄHREN.* AN 'mail'@'localhost' MIT GRANT-OPTION;BERECHTIGUNGEN FLUSHEN;BEENDEN;

Wir haben jetzt die Datenbank eingerichtet, die von Ihren Mailserverdiensten verwendet wird.

[Zurück nach oben]

8.1 – Installation von Postfix Admin

Postfix Admin ist ein webbasiertes Verwaltungstool, das für Postfix entwickelt wurde. Es ist eine PHP-basierte Anwendung, die virtuelle Domänen und Benutzer im Postfix-Stil verarbeitet, die in MySQL oder PostgreSQL gespeichert sind.

Zuerst müssen wir die neueste Version der Anwendung herunterladen. In diesem Beispiel wird Version 2.92 heruntergeladen – überprüfen Sie immer die Version auf der Website des Anbieters, um sicherzustellen, dass Sie die neueste Version erhalten .

wget https://excellmedia.dl.sourceforge.net/project/postfixadmin/postfixadmin-3.3.1/PostfixAdmin%203.3.1.tar.gz

Wir werden nun die Anwendung extrahieren und in das HTML-Verzeichnis /var/www/html/postfixadmin kopieren auf unserem Server.

tar -xvf PostfixAdmin%203.3.1.tar.gzmv postfixadmin-postfixadmin-cc23eba /var/www/html/postfixadmin

Jetzt müssen wir ein Vorlagenverzeichnis erstellen und die Berechtigungen dieses neuen Ordners aktualisieren, damit die Datei www-data Benutzerkonto Zugriff darauf hat.

mkdir /var/www/html/postfixadmin/templates_cchown -R www-data:www-data /var/www/html/postfixadmin

[Zurück nach oben]

8.2 – Postfix-Admin konfigurieren

Wir müssen jetzt einige Konfigurationen in den Postfix-Admin-Dateien aktualisieren. Zuerst werden wir die config.inc.php ändern Datei, damit sie weiß, wie sie mit der Datenbank kommuniziert, die wir gerade in Schritt #7 erstellt haben.

nano /var/www/html/postfixadmin/config.inc.php

Suchen Sie nach der Variable 'configured' und den Wert von false zurücksetzen auf true .

$CONF['configured'] =true;

Suchen Sie nun nach der Variable 'database_' und ersetzen Sie die Werte für Ihre MySQL-Serverkonfiguration. Achten Sie darauf, die Variable mypassword zu ersetzen mit dem Passwort für den Datenbankbenutzer „mail“, das Sie in Schritt #7 eingegeben haben.

$CONF['database_type'] ='mysqli';$CONF['database_host'] ='localhost';$CONF['database_user'] ='mail';$CONF['database_password'] ='mypassword';$CONF['Datenbankname'] ='Mail';

Suchen Sie nun nach der Variable 'admin_email' und ersetzen Sie den Wert durch die E-Mail-Adresse, die Sie für Ihr Administrator-E-Mail-Konto einrichten werden.

$CONF['admin_email'] ='[email protected]';

Suchen Sie nun nach der Variable 'domain_path' und ersetzen Sie den Wert von ‘YES ‘ zu ‘NO ‘.

$CONF['domain_path'] ='NO';

Suchen Sie nun nach der Variable 'domain_in_mailbox' und ersetzen Sie den Wert von ‘NO ‘ zu ‚YES ‘.

$CONF['domain_in_mailbox'] ='YES';

Diese letzten Konfigurationsvariablen definieren nicht den Pfad, in dem die tatsächlichen Benutzerpostfachdaten auf dem Server gespeichert werden. Diese werden später während der Dovecot-Konfigurationsschritte definiert.

Sie können jetzt die Konfigurationsdatei speichern, aber noch nicht beenden!

Wir öffnen jetzt einen Webbrowser, geben die URL Ihres Mailservers ein und verweisen direkt auf die setup.php Konfigurationsseite. Achten Sie darauf, mail.example.tld zu ersetzen mit Ihrem echten Server-Hostnamen.

https://email.linuxbuz.com/postfixadmin/public/setup.php

Wenn Sie auf die URL zugreifen, überprüft das Skript automatisch den Server und bestätigt, dass alle erforderlichen Module installiert sind und funktionieren.

Ausgabe des Postfix-Admin-Setup-Prüfprogramms

Sobald die Prüfungen abgeschlossen sind, werden Sie aufgefordert, ein Setup-Passwort einzugeben. Dieses Passwort wird verwendet, um Master-Admin-Konten für die Postfix Admin-Weboberfläche zu erstellen.

Geben Sie ein sicheres Passwort ein und klicken Sie auf die Schaltfläche „Passwort-Hash generieren“.

Postfix-Admin generiert Passwort-Hash

Postfix-Admin-Beispiel-Passwort-Hash

Schließen Sie den Webbrowser noch NICHT! Wir kommen in ein paar Minuten hierher zurück.

Nachdem wir den Passwort-Hash generiert haben, müssen wir die config.inc.php aktualisieren Datei erneut mit diesem Passwort. Suchen Sie nach der Variable 'setup_password' und ersetzen Sie den Wert durch den aus dem Skript generierten Wert.

// Um ​​Postfixadmin einzurichten, MÜSSEN Sie hier ein gehashtes Passwort angeben.// Um ​​den Hash zu erstellen, besuchen Sie setup.php in einem Browser und geben Sie ein Passwort in das Feld ein,// bei der Übermittlung wird es ausgegeben als gehashten Wert.$CONF['setup_password'] ='';

Sie können die Konfigurationsdatei jetzt speichern und beenden.

Wir können jetzt zum Webbrowser zurückkehren und das „Super Admin“-Konto für das Postfix-Admin-Portal generieren.
Wenn Sie auf die Schaltfläche „Passwort-Hash generieren“ geklickt haben, haben sich die Formularfelder so geändert, dass sie wie im Beispiel unten aussehen. Sie können jetzt das Formular ausfüllen, um ein Super-Admin-Konto zu erstellen.

Erstellen eines Superadmin-Kontos mit Postfix Admin

Sie können auch mit dem folgenden Befehl einen Admin-Benutzer erstellen:

bash /var/www/html/postfixadmin/scripts/postfixadmin-cli admin add [email protected] --superadmin 1 --active 1 --password [email protected] --password2 [email protected]

Sie sollten die folgende Ausgabe erhalten:

Willkommen bei Postfixadmin-CLI v0.3 -------------------------------------------- ------------------------Das [email protected] wurde hinzugefügt!--------------- ------------------------------------------------ 

[Zurück nach oben]

9 – Hinzufügen von Benutzerkonten (Postfächern) zu Postfix Admin

Wir sind jetzt bereit, ein virtuelles Benutzerkonto auf unserem Mailserver zu erstellen. Dazu kehren wir in unserem Webbrowser zur Postfix-Admin-URL zurück und geben die URL Ihres Mailservers ein. Achten Sie darauf, mail.example.tld zu ersetzen mit Ihrem echten Server-Hostnamen.

https://email.linuxbuz.com/postfixadmin/public

Sie können sich jetzt beim Postfix Admin-Portal anmelden, wo Sie virtuelle Domains und virtuelle Benutzerkonten verwalten können. Geben Sie den Super-Admin-Benutzernamen und das Passwort ein, die Sie oben während der Postfix-Admin-Konfiguration erstellt haben, und klicken Sie dann auf die Schaltfläche „Anmelden“.

Admin-Login für Postfix Admin

Sobald Sie sich beim Postfix-Admin-Portal angemeldet haben, sehen Sie oben auf der Seite ein Menü.
Die Menüoptionen bieten die Möglichkeit, die virtuellen Domains und Benutzer Ihres Postfix-Mailservers zu verwalten und Protokolldateien anzuzeigen.

Postfix-Admin-Menü

Postfix-Admin-Option Postfach hinzufügen

Um ein Benutzerpostfach zu erstellen, klicken Sie auf den Quicklink „Postfach hinzufügen“. Sie werden nun zum Bildschirm „Assistent zum Hinzufügen von Postfächern“ weitergeleitet. Füllen Sie die Details im Formular aus und klicken Sie anschließend auf die Schaltfläche „Postfach hinzufügen“. Der Assistent erstellt Ihr erstes virtuelles Benutzerkonto (Postfach).

Erstellen eines neuen Postfachs in Postfix Admin

[Zurück nach oben]

10 – Erstellen Sie einen Systembenutzer, um virtuelle E-Mail-Verzeichnisse zu verwalten

Virtuelle Benutzer sind diejenigen, die technisch nicht auf Ihrem Linux-Server vorhanden sind, und sie verwenden nicht die Standard-Linux-Methoden zur Authentifizierung oder E-Mail-Zustellung und -Speicherung. Ihre virtuellen Benutzerkonten für den Mailserver werden in der von Postfix Admin erstellten Datenbank definiert und existieren nicht als Systembenutzerkonten, daher müssen wir ein einzelnes Systembenutzerkonto erstellen, das Dienste wie Mailspeicherung und Dovecot-Authentifizierung handhabt.

Lassen Sie uns zunächst ein Systembenutzerkonto mit dem Namen vmail erstellen und ihm Berechtigungen für die erforderlichen Verzeichnisse erteilen. Dieses Systemkonto ist für die Back-End-Operationen für Postfachspeicher und -dienste verantwortlich.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual MailDir Handler" vmailmkdir -p /var/vmailchown vmail:mail /var/vmailchmod 770 /var/vmail 

Eine Erklärung der obigen Befehle:

  1. Wir haben das Systembenutzerkonto vmail erstellt , zugewiesen als Home-Verzeichnis /var/vmail , und schränkte die Möglichkeit für dieses Konto ein, sich über Shell oder Konsole anzumelden.
  2. Wir haben dann manuell das Home-Verzeichnis /var/vmail erstellt für das neue Systembenutzerkonto.
  3. Dann legen wir den Eigentümer und die Gruppe für /var/vmail fest Verzeichnis.
  4. Dann haben wir dem Systembenutzer vmail volle Berechtigungen gegeben und die Sicherheitsgruppe mail dem Verzeichnis /var/vmail zugeordnet .

[Zurück nach oben]

11 – Konfiguration von Dovecot

Dovecot ist ein Open-Source-IMAP- und POP3-E-Mail-Server, der auf Sicherheit ausgelegt ist. Dovecot verfügt über viele integrierte Funktionen, die Sie auf der öffentlichen Website http://www.dovecot.org.

einsehen können

Dovecot wird für die Verwaltung der IMAP- und POP3-Verbindungen, die Verwaltung lokaler Mail-Verzeichnisse und den Empfang der eingehenden E-Mails verantwortlich sein, die vom Postfix-SMTP-Mail-Server-Prozess weitergeleitet werden. Dovecot verwaltet auch die Authentifizierung für SMTP-Verbindungen. Viele verschiedene Dateien in /etc/dovecot Verzeichnis-Handle Dovecot-Konfiguration.

Lassen Sie uns zunächst Dovecot so konfigurieren, dass es die von Postfix Admin eingerichtete Datenbank verwendet. Wir bearbeiten zuerst die Konfigurationsdatei /etc/dovecot/conf.d/auth-sql.conf.ext

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Bearbeiten oder aktualisieren Sie den Inhalt, um die folgende Konfiguration zu erhalten.

# Benutzerpasswörter aus einer SQL-Datenbank nachschlagen, wie# definiert in /etc/dovecot/dovecot-sql.conf.extpassdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}# Nachschlagen Benutzerinformationen aus einer SQL-Datenbank, wie # definiert in /etc/dovecot/dovecot-sql.conf.extuserdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}

Wenn Sie fertig sind, speichern und beenden Sie die Konfigurationsdatei.

SQL-Konfigurationsdatei

Jetzt sichern wir die ursprüngliche SQL-Konfigurationsdatei /etc/dovecot/dovecot-sql.conf.ext und erstellen Sie eine neue Konfigurationsdatei für Dovecot.

mv /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.originalnano /etc/dovecot/dovecot-sql.conf.ext

Kopieren Sie nun den folgenden Inhalt in die Konfigurationsdatei und aktualisieren Sie die Werte für die Maildatenbank, die Sie in Schritt 7 eingerichtet haben.

# Datenbanktreiber:mysql, pgsql, sqlitedriver =mysql# Datenbankverbindung:# connect =host=192.168.1.1 dbname=users# connect =host=sql.example.com dbname=virtueller Benutzer=virtuelles Passwort=blarg# connect =/etc/dovecot/authdb.sqlite#connect =host=localhost dbname=mail user=mail password=mypassword# Standard-Passwortschema.## Liste der unterstützten Schemata ist in# http://wiki2.dovecot.org/Authentication/ PasswordSchemes## Schwaches, aber weit verbreitetes Verschlüsselungsschema:default_pass_scheme =MD5-CRYPT# # Kommentieren Sie das obige aus und kommentieren Sie es unten # für eine stärkere Verschlüsselung aus:#default_pass_scheme - SHA256-CRYPT# Definieren Sie die Abfrage, um ein Benutzerpasswort zu erhalten.password_query =\ SELECT username as user, password, '/var/vmail/%d/%n' als userdb_home, \ 'maildir:/var/vmail/%d/%n' als userdb_mail, 150 als userdb_uid, 8 als userdb_gid \ FROM mailbox WHERE username ='%u' AND active ='1'# Definieren Sie die Abfrage, um Benutzerinformationen zu erhalten.user_query =\ SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/% n' als Post , \ 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota \ FROM mailbox WHERE username ='%u' AND active ='1'

Wenn Sie fertig sind, speichern und beenden Sie diese Konfigurationsdatei.

Authentifizierungsdefinitionsdatei

Wir werden jetzt die Authentifizierungsdefinitionsdatei /etc/dovecot/conf.d/10-auth.conf sichern und erstellen Sie ein neues.

mv /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.originalnano /etc/dovecot/conf.d/10-auth.conf 

Kopieren Sie nun den folgenden Inhalt in die Definitionsdatei.

# LOGIN-Befehl und alle anderen Klartext-Authentifizierungen deaktivieren, es sei denn, # SSL/TLS wird verwendet (LOGINDISABLED-Fähigkeit). Beachten Sie, dass, wenn die Remote-IP# mit der lokalen IP übereinstimmt (d. h. Sie verbinden sich von demselben Computer aus), die # Verbindung als sicher angesehen wird und die Klartext-Authentifizierung zulässig ist login digest-md5 cram-md5 ntlm rpa apop anonym gssapi otp skey# gss-spnego# HINWEIS:Siehe auch disable_plaintext_auth setting.auth_mechanisms =plain login#### Passwort- und Benutzerdatenbank## ## Die Passwortdatenbank wird verwendet, um das Passwort des Benutzers zu überprüfen (und nicht mehr).# Sie können mehrere passdbs und userdbs haben. Dies ist nützlich, wenn Sie # sowohl Systembenutzern (/etc/passwd) als auch virtuellen Benutzern erlauben möchten, sich anzumelden, ohne# die Systembenutzer in die virtuelle Datenbank zu duplizieren.## ## Benutzerdatenbank gibt an, wo E-Mails befinden und welche Benutzer-/Gruppen-IDs sie besitzen. Verwenden Sie für eine Einzel-UID-Konfiguration die "statische" userdb.## # Verwenden Sie die SQL-Datenbankkonfiguration anstelle einer der anderen.!include auth-sql.conf.ext

Wenn Sie fertig sind, speichern und beenden Sie die Datei.

Mail-Definitionsdatei

Als Nächstes teilen wir Dovecot mit, wo die E-Mails der virtuellen Benutzer gespeichert werden sollen. Wir werden die Mail-Definitionsdatei /etc/dovecot/conf.d/10-mail.conf sichern und eine neue erstellen.

mv /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.originalnano /etc/dovecot/conf.d/10-mail.conf 

Kopieren Sie nun den folgenden Inhalt in die Definitionsdatei.

# Speicherort für die Postfächer der Benutzer. Der Standardwert ist leer, was bedeutet, dass Dovecot# versucht, die Postfächer automatisch zu finden. Dies funktioniert nicht, wenn der Benutzer# noch keine E-Mails hat, also sollten Sie Dovecot ausdrücklich den vollständigen# Speicherort mitteilen.## Wenn Sie mbox verwenden, geben Sie einen Pfad zur INBOX-Datei an (zB /var/ mail/%u)# ist nicht genug. Sie müssen Dovecot auch mitteilen, wo sich die anderen Postfächer befinden. Dies wird als "Root-Mail-Verzeichnis" bezeichnet und muss der erste# Pfad sein, der in der Einstellung mail_location angegeben ist.## Es gibt einige spezielle Variablen, die Sie verwenden können, zB:## %u - Benutzername# %n - Benutzer Teil in [email protected], dasselbe wie %u, wenn es keine Domäne# gibt %d - Domäne Teil in [email protected], leer, wenn es keine Domäne# gibt %h - Heimatverzeichnis## Siehe doc/wiki/Variables.txt für die vollständige Liste. Einige Beispiele:## mail_location =maildir:~/Maildir# mail_location =mbox:~/mail:INBOX=/var/mail/%u# mail_location =mbox:/var/mail/%d/%1n/%n:INDEX =/var/indexes/%d/%1n/%n## #mail_location =maildir:/var/vmail/%d/%n# Systembenutzer und -gruppe für den Zugriff auf E-Mails. Wenn Sie mehrere verwenden, kann userdb# diese überschreiben, indem uid- oder gid-Felder zurückgegeben werden. Sie können entweder Zahlen # oder Namen verwenden. mail_uid =vmailmail_gid =mail# Gültiger UID-Bereich für Benutzer, standardmäßig 500 und höher. Dies geschieht hauptsächlich, um sicherzustellen, dass sich Benutzer nicht als Daemons oder andere Systembenutzer anmelden können die vmail-Benutzer-UID hier.first_valid_uid =150last_valid_uid =150# Wenn Sie mehrere Mailbox-Standorte festlegen müssen oder die standardmäßigen# Namespace-Einstellungen ändern möchten, können Sie dies tun, indem Sie Namespace-Abschnitte definieren.## Sie können private, gemeinsam genutzte und öffentliche Namespaces haben. Private Namensräume# sind für die persönlichen E-Mails des Benutzers. Freigegebene Namespaces dienen dem Zugriff auf die Postfächer anderer # Benutzer, die freigegeben wurden. Öffentliche Namespaces sind für freigegebene # Postfächer, die von sysadmin verwaltet werden. Wenn Sie gemeinsam genutzte oder öffentliche# Namespaces erstellen, sollten Sie normalerweise auch das ACL-Plug-in aktivieren, andernfalls können alle# Benutzer auf alle gemeinsam genutzten Postfächer zugreifen, vorausgesetzt, sie haben die entsprechenden Berechtigungen# auf Dateisystemebene. namespace inbox { # Namespace-Typ:private, shared oder public #type =private # Zu verwendendes Hierarchietrennzeichen. Sie sollten für alle # Namespaces das gleiche Trennzeichen verwenden, da sonst einige Clients verwirrt werden. '/' is usually a good one. # The default however depends on the underlying mail storage format. #separator =# Prefix required to access this namespace. This needs to be different for # all namespaces. For example "Public/". #prefix =# Physical location of the mailbox. This is in same format as # mail_location, which is also the default for it. #location =# There can be only one INBOX, and this setting defines which namespace # has it. inbox =yes # If namespace is hidden, it's not advertised to clients via NAMESPACE # extension. You'll most likely also want to set list=no. This is mostly # useful when converting from another server with different namespaces which # you want to deprecate but still keep working. For example you can create # hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/". #hidden =no # Show the mailboxes under this namespace with LIST command. This makes the # namespace visible for clients that don't support NAMESPACE extension. # "children" value lists child mailboxes, but hides the namespace prefix. #list =yes # Namespace handles its own subscriptions. If set to "no", the parent # namespace handles them (empty prefix should always have this as "yes") #subscriptions =yes}

Once done, save and exit the file.

SSL Definition File

If you have an SSL certificate that you would like to install, you will need to modify the Dovecot SSL definition file /etc/dovecot/conf.d/10-ssl.conf with your valid certificate. Remember, you will have to also include your CA certificate bundle if one has been provided by the certificate issuer.

Dovecot Master Definition File

We are now going to update the Dovecot master definition file /etc/dovecot/10-master.conf to include the system user account and the postfix settings.

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

Search for the config definition service auth and replace the definition block with the following.

service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have # full permissions to this socket are able to get a list of all usernames and # get the results of everyone's userdb lookups. # # The default 0666 mode allows anyone to connect to the socket, but the # userdb lookups will succeed only if the userdb returns an "uid" field that # matches the caller process's UID. Also if caller's uid or gid matches the # socket's uid or gid the lookup succeeds. Anything else causes a failure. # # To give the caller full permissions to lookup all users, set the mode to # something else than 0666 and Dovecot lets the kernel enforce the # permissions (e.g. 0777 allows everyone full permissions). unix_listener auth-userdb { mode =0600 user =vmail group =mail } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode =0660 # Assuming the default Postfix userid and groupid user =postfix group =postfix } }

Once done, save and exit the file.

LDA Definition File

In some cases, you may have to explicitly define the postmaster email address for your server. To do this, you will need to edit the LDA definition file /etc/dovecot/conf.d/15-lda.conf . If you see error messages like Invalid settings: postmaster_address setting not given showing up in the mail server logs, then this configuration change is the likely fix for that error.

nano /etc/dovecot/conf.d/15-lda.conf

Search for the definition postmaster_address and update the value to include your domain’s postmaster account.

# Address to use when sending rejection mails.# Default is [email protected]. %d expands to recipient domain.#postmaster_address =postmaster_address [email protected]

Once done, save and exit the file.

We now need to update the Dovecot configuration directory to be accessible to the Dovecot service account as well as the vmail system account.

chown -R vmail:dovecot /etc/dovecotchmod -R o-rwx /etc/dovecot

You have now completed the configuration of the Dovecot service and we can now move on to the antivirus and anti-spam services.
[Back to top]

12 – Configuring Amavis, ClamAV, and SpamAssassin

What are these packages?

– Amavis is an interface between Postfix and content filtering packages such as SpamAssassin and ClamAV.

– ClamAV is a high-performance antivirus engine for detecting trojans, viruses, malware &other malicious threats.

– SpamAssassin is a high-performance anti-spam platform famous for its Bayesian spam filtering capabilities. It gives system administrators a filter to classify messages and block unsolicited bulk email.

We will now walk you through the process of installing some protection for your mail server. For the most part, the default configurations are sufficient for a good line of defense against spam and viruses getting through your mail server. If you have special requirements, you can, of course, spend a good amount of time crafting intricate processing rules.

Let’s first create the two system user accounts, amavis and clamav, and allow them to collaborate together.

adduser clamav amavisadduser amavis clamav

We are now going to enable the Amavis daemon by editing the /etc/amavis/conf.d/15-content_filter_mode configuration file.

nano /etc/amavis/conf.d/15-content_filter_mode
use strict; # You can modify this file to re-enable SPAM checking through spamassassin# and to re-enable antivirus checking. ## Default antivirus checking mode# Please note, that anti-virus checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_virus_checks_maps =( %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re); ## Default SPAM checking mode# Please note, that anti-spam checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_spam_checks_maps =( %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re); 1; # ensure a defined return

Once done, you can save and exit the file.

We are now going to enable the SpamAssassin software by editing the /etc/default/spamassassin configuration file.

nano /etc/default/spamassassin

Now search for the variable CRON=0 in the configuration file and change the value to 1.

# Cronjob# Set to anything but 0 to enable the cron job to automatically update# spamassassin's rules on a nightly basisCRON=1

Next, enable the SpamAssassin software with the following command:

update-rc.d spamassassin enable

We are now going to set up Amavis to use the database from Postfix Admin to identify mail that is arriving for local delivery. By default, SpamAssassin and Amavis will only check mail that is determined to be arriving for local delivery. Because we are set up to use virtual user mailboxes, we have to tell the services where to locate the user accounts.

To do this, we need to update the configuration file /etc/amavis/conf.d/50-user .

nano /etc/amavis/conf.d/50-user

Replace the contents of this configuration file with the below. Be sure to update the MySQL database password to use the password for the database user “mail” that you entered in Step #7.

use strict; ## Place your configuration directives here. They will override those in# earlier files.## See /usr/share/doc/amavisd-new/ for documentation and examples of# the directives you can use in this file# # Three concurrent processes. This should fit into the RAM available on an# AWS micro instance. This has to match the number of processes specified# for Amavis in /etc/postfix/master.cf.$max_servers =3; # Add spam info headers if at or above that level - this ensures they# are always added.$sa_tag_level_deflt =-9999; # Check the database to see if mail is for local delivery, and thus# should be spam checked.@lookup_sql_dsn =( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail', 'mypassword']);$sql_select_policy ='SELECT domain from domain WHERE CONCAT("@",domain) IN (%k)'; # Uncomment to bump up the log level when testing.# $log_level =2; #------------ Do not modify anything below this line -------------1; # ensure a defined return

Once done, save and exit the configuration file.

We will now need to restart the Amavis and SpamAssassin services so that they see the new configuration settings.

service amavis restartservices spamassassin restart

[Back to top]

13 – Configuring Postfix

We are now ready to configure the Postfix mail server. Postfix handles all of the incoming and outgoing mail via the SMTP protocol, and we are going to configure it to integrate will all of the other software packages that we have just configured.

From a high level view, we are needing Postfix to hand off incoming mail to the SpamAssassin and ClamAV scanners for filtering, and then to pass unblocked mail messages on to the Dovecot services for final mailbox delivery. Postfix will also authenticate the virtual users who connect via SMTP in order to send email messages.

We are going to create a definition file for Postfix to identify users and mailboxes. Please note that the “hosts” directive in these configuration files must be exactly the same as the “bind-address” in the /etc/mysql/my.cnf configuration files.

First, let’s look up the value of the bind-address in the MySQL configuration files.

cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep bind-address
<>bind-address =127.0.0.1

Now that we have the configuration value, we are going to create the required Postfix definition files.

Copy and paste the content for each file. Make sure to update the password value with the password for the database user “mail” that you entered in Step #7.

/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

nano /etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
user =mail password =mypassword hosts =127.0.0.1 dbname =mail 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

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_alias_maps.cf

nano /etc/postfix/mysql_virtual_alias_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =aliasselect_field =gotowhere_field =addressadditional_conditions =and active ='1'

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_domains_maps.cf

nano /etc/postfix/mysql_virtual_domains_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =domainselect_field =domainwhere_field =domainadditional_conditions =and backupmx ='0' and active ='1'

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

nano /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailquery =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

Once done, save and exit the configuration file.

/etc/postfix/mysql_virtual_mailbox_maps.cf

nano /etc/postfix/mysql_virtual_mailbox_maps.cf
user =mailpassword =mypasswordhosts =127.0.0.1dbname =mailtable =mailboxselect_field =CONCAT(domain, '/', local_part)where_field =usernameadditional_conditions =and active ='1'

Once done, save and exit the configuration file.

We are now going to create the Postfix header-checking directives. These directives remove certain headers when relaying mail through the system. This helps improve privacy for sending users by removing specific headers like origin IP Address and the mail software identifiers. Copy and paste the below content into the file.

nano /etc/postfix/header_checks
/^Received:/ IGNORE/^User-Agent:/ IGNORE/^X-Mailer:/ IGNORE/^X-Originating-IP:/ IGNORE/^x-cr-[a-z]*:/ IGNORE/^Thread-Index:/ IGNORE

Once done, save and exit.

We are now ready to make some changes to the system default Postfix /etc/postfix/main.cf configuration file.

This file contains a large amount of complex choices and options for a Postfix server installation. It is far beyond the scope of this article to explain every option or best practice available, so we strongly suggest that you read through the Postfix configuration options /usr/share/postfix/main.cf.dist or the software vendor online manual. O’Reilly has also published a very good book named Postfix:The Definitive Guide .

First, we are going to create a backup of the original main.cf configuration file and then create a new copy of the file.

mv /etc/postfix/main.cf /etc/postfix/main.cf.originalnano /etc/postfix/main.cf

Now, copy the below content into the /etc/postfix/main.cf configuration file.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version # The first text sent to a connecting process.smtpd_banner =$myhostname ESMTP $mail_namebiff =no# appending .domain is the MUA's job.append_dot_mydomain =noreadme_directory =no # SASL parameters# ---------------------------------# Use Dovecot to authenticate.smtpd_sasl_type =dovecot# Referring to /var/spool/postfix/private/authsmtpd_sasl_path =private/authsmtpd_sasl_auth_enable =yesbroken_sasl_auth_clients =yessmtpd_sasl_security_options =noanonymoussmtpd_sasl_local_domain =smtpd_sasl_authenticated_header =yes # TLS parameters# --------------------------------- # Replace this with your SSL certificate path if you are using one.smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pemsmtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key# The snakeoil self-signed certificate has no need for a CA file. But# if you are using your own SSL certificate, then you probably have# a CA certificate bundle from your provider. The path to that goes# here.#smtpd_tls_CAfile=/path/to/ca/file smtp_tls_note_starttls_offer =yessmtpd_tls_loglevel =1smtpd_tls_received_header =yessmtpd_tls_session_cache_timeout =3600stls_random_source =dev:/dev/urandom#smtpd_tls_session_cache_database =btree:${data_directory}/smtpd_scache#smtp_tls_session_cache_database =btree:${data_directory}/smtp_scache # Note that forcing use of TLS is going to cause breakage - most mail servers# don't offer it and so delivery will fail, both incoming and outgoing. This is# unfortunate given what various governmental agencies are up to these days. # These are Postfix 2.2 only.## Enable (but don't force) use of TLS on incoming smtp connections.smtpd_use_tls =yessmtpd_enforce_tls =no# Enable (but don't force) use of TLS on outgoing smtp connections.smtp_use_tls =yessmtp_enforce_tls =no # These are Postfix 2.3 and later.## Enable (but don't force) all incoming smtp connections to use TLS.smtpd_tls_security_level =may# Enable (but don't force) all outgoing smtp connections to use TLS.smtp_tls_security_level =may # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for# information on enabling SSL in the smtp client. # SMTPD parameters# --------------------------------- # Uncomment the next line to generate "delayed mail" warnings#delay_warning_time =4h# will it be a permanent error or temporaryunknown_local_recipient_reject_code =450# how long to keep message on queue before return as failed.# some have 3 days, I have 16 days as I am backup server for some people# whom go on holiday with their server switched off.maximal_queue_lifetime =7d# max and min time in seconds between retries if connection failedminimal_backoff_time =1000smaximal_backoff_time =8000s# how long to wait when servers connect before receiving rest of datasmtp_helo_timeout =60s# how many address can be used in one message.# effective stopper to mass spammers, accidental copy in whole address list# but may restrict intentional mail shots.smtpd_recipient_limit =16# how many error before back off.smtpd_soft_error_limit =3# how many max errors before blocking it.smtpd_hard_error_limit =12 # This next set are important for determining who can send mail and relay mail# to other servers. It is very important to get this right - accidentally producing# an open relay that allows unauthenticated sending of mail is a Very Bad Thing.## You are encouraged to read up on what exactly each of these options accomplish. # Requirements for the HELO statementsmtpd_helo_restrictions =permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit# Requirements for the sender detailssmtpd_sender_restrictions =permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit# Requirements for the connecting server# This is primarily the RBL (Realtime Blacklist) Filteringsmtpd_client_restrictions =reject_rbl_client b.barracudacentral.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client spam.dnsbl.sorbs.net# Requirement for the recipient address. Note that the entry for# "check_policy_service inet:127.0.0.1:10023" enables Postgrey.smtpd_recipient_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permitsmtpd_data_restrictions =reject_unauth_pipelining# This is a new option as of Postfix 2.10+, and is required in addition to# smtpd_recipient_restrictions for things to work properly in this setup.smtpd_relay_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit # require proper helo at connectionssmtpd_helo_required =yes# waste spammers time before rejecting themsmtpd_delay_reject =yesdisable_vrfy_command =yes # General host and delivery info# ---------------------------------- myhostname =email.linuxbuz.commyorigin =/etc/hostname# Some people see issues when setting mydestination explicitly to the server# subdomain, while leaving it empty generally doesn't hurt. So it is left empty here.# mydestination =mail.example.com, localhostmydestination =# If you have a separate web server that sends outgoing mail through this# mailserver, you may want to add its IP address to the space-delimited list in# mynetworks, e.g. as 111.222.333.444/32.mynetworks =127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128mailbox_size_limit =0recipient_delimiter =+inet_interfaces =allmynetworks_style =host # This specifies where the virtual mailbox folders will be located.virtual_mailbox_base =/var/vmail# This is for the mailbox location for each user. The domainaliases# map allows us to make use of Postfix Admin's domain alias feature.virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf# and their user idvirtual_uid_maps =static:150# and group idvirtual_gid_maps =static:8# This is for aliases. The domainaliases map allows us to make# use of Postfix Admin's domain alias feature.virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf# This is for domain lookups.virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf # Integration with other packages# --------------------------------------- # Tell postfix to hand off mail to the definition for dovecot in master.cfvirtual_transport =dovecotdovecot_destination_recipient_limit =1 # Use amavis for virus and spam scanningcontent_filter =amavis:[127.0.0.1]:10024 # Header manipulation# -------------------------------------- # Getting rid of unwanted headers. See:https://posluns.com/guides/header-removal/header_checks =regexp:/etc/postfix/header_checks# getting rid of x-original-toenable_original_recipient =no

Once done, save and exit.

We are now ready to move on to the Postfix /etc/postfix/master.cf Konfigurationsdatei. This configuration file also contains a large number of complex choices and options for a Postfix server installation that is far beyond the scope of this article to explain.

We are going to create a backup of the original master.cf configuration file and then create a new file.

mv /etc/postfix/master.cf /etc/postfix/master.cf.originalnano /etc/postfix/master.cf

Now, copy the below content into the /etc/postfix/master.cf configuration file.

## Postfix master process configuration file. For details on the format# of the file, see the master(5) manual page (command:"man 5 master").## Do not forget to execute "postfix reload" after editing this file.## ==========================================================================# service type private unpriv chroot wakeup maxproc command + args# (yes) (yes) (yes) (never) (100)# ==========================================================================# SMTP on port 25, unencrypted.smtp inet n - - - - smtpd#smtp inet n - - - 1 postscreen#smtpd pass - - - - - smtpd#dnsblog unix - - - - 0 dnsblog#tlsproxy unix - - - - 0 tlsproxy # SMTP with TLS on port 587.submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_enforce_tls=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_tls_security_options=noanonymous # SMTP over SSL on port 465.smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous #628 inet n - - - - qmqpdpickup fifo n - - 60 1 pickup -o content_filter=-o receive_override_options=no_header_body_checkscleanup unix n - - - 0 cleanupqmgr fifo n - n 300 1 qmgr#qmgr fifo n - n 300 1 oqmgrtlsmgr unix - - - 1000? 1 tlsmgrrewrite unix - - - - - trivial-rewritebounce unix - - - - 0 bouncedefer unix - - - - 0 bouncetrace unix - - - - 0 bounceverify unix - - - - 1 verifyflush unix n - - 1000? 0 flushproxymap unix - - n - - proxymapproxywrite unix - - n - 1 proxymapsmtp unix - - - - - smtprelay unix - - - - - smtp# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5showq unix n - - - - showqerror unix - - - - - errorretry unix - - - - - errordiscard unix - - - - - discardlocal unix - n n - - localvirtual unix - n n - - virtuallmtp unix - - - - - lmtpanvil unix - - - - 1 anvilscache unix - - - - 1 scache## ====================================================================# Interfaces to non-Postfix software. Be sure to examine the manual# pages of the non-Postfix software to find out what options it wants.## Many of the following services use the Postfix pipe(8) delivery# agent. See the pipe(8) man page for information about ${recipient}# and other message envelope options.# ====================================================================## maildrop. See the Postfix MAILDROP_README file for details.# Also specify in main.cf:maildrop_destination_recipient_limit=1#maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}## ====================================================================## Recent Cyrus versions can use the existing "lmtp" master.cf entry.## Specify in cyrus.conf:# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4## Specify in main.cf one or more of the following:# mailbox_transport =lmtp:inet:localhost# virtual_transport =lmtp:inet:localhost## ====================================================================## Cyrus 2.1.5 (Amos Gouaux)# Also specify in main.cf:cyrus_destination_recipient_limit=1##cyrus unix - n n - - pipe# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}## ====================================================================# Old example of delivery via Cyrus.##old-cyrus unix - n n - - pipe# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}## ====================================================================## See the Postfix UUCP_README file for configuration details.#uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)## Other external delivery methods.#ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)bsmtp unix - n n - - pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipientscalemail-backend unix - n n - 2 pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}mailman unix - n n - - pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} # The next two entries integrate with Amavis for anti-virus/spam checks.amavis unix - - - - 3 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20127.0.0.1:10025 inet n - - - - smtpd -o content_filter=-o local_recipient_maps=-o relay_recipient_maps=-o smtpd_restriction_classes=-o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions=-o smtpd_sender_restrictions=-o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions=-o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks # Integration with Dovecot - hand mail over to it for local delivery, and# run the process under the vmail user and mail group.dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -d $(recipient)

Once done, save and exit.

We are now ready to restart all of the mail services and test the server.

service postfix restartservice spamassassin restartservice clamav-daemon restartservice amavis restartservice dovecot restart

While testing your new mail server, make sure to watch the log files closely for any errors or unusual responses.
The mail server log files are located here:

  • General Logging:/var/log/mail.log
  • Error Logging:/var/log/mail.err

[Back to top]

14 – Reverse DNS Lookup

You will now need to set up reverse DNS lookup for your mail server.
Reverse DNS is IP-address-to-domain-name mapping – the opposite of forward (normal) DNS which maps domain names to IP addresses. Reverse DNS is mostly used by people for such things as tracking where a website visitor came from or where an email message originated, for example. Reverse DNS is also important for mail server applications. Many email servers on the Internet are configured to reject incoming emails from any IP address which does not have reverse DNS record configured.

Unless you also administer your own DNS server, you can update reverse DNS with your ISP (Internet Service Provider) or via the hosting provider of your server.

[Back to top]

15 – Install RoundCube Webmail

Now we are going to install the RoundCube Webmail application. This application will allow your remote users to connect to their mailbox through a web browser.

apt-get install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra

During the installation process, the system will ask you the prerequisite install questions. Note:you will need the password for the MySQL root user you set up in Step 2.

Configure database for roundcube with dbconfig-common?>> Select 'YES'Database type to be used by roundcube:>> Select 'mysql'Password of the database's administrative user:>> Enter the 'root' MySQL password that you created.MySQL application password for roundcube:>> Enter a new secure password for the RoundCube application to use.

Once you are finished with the pre-installation questions, you should see the following output. Double check the output to make sure there are not errors posted during the installation process.

dbconfig-common:writing config to /etc/dbconfig-common/roundcube.conf Creating config file /etc/dbconfig-common/roundcube.conf with new versionCreating config file /etc/roundcube/debian-db.php with new versiongranting access to database roundcube for [email protected]:success.verifying access for [email protected]:success.creating database roundcube:success.verifying database roundcube exists:success.populating database via sql... done.dbconfig-common:flushing administrative passwordCreating config file /etc/roundcube/config.inc.php with new versionapache2_invoke:Enable configuration roundcube.conf * Reloading web server apache2 * * Reloading web server apache2 * Setting up roundcube (1.4.3) ...Setting up roundcube-plugins (1.4.3) ...Setting up roundcube-plugins-extra (0.9.2-20130819) ...Processing triggers for dictionaries-common (1.20.5) ...aspell-autobuildhash:processing:en [en-common]aspell-autobuildhash:processing:en [en-variant_0]aspell-autobuildhash:processing:en [en-variant_1]aspell-autobuildhash:processing:en [en-variant_2]aspell-autobuildhash:processing:en [en-w_accents-only]aspell-autobuildhash:processing:en [en-wo_accents-only]aspell-autobuildhash:processing:en [en_CA-variant_0]aspell-autobuildhash:processing:en [en_CA-variant_1]aspell-autobuildhash:processing:en [en_CA-w_accents-only]aspell-autobuildhash:processing:en [en_CA-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-variant_0]aspell-autobuildhash:processing:en [en_GB-variant_1]aspell-autobuildhash:processing:en [en_US-w_accents-only]aspell-autobuildhash:processing:en [en_US-wo_accents-only]Setting up aspell (0.60.7~20110707-1ubuntu1) ...Processing triggers for dictionaries-common (1.20.5) ...Setting up aspell-en (7.1-0-1) ...Processing triggers for libc-bin (2.19-0ubuntu6.6) ...Processing triggers for dictionaries-common (1.20.5) [email protected]#

Next, we need to customize some of the RoundCube configuration files. First, we are going to add the RoundCube application into our current Apache configuration files using path alias directives. The default configuration file is installed at /etc/apache2/conf-available/roundcube.conf

nano /etc/apache2/conf-available/roundcube.conf

We now need to remove the two comment flags in front of the alias directives. If you would like to use a different alias name, you can change that here as well. The default alias will use the URL http://<your-server-url>/roundcube/

 Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ Alias /roundcube /var/lib/roundcube

Once done, save and exit the file.

Now we are going to modify the /etc/roundcube/config.inc.php Konfigurationsdatei. This file is where you can customize the RoundCube advanced settings.

nano /etc/roundcube/config.inc.php

Locate the following directives and update the values to match the following.

$config['default_host'] ='';$config['smtp_server'] ='localhost';$config['smtp_port'] =25;$config['smtp_user'] ='%u';$config['smtp_pass'] ='%p';$config['support_url'] ='';

Once done, save and exit the configuration file.

Finally, restart the apache service to apply the changes:

systemctl startet Apache2 neu

You should now be able to use your new RoundCube webmail application for sending and receiving message.

[Back to top]

Congratulations!

You have now set up a fully functional and secure mail server on your VPS hosting account from Atlantic.Net.

Erfahren Sie mehr über unsere VPS-Hosting-Services und Virtual Private Server.


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

  2. Richten Sie den Urbackup-Server auf Ubuntu 20.04 ein

  3. Rsyslog-Server auf Ubuntu 20.04 einrichten - Wie geht das?

  4. Postfix Mailserver und Dovecot auf Ubuntu oder Debian installieren

  5. Mail-Weiterleitung in Postfix auf Ubuntu oder Debian einrichten

Postfix-Mailserver

So richten Sie einen vollständigen Mailserver (Postfix) mit „SquirrelMail“ (Webmail) unter Ubuntu/Debian ein

Gewusst wie:Ersteinrichtung des Ubuntu 15.04-Servers

Postfix-Mailserver-Setup unter Ubuntu 14.04

Ersteinrichtung des Servers mit Ubuntu 18.04

So konfigurieren Sie einen SMTP-Mailserver mit Postfix unter Ubuntu 18.04