[Debian 8] Mailserver erstellen: Postfix, Roundcube, ViMbAdmin, Dovecot, Amavis

Vorwort zum Mailserver

Schon einige Installationen habe ich auf meinem Linux-Debian 8-vServer gemacht. Aber eines hat da noch gefehlt: der Mailserver.

Die Konfiguration von Mailservern habe ich mir bereits schon mal angeschaut und auch einige Anleitungen durchgelesen. Leider hat sich rausgestellt, dass das Konfigurieren eines (sicheren!) Mailservers keine leichte Aufgabe ist und man sich dafür schon etwas Zeit nehmen sollte.

Das habe ich jetzt getan und möchte meinen Weg zum eigenen Mailserver erläutern.

Wesentlicher Bestandteil für mein Gelingen waren aber zwei hilfreiche Links:
Anleitung auf debinux
Anleitung von Carsten Heine

Vielen Dank für diese zwei sehr gute Artikel.

Da ich auf meinem Server Apache2 verwende, habe ich hier auch als Webserver Apache2 ausgesucht, um auch mir später eine einfachere Konfiguration zu ermöglichen, falls ich nochmals einen Server aufsetzen sollte. Zudem verwende ich den Text-Editor  nano . Grundsätzlich könnt ihr aber den Text-Editor eurer Wahl nutzen.

Grundkonfiguration

Einige wenige Grundkonfigurationen an unserem Debian Jessie-System müssen wir vornehmen.

Ich werde in diesem Artikel folgende Beispieldaten verwenden:

  • domain.tld (als Domain)
  • mail.domain.tld (als FQDN)
  • 1.2.3.4 (als IP-Adresse des Host)

Zuerst müssen wir unseren Hostnamen (der bei einem Mailserver wichtig ist) korrekt konfigurieren. Wichtig dabei ist aber auch der sogenannte DNS-Reverse Eintrag. Spam wird sehr häufig daran festgemacht, dass die DNS-Reverse-Prüfung fehlschlägt. Dabei wird zuerst anhand des Hostnamen die IP-Adresse ermittelt. Mithilfe der IP-Adresse wird dann wieder rum der Hostnamen ermittelt (DNS-Reverse). Der dann ermittelte Hostname muss mit dem Hostnamen des Mailservers übereinstimmen. Meistens kann man diesen DNS-Reverse-Eintrag bei seinem Webhoster ändern bzw. prüfen. So kann man sicherstellen, dass nicht jeder größere Mailanbieter die Mails direkt als Spam einstuft.

Außer dem Hostnamen konfigurieren wir auch unsere Zeitzone, in der der Mailserver laufen soll. Die beiden Einstellungen machen wir mit:

Die hosts-Datei unter  /etc/hosts  sollte also aus mindestens folgenden Einträgen bestehen:

Im Terminal können wir dann die korrekte Grundkonfiguration testen, indem wir die Ausgabe der folgenden Befehle prüfen:

Webserver

Wie bereits erwähnt werden wir den Webserver mit folgenden Komponenten aufsetzen:

  • Apache2
  • PHP
  • MySQL

Wer bereits einen Apache2-Webserver installiert hat, kann diesen problemlos nutzen. Wer PHP7 verwendet, den kann ich auch getrost mitteilen: Ich werde Anmerkungen machen, wie man bestimmte Dinge zu  ändern hat, damit es auch mit PHP7 läuft. Der Großteil bleibt aber gleich.

Webserver mit oben genannten Komponenten wie folgt installieren und der Installation folgen:

Nun erstellen wir ein selbst-signiertes SSL-Zertifikat mit dem wir später die Mails verschlüsseln wollen. Wenn ihr ein eigenes Zertifikat habt, könnt ihr das hier verwenden anstatt ein Neues anzulegen.

Durch  `hostname -f`  innerhalb des Kommandos, wird das SSL Zertifikat direkt für eure konfigurierte FQDN erstellt. Das Zertifikat sollte dann mit dem Namen eures FQDN unter  /etc/ssl  liegen. Nun schützen wir es noch vor fremden Zugriff:

Habt ihr ein selbst-signiertes Zertifikat erstellt, dann solltet ihr dies noch registrieren:

Möglicherweise ist die Zeitzone in der PHP-Konfiguration noch nicht korrekt, deshalb gehen wir auf Nummer sicher und öffnen die PHP-Konfiguration:

In der Datei suchen und ändern wir folgenden Eintrag ab:

Danach starten wir den Dienst neu:

Um die benötigten Module für Apache2 zu aktivieren, führen wir folgende Befehle aus:

Einzelne Webseiten des Apache2-Webservers bestehen aus sogenannten vHost-Dateien. Um später unser Webmail (Roundcube) und unsere Mail-Administration (ViMbAdmin) aufrufen zu können brauchen wir eine neue vHost-Datei. Die erstellen wir folgendermaßen:

Die Datei muss dann mit folgendem Inhalt befüllt werden. Vergisst nicht wie immer  mail.domain.tld  mit eurem FQDN zu ersetzen.

Im Anschluss müssen noch unsichere Verschlüsselungsverfahren deaktiviert werden. Dies machen wir in der Datei  /etc/apache2/mods-enabled/ssl.conf . Dort wird folgender Text vor   </IfModule>  eingefügt.

Abschließend wird der vHost aktiviert und Apache2 neu geladen:

Eine Sache haben wir für den Webserver jetzt noch zu tun: Die MySQL-Datenbanken. Mit zwei einfachen Befehlen können wir die Datenbanken und pro Datenbank auch einen User anlegen. Der Platzhalter   changeme  bitte mit einem sicheren Passwort ersetzen und notieren. Am Besten wäre es natürlich wenn die Benutzer unterschiedliche Passwörter bekommen.

Der Webserver steht nun, aber wir brauchen natürlich auch noch Anwendungen (Webmail, Administration).

Webanwendungen

Als Webanwendungen werden wir zwei Anwendungen installieren:

Roundcube Webmail
Als Webmail-Client, in dem für Mailboxen fröhlich Mails verschickt und empfangen werden können.

ViMbAdmin
Eine Administrationsanwendung, mit der einzelne Domains, Mailboxen, Alias etc. angelegt werden.

Roundcube Webmail

Zuerst müssen wir zwei Pakete installieren, um die Anwendungen runterladen zu können. Git und cURL:

Nun laden wir Roundcube herunter, entpacken die Dateien und benennen den Ordner um. Achtung: In diesem Artikel war die aktuellste Version 1.3.0 – bitte verwendet immer die aktuellste stabile Version. Diese ist zu finden auf https://roundcube.net/download/

Die Konfiguration ist nun relativ einfach – Dank des integrierten Installers. Den rufen wir ganz einfach über https://mail.domain.tld/webmail/installer auf. Auf der ersten Seite des Installers werden nun einige Prüfungen durchgeführt, ob Voraussetzungen zur Installation gegeben sind. Nicht alle Punkte müssen auf  OK stehen, denn einige sind optional. Deshalb genau schauen, ob bei den Pflichtpunkten ein  OK erscheint. Ist das gegeben, so könnt ihr mit einem Klick auf  NEXT fortfahren.

Im zweiten Schritt „Create config“ sind nun viele Einstellungen zu sehen. Die meisten müssen nicht geändert werden. Folgende Punkte sollten angepasst werden:

  • db_dsnw – Eure Datenbank-Daten eintragen. Hier muss eigentlich nur der Datenbankname und das Passwort des Benutzers eintragen, den wir im Abschnitt Webserver angelegt haben.
  • default_host – tls://mail.domain.tld (IMAP Host)
  • default_port – 143 (IMAP-Port)
  • username_domain – domain.tld (Wenn ihr hier leer lässt, dann müssen Benutzer beim Einloggen die Domain eingeben z.B.  mail@domain.tld
  • smtp_server – tls://mail.domain.tld
  • smtp_port – 587
  • smtp_user – %u
  • smtp_pass – %p
  • language – de_DE
  • Plugins – acl, archive, managesieve, zipdownload

Mit einem Klick auf CREATE CONFIG wird die Konfiguration unter  /var/www/html/webmail/config/config.inc.php gespeichert. Wer ein selbst-signiertes Zertifikat verwendet, der muss die Konfiguration allerdings mit einem kleinen Code erweitern. Wer ein normales Zertifikat verwendet kann diesen Schritt überspringen. Wir öffnen die Datei mit:

Und fügen ans Ende der Datei folgenden Code ein:

Als nächsten Schritt müssen wir noch die Datenbank-Tabellen anlegen. Auch hier bringt Roundcube bereits eine vorgefertige Datei mit, die wir ganz einfach ausführen:

Dass die Webseite nun auch vom Webserver ausgeführt werden kann, müssen wir den Webserver-User als Besitzer definieren:

Wenn ihr nun eure Webmail-Seite aufruft (https://mail.domain.tld/webmail) solltet ihr folgendes sehen können:

Roundcube Mailserver-Webmail

Bei mir persönlich war es der Fall, dass zuerst ein Internal Server Error (HTTP Error 500) aufgetreten ist. Ist dies bei euch auch der Fall, dann müssen aus der Datei  /var/www/html/webmail/.htaccess  folgende Codes entfernt werden:

und

Ansonsten ist die Konfiguration von Roundcube Webmail erfolgreich.

ViMbAdmin

ViMbAdmin installieren wir mithilfe von Composer, einem Paket-Manager (wie z.B. apt) für PHP. Composer müssen wir dafür zuerst herunterladen und in den Ordner  /usr/local/bin verschieben um Composer von überall aufrufen zu können.

Und nun ViMbAdmin ins Verzeichnis  /srv/vimbadmin herunterladen und installieren:

Unterverzeichnisse des neu angelegten Ordners müssen ebenfalls wie bei Roundcube für den Webserver-User freigegeben werden:

Danach wird noch eine symbolische Verknüpfung erstellt, um später vom Webserver die Anwendung ( http://mail.domain.tld/admin ) aufrufen zu können

Nun muss das Ganze wieder konfiguriert werden. Dafür gibt es bereits eine vorgefertigte Beispielkonfiguration von ViMbAdmin, die wir kopieren und bearbeiten:

Darin sind viele Einstellungsmöglichkeiten. Im folgenden Code sind nur die anzupassenden Schlüssel aufgeführt:

Jetzt brauchen wir noch ein Archiv-Verzeichnis, das wir wie folgt erstellen:

Auch hier haben wir wieder eine  .htaccess Datei, die wir von ViMbAdmin vorgefertigt bekommen:

Dann kann die MySQL-Datenbank initialisiert werden. Mit dem folgenden Befehl werden die Datenbanktabellen angelegt:

Wurde alles erfolgreich erstellt, so erhalten wir diese Ausgabe:

Wenn ihr die Webseite unter https://mail.domain.tld/admin aufruft, solltet ihr eine Installation angezeigt bekommen. Ist dies nicht der Fall und ihr erhaltet evtl. einen Fehler, der ungefähr  index.php not found  lautet. Muss in der .htaccess-Datei unter  /srv/vimbadmin/public/.htaccess  die Zeile  RewriteRule ^.*$ /vimbadmin/index.php [NC,L]  mit  RewriteRule ^.*$ index.php [NC,L] ersetzt werden.

Folgt den Installationsanweisungen und erstellt einen administrativen Account für eure Administrationsanwendung.

Ein letzter Schritt muss dann noch getan werden, um die Installation von ViMbAdmin abzuschließen: Die Archivierungs- und Löschfunktion von ViMbAdmin wird mithilfe von Cronjobs automatisiert. Wir bearbeiten die Cronjob-Datei mit:

Dort fügen wir an das Ende der Datei folgende Cronjobs hinzu:

Damit ist die Konfiguration der Webanwendungen abgeschlossen.

Mailserver

Als nächstes wird der Mailserver konfiguriert. Wir werden dem Mailserver für das Senden von Mails via SMTP und Abrufen via IMAP konfigurieren. Eine Anleitung, um die Mails per POP3 abrufen zu können wird noch folgen.

Folgende Pakete werden für den Mailserver benötigt:

  • Postfix
  • Dovecot
  • Amavis (Inhaltsfilter)

Zuerst wird Postfix installiert. Dies machen wir natürlich mit apt:

Während der Paket-Installation wird man ggf. nach einem Server-Configuration-Type gefragt. Da wir im weiteren Verlauf die Konfiguration überschreiben werden, spielt die Auswahl keine Rolle.

Damit Postfix mit ViMbAdmin kommunzieren kann, um die dort konfigurierten Postfächer etc. abfragen zu können, müssen verschiedene Queries angelegt werden. Dafür brauchen wir ein Verzeichnis, das wir unter  /etc/postfix/mysql erstellen.

Nun erstellen wir die Query-Dateien. Bitte in jeder Datei den Platzhalter changeme mit dem MySQL-Benutzer-Kennwort des vimbadmin Benutzers ersetzen.

/etc/postfix/mysql/postfix-mysql-virtual_alias_maps.cf

/etc/postfix/mysql/postfix-mysql-virtual_domains_maps.cf

/etc/postfix/mysql/postfix-mysql-virtual_mailbox_maps.cf

/etc/postfix/mysql/postfix-mysql-virtual_transport_maps.cf

Da die Dateien sensible Daten beinhalten, werden diese vor fremden Zugriff geschützt:

Jetzt widmen wir uns der Postfix-Konfiguration. Diese werden wir zuerst löschen und mit unserer eigenen Konfiguration überschreiben. Dazu führen wir folgendes aus:

In dieser Datei können wir nun die neue Konfiguration einfügen. Dazu einfach den nachfolgenden Code einfügen und die Domain  mail.domain.tld mit der eigenen FQDN ersetzen. Unter mydestination darf die Domäne  domain.tld aber nicht aufgeführt sein!

Die Dienste, die Postfix bereitstellt, werden in  /etc/postfix/master.cf definiert. Hierzu gibt es den folgenden Inhalt, der nicht angepasst und 1:1 übernommen werden kann.

Das war es auch schon mit Postfix, der SMTP-Server ist also nun vorbereitet. Weiter geht es mit dem Posteingang bzw. Dovecot 

Dovecot

Dovecot ist ein Mailserver-Paket zum Erstellen eines Posteingangsservers über IMAP und POP3. Wie gesagt behandeln wir in diesem Artikel aber nur IMAP. Eine Anleitung für POP3 folgt. Das aktuelle, stabile Dovecot-Paket erhalten wir von dem offiziellen Dovecot-Repository:

Für Dovecot wird ein eigener Benutzer vmail  benötigt, den wir wie folgt anlegen:

Wie bei Postfix auch, werden wir die Konfiguration von Dovecot löschen und komplett überschreiben:

Neben der Platzhalter-Mailadresse  mail.domain.tld muss auch die Postmaster-Mailadresse angepasst werden:

Dovecot braucht auch Zugriff auf die MySQL-Datenbank um Daten abfragen zu können (Postfächer etc.). Das wird in einer eigenen Datei abgebildet, die sich unter  /etc/dovecot/dovecot-mysql.conf befindet:

Und nicht vergessen changeme mit dem korrekten vimbadmin-Passwort zu ersetzen:

Wieder sensible Daten, deshalb wird damit auch korrekt umgegangen: Datei schützen und dem vmail User zuweisen.

Mithilfe von Sieve-Scripts können bestimmte Automatismen definiert werden. Zum Beispiel, dass Spam-Mails direkt in den Junk-Ordner verschoben werden. So ein Script werden wir in die Datei  /var/vmail/before.sieve schreiben.

Mit folgendem Inhalt:

Die sieve-Datei muss dann noch kompiliert werden und dem vmail-User zugewiesen werden:

Damit haben wir auch die Konfiguration von Dovecot geschafft. Dem eigenen Mailserver sind wir schon näher. Kommen wir zum letzten Schritt: dem Inhaltsfilter …

Inhaltsfilter

Den Inhaltsfilter werden wir mit den Paketen amavisclamav und spamassassin umsetzen. Diese Pakete müssen wie folgt mit apt installiert werden. Achtung: Will man in eine RAR-Datei gepackte Anhänge ebenfalls überprüfen/scannen, so muss man das non-free Debian-Repository aktiviert werden. Ob dies aktiviert ist, könnt ihr in eurer sources.list Datei sehen.

Zuerst wird der Amavis-Filter konfiguriert. Dafür gibt es eine nach der Installation bereits vorhandene Datei, die wir bearbeiten:

Die Datei sollte gründlich durchgelesen werden und seine Daten anpassen bzw. ergänzen – wie auch in den Konfigurationsdateien zuvor auch. Die sollte dann danach ungefähr so aussehen:

Das in Amavis beinhaltete DKIM verhindert das Empfangen von Mails von gefälschten Mailadressen, wie es häufig in Phishing-Mails der Fall ist. Außerdem signiert DKIM die eigenen Mails, sodass der andere Mailserver weiß, dass die Mail auch wirklich von dir stammt. Für die DKIM-Signatur brauchen wir also einen sicheren Schlüssel. In der Amavis-Konfiguration oben sollte dieser Schlüsselname bereits mit der eigenen Domain angepasst sein. Diesen 2048 Bit langen Schlüssel erstellen wir mit:

Wir lassen uns den angelegten Schlüssel nun wie folgt anzeigen:

Die Ausgabe dieses Kommandos sollten wir kopieren und als DNS-Record auf dem DNS-Server eintragen. Solltet ihr keinen Zugriff haben einen TXT-Record anzulegen (wegen dem Hoster o.ä), solltet ihr die DKIM-Signatur deaktivieren.

Zum Konfigurieren des Virenscanners ClamAV für Amavis, müssen wir noch folgende Einstellungen durchführen:

Dienste neu starten

Zu guter Letzt sollten wir nun mal alle Dienste neustarten, sodass alle Dienste ihre neuen Konfigurationen übernehmen. Das machen wir mit:

Euer Werk könnt ihr euch nun ansehen und auch testen. Unter  https://mail.domain.tld/admin könnt ihr ein Postfach anlegen. Dieses Postfach könnt ihr dann auf  https://mail.domain.tld/webmail verwenden, um Mails abzurufen oder zu senden.

Externe Mail-Clients

In externen Mail-Clients wie Outlook, Thunderbird o.ä könnt ihr eure neu-angelegte Mailadresse (Postfach) hinzufügen und darüber Mails empfangen und senden. Dafür verwendet ihr folgende Daten:

  • Senden: SMTP auf Port 587 (Verschlüsselung: STARTTLS) – Den Standard-SMTP-Port 25 bitte nie verwenden.
  • Empfangen: IMAP auf Port 143 (Verschlüsselung: STARTTLS)

Schlusswort

Ich hoffe ihr habt einiges verstanden und habt euren Mailserver erfolgreich zum Laufen gebracht. Eine etwas detaillierte Anleitung mit einer Menge Hintergrundinfos bekommt ihr auf Debinux.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.