Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

1-3 von 7
Montag
01
Januar 2018
Klaus Moser
Klaus Moser

Ubuntu 16.04 - Mailserver - Dovecot

Dovecot ist ein Open Source IMAP und POP3 Server, der Dieste bereitstellt um Mails mit einem Client wie Outlook oder Thunderbird abzuholen. Der Server legt die E-Mails im mbox oder Maildir-Format ab.

Die Installation wird analog zu meinem alten Setup ablaufen. Werde die Schritte aber dennoch notieren um sie mir wieder ins Gedächtnis zu rufen und einen vollständigen Notizzettel zu haben :-)

Installation

Für die Installation des Grundsystems benötigt man das Core-Paket (dovecot-core) und mindestens eines der beiden folgenden Pakete:

  • dovecot-imapd
  • dovecot-pop3d

Möchte man nur einen IMAP Server muss man das Paket dovecot-pop3d nicht installieren und umgekehrt.

Damit Dovecot Werte aus einer MySQL Datenbank lesen kann wird noch das Paket dovecot-mysql installiert.

Bash
apt install dovecot-core dovecot-imapd dovecot-mysql

Konfiguration

Die Konfiguration findet zwar grundsätzlich in der Datei /etc/dovecot/dovecot.conf statt, in Ubuntu sind die meißten Optionen allerdings in Dateien in /etc/dovecot/conf.d ausgelagert. Daher ist es eigentlich nicht nötig die Hauptkonfigurationsdatei zu verändern.

Alle Einstellungen die von den Standardeinstellungen abweichen, kann man sich mit

Bash
dovecot -n

anzeigen lassen. Nach Änderungen an der Konfiguration muss natürlich Dovecot neu gestartet werden.

Protokolle

Standardmäßig werden die Protokolle aktiviert, deren Paket man installiert hat. Diese Pakete legen Dateien an die unter /usr/share/dovecot/protocols.d/*.protocol zu finden sind.

10-auth.conf (Benutzerauthentifikation)

Die Benutzer sollen über eine MySQL Datenbank verwaltet werden können. Dazu haben wir ja schon wie in der Einleitung beschrieben das Paket dovecot-mysql installiert.

Die Konfiguration erfolgt über /etc/dovecot/conf.d/10-auth.conf. Hier muss die Zeile für die Authentifikation über das System auskommentiert werden und die Zeile für die Authentifikation am SQL Server einkommentiert werden:

Dovecot
#!include auth-system.conf.ext
!include auth-sql.conf.ext

Außerdem sollen bei einer unverschlüsselten Verbindung keine Klartext Kennwörter erlaubt sein. Dazu aktiviert man in der Datei den Eintrag:

Dovecot
disable_plaintext_auth = yes

auth-sql.conf.ext

Da ich für Benutzer keine besonderen Einstellungen wie Quotas oder ähnliches verwenden möchte, verwende ich die am Ende der Datei /etc/dovecot/conf.d/auth-sql.conf.ext stehende, statische userdb Einstellung. Diese besagt dass für jeden Benutzer ein Verzeichnis unter /var/vmail/[Domainname]/[Benutzername] angelegt wird in dem bessen Mails gespeichert werden.

Dovecot
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}

Außerdem wird hier festgelegt dass der Zugriff auf die Verzeichnisse über einen gemeinsamen Benutzer namens vmail mit der Gruppe vmail passieren soll.

Diesen Benutzer und die Gruppe muss man anlegen:

Bash
adduser --system --group --no-create-home vmail

Außerdem muss das Verzeichnis /var/vmail angelegt werden und dem Benutzer vmail und der Gruppe vmail zugewiesen werden.

Bash
mkdir /var/vmail
chown vmail:vmail /var/vmail
chmod 0770 /var/vmail

In der Datei /etc/dovecot/auth-sql.conf.ext wird außerdem auf die Datei /etc/dovecot/dovecot-sql.conf.ext referenziert in der weitere Parameter für die Verbindung mit der Datenbank festgelegt werden.

MySQL Datenbank

Für die Authentifikation der Benutzer wird eine MySQL Datenbank benötigt. Sollte der Server noch nicht installiert sein tut man dies mit:

Bash
apt install mysql-server

Wie in der Datei /etc/dovecot/dovecot-sql.conf.ext beschrieben muss man eine neue Datenbank mit ein paar Tabellen anlegen. Die Datenbank bekommt den Namen vmail. Dieser Name wird in den meißten Anleitungen im Netz gewält. Als Kollation verwende ich utf8_general_ci.

Sql
CREATE DATABASE vmail
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

Für den Zugriff auf die Datenbank wird noch ein Benutzer benötigt.

Sql
GRANT ALL PRIVILEGES
  ON vmail.*
  TO 'vmail'@'localhost'
  IDENTIFIED BY 'mysecret';

Als nächstes die Benutzertabelle:

Sql
CREATE TABLE users (
     username VARCHAR(128) NOT NULL,
     domain VARCHAR(128) NOT NULL,
     password VARCHAR(128) NOT NULL,
     PRIMARY KEY (username, domain)
);

Benutzer anlegen

Um einen Benutzer anzulegen muss man einen Eintrag in der users - Tabelle mit Benutzernamen, Domain und einem Passwort-Hash erzeugen. Den Passwort-Hash kann man z.B. erzeugen mit:

Bash
doveadm pw -s SHA512-CRYPT

Es wird zweimal um die Eingabe des neuen Passworts gefragt und dann der Hash ausgegeben. Das {SHA512-CRYPT} am Anfang muss man weglassen, da es nur den verwendeten Algorithmus zeigt.

Sql
INSERT INTO users
 (username, domain, password)
 values
 ('benutzer1', 'meinedomain.de', '$6$A3Z[...]MCQgfsz');

dovecot-sql.conf.ext

Sind die Tabellen angelegt, können wir uns an die Konfiguration machen. Dazu editiert man die Datei /etc/dovecot/dovecot-sql.conf.ext.

Hier wählt man zunächst die Verbindungsart aus. Nicht vergessen die benötigten Einträge auch einzukommentieren.

Dovecot
driver = mysql

Als nächstes legt man die Verbindungsparameter fest. Man kann statt dem Socket auch localhost verwenden.

Dovecot
connect = host=/var/run/mysqld/mysqld.sock dbname=vmail user=vmail password=mysecret

Der voreingestellte Hashing Algorithmus MD5 gilt nicht als besonders sicher. Daher verwende ich als Passwort Schema den stärkeren SHA512-CRYPT Algorithmus.

Dovecot
default_pass_scheme = SHA512-CRYPT

Den Passwort-Query kann man so einkommentieren wie er im Beispiel steht:

Dovecot
password_query = \
  SELECT username, domain, password \
  FROM users WHERE username = '%n' AND domain = '%d'

10-mail.conf (Mailbox Format und Speicherort)

Dovecot kann Postfächer im mbox sowie im Maildir Format verwalten. Bei der mbox Variante werden alle Mails in einer Datei gespeichert, beim maildir Format ist jede Mail eine eigene Datei.

Standardmäßig ist das mbox Format voreingestellt und das INBOX Verzeichnis des Postfachs liegt unter /var/mail/%u und die restlichen Verzeichnisse im Benutzerordner unter ~/mail.

Da mein bisheriger Mailbestand auf Maildir basiert und Maildir einfacher zu handhaben ist und obendrein auch fehlertoleranter ist, werde ich Dovecot so konfigurieren dass Dovecot wieder das Maildir Format verwendet.

Dazu editiert man die Datei /etc/dovecot/conf.d/10-mail.conf und trägt als mail_location folgendes ein:

Dovecot
mail_location = maildir:/var/vmail/%d/%n/Maildir

Zusätzlich muss noch unser neuer Systembenutzer vmail sowie dessen Gruppe in diese Datei eingetragen werden:

Dovecot
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail 

Damit wird Dovecot mitgeteilt, wie und mit welchem Benutzer/Gruppe auf die Mailbox Verzeichnisse zugegriffen werden soll.

10-master.conf

Als nächste Datei kommt die /etc/dovecot/conf.d/10-master.conf.

Da ich IMAP nur über Port 143 mit TLS erlauben möchte, habe ich iher IMAPS deaktiviert indem ich den Port auf 0 gesetzt habe.

Dovecot
service imap-login {
  inet_listener imap {
    #port = 143
  }
  inet_listener imaps {
    port = 0
    #ssl = yes
  }
}

Außerdem habe ich hier dem Benutzer vmail Zugriff auf den Auth-Socket von Dovecot gegeben:

Dovecot
service auth {
  unix_listener auth-userdb {
    mode = 0666
    user = vmail
    group = vmail
  }
}

10-ssl.conf (Verbindung absichern mit TLS/SSL)

Die SSL/TLS Konfiguration kann angepasst werden indem man die Datei /etc/dovecot/conf.d/10-ssl.conf editiert. Ich empfehle ein Zertifikat von Let's encrypt zu verwenden. Man kann während der Einrichtung aber auch das selbst signierte Zertifikat von Ubuntu verwenden. Dieses kann man installieren und erzeugen mit:

Bash
apt-get install ssl-cert
make-ssl-cert generate-default-snakeoil

Damit werden diese beiden Dateien erzeugt:

SSL-Zertifikat /etc/ssl/certs/ssl-cert-snakeoil.pem
SSL-Schlüssel /etc/ssl/private/ssl-cert-snakeoil.key

Spätestens wenn der Server mal Live geht sollte das Zertifikat gegen eines von Let's encrypt ersetzt werden. Zum Testen während der Einrichtung wird dieses aber erst mal reichen.

Folgende Anpassungen werden jetzt in der Datei /etc/dovecot/conf.d/10-ssl.conf gemacht:

Dovecot
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = required

# PEM encoded X.509 SSL/TLS certificate and private key.
#ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
#ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
ssl_cert = </etc/letsencrypt/live/www.mydomain.de/fullchain.pem
ssl_key = </etc/letsencrypt/live/www.mydomain.de/privkey.pem


# DH parameters length to use.
ssl_dh_parameters_length = 2048

# SSL protocols to use
ssl_protocols = !SSLv2 !SSLv3

# SSL ciphers to use
ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA

# Prefer the server's order of ciphers over client's.
ssl_prefer_server_ciphers = yes

Um zu testen ob das Zertifikat korrekt eingebunden wurde kann man folgenden Befehl verwenden:

Bash
echo "quit" | openssl s_client -starttls imap -connect www.mydomain.de:imap

Funktioniert natürlich nur dann wenn der Dovecot Server neu gestartet wurde und die zuletzt getätigten Einstellungen auch übernommen wurden.

15-lda.conf

In der Datei /etc/dovecot/conf.d/15-lda.conf habe ich nur die Postmaster-Adresse gesetzt damit ich mitbekomme, wenn eine Zustellung fehlschlägt.

Dovecot
postmaster_address = webmaster@fam-moser.de

15-mailboxes.conf

In der Datei /etc/dovecot/conf.d/15-mailboxes.conf werden Details zu den Mailboxen wie z.B. Unterordner die standardmäßig angelegt werden definiert. Ich habe hier die Standard-Order so eingestellt dass diese automatisch aboniert werden.

Dovecot
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
}

Dovecot neu starten

Zum Abschluss dieses Schrittes muss man jetzt dem Dovecot neu starten:

Bash
systemctl restart dovecot

E-Mail Client

Jetzt sollte man sich mit einem E-Mail Client mit dem IMAP-Server verbinden können. Man wird eine Warnung wegen dem selbst signierten Zertifikat bekommen für welches man eine Ausnahme festlegen muss. Dann sollte die Verbindung aber klappen. Folgende Einstellungen sollten gewählt werden:

Einstellung Wert
Verbindungsart IMAP
Port 143
Verbindungssicherheit STARTSSL
Authentifizierung Passwort, normal

Vorbereitungen für Postfix

Postfix wird später anfragen an Dovecot stellen, ob ein Benutzer berechtigt ist Mails zu versenden. Dazu muss Dovecot einen Socket bereitstellen über den Postfix seine Anfragen stellen kann. Der Socket wird in der Datei /etc/dovecot/conf.d/10-master.conf konfiguriert.

Dovecot
service auth {
  unix_listener auth-userdb {
    mode = 0666
    user = vmail
    group = vmail
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

LMTP Socket

Für die lokale Zustellung in die Postfächer wird LMTP (Local Mail Transport Protocol) verwendet, das ähnlich wie SMTP ist. Dazu wird das Paket dovecot-lmtpd benötigt.

Bash
apt install dovecot-lmtpd

Dazu richten wir postfix nochmal einen Socket in der Datei /etc/dovecot/conf.d/10-master.conf ein:

Dovecot
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0660
    user = postfix
    group = postfix
  }
}
Freitag
29
Dezember 2017
Klaus Moser
Klaus Moser

Ubuntu 16.04 - Mailserver - Vorbereitungen

Da mein aktueller Server noch auf Ubuntu 14.04 basiert und demnächst abgeschalten wird muss ich meinen Mailserver neu einrichten. Wie bei meinem alten Setup unter Ubuntu 14.04 kommt wieder Dovecot und Postfix mit MySQL zum Einsatz. Zusätzlich werde ich diesmal versuchen weitere Tools wie Rspamd und Postsreen zur Reduzierung der Spam-Mails einzusetzen. Dieser Artikel hat nicht den Anspruch vollständig zu sein sondern ist mehr wieder eine Art Notizzettel für die Einrichtung des Mailservers. In spätestens einem halben Jahr weiß ich sonst nicht mehr was ich gemacht habe :-) Tutorials wie man einen Mailserver aufsetzt gibt es ja inzwischen zu Hauf im Netz.

Folgende Funktionen soll das System wieder haben:

  • Senden und Empfangen von E-Mails für konfigurierbare Domains
  • Nutzer-/Domainverwaltung via MySQL Datenbank
  • Einrichtung von Mail-Weiterleitungen und Aliasen
  • Festlegen von Filterregeln mit Sieve

Zusätzlich möchte ich etwas gegen das Spam-Aufkommen tun. Welche Möglichkeiten es gibt weiß ich aktuell noch nicht genau und wird implementiert sobald die Basisfunktionen funktionieren.

Benötigte Software

Folgende Programme werden zu Einsatz kommen:

  • Dovecot
  • Postfix
  • Mysql
  • Apache

System auf den neuesten Stand bringen

Wie vor jeder größeren Aktion wird erst mal der Server auf einen aktuellen Stand gebracht:

Bash
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y --purge

Hostnamen setzen

Standardmäßig hat ein Server den man von seinem Provider bekommt einen generischen Namen aus dessen Namensbereich. In der DNS Verwaltung des Providers wird man aber für den Mailserver eher einen Namen wählen der an den eigenen Domainnamen angelehnt ist, wie z.B. smtp.mydomain.de. Da bei mir der Server kein dedizierter Mail-Server sein wird, sondern mein normaler Webserver, werde ich die www. - Version für den Hostnamen verwenden.

Bash
hostnamectl set-hostname --static www.mydomain.de

Dieser Hostname muss auch in der Datei /etc/hosts eingetragen werden. Zusätzlich soll der Server auch unter mail.mydomain.de erreichbar sein.

/etc/hosts
127.0.0.1       www.mydomain.de mail.mydomain.de localhost.localdomain localhost
::1             www.mydomain.de mail.mydomain.de localhost6.localdomain6 localhost6

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback

ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

Die folgenden Befehle sollten jetzt den korrekten Hostnamen ausgeben:

Bash
root@www:~# hostname
www.mydomain.de
root@www:~# hostname --fqdn
www.mydomain.de

Der FQDN muss außerdem noch nach /etc/hostname geschrieben werden:

Bash
echo $(hostname -f) > /etc/hostname

DNS einrichten

Damit Domainnamen zu der IP-Adresse des Servers aufgelöst werden können müssen in der Domain Verwaltung des Providers alle Domain die auf den Server zeigen sollen als A Records für IPv4 Adressen bzw. AAAA Records für IPv6 Adressen angelegt werden.

Vorbereitungen abgeschlossen

Der Server ist jetzt unter der korrekten Domain im Internet ereichbar und auf dem aktuellen Stand. Die Vorbereitungen sind damit vorerst abgeschlossen und wir können zum nächsten Schritt übergehen.

Im nächsten Beitrag wird es darum gehen Dovecot, den MDA (Mail Delivery Agent) und IMAP-Server zu installieren und einzurichten.

Samstag
14
Juni 2014
Klaus Moser
Klaus Moser

Ubuntu 14.04 - Mailserver - Sieve Plugin

Da der Mailserver jetzt ja steht, versuche ich mal ein paar von diesen praktischen Plugins einzubauen. Als erstes nehme ich mir mal sieve vor.

Sieve

Mit der Dovecot Erweiterung Sieve ist es möglich Mails bereits auf dem Webserver in Verzeichnisse sortieren zu lassen. Sieve ist eine Sprache zur Filterung von Mails. RFC 3028.

Folgendes installiert die Erweiterung:

apt-get install dovecot-sieve dovecot-managesieved

Für Sieve muss Dovecots LDA oder Dovecots LMTP verwendet werden.

LDA

Die Variante Sieve im LDA zu benutzen habe ich nicht getestet, sollte aber in etwa so funktionieren:

Postfix muss mitgeteilt bekommen dass man den Dovecot LDA verwenden möchte. Dazu trägt man folgendes in die /etc/postfix/main.cf ein:

mailbox_command = /usr/lib/dovecot/deliver 

In der Datei /etc/dovecot/conf.d/15-lda.conf muss die Zeile für die mail_plugins einkommentiert und sieve hinzugefügt werden:

protocol lda {
  # Space separated list of plugins to load
  #(default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

LMTP

In der Datei /etc/dovecot/conf.d/20-lmtp.conf muss die Zeile für die mail_plugins einkommentiert und sieve hinzugefügt werden:

protocol lmtp {
  postmaster_address = postmaster@meinedomain.de
  mail_plugins = $mail_plugins sieve
}

Alle Plugins sind übrigens unter /usr/lib/dovecot/modules zu finden.

Sieve Konfiguration

Die Konfiguration von Sieve erfolgt in der Datei /etc/dovecot/conf.d/90-sieve.conf:

plugin {

  # Benutzerspezifische Konfiguration
  sieve = /var/vmail/%d/%n/dovecot.sieve

  # Benutzerspezifische Konfigurationen
  sieve_dir = /var/vmail/%d/%n/

  #sieve_default  = /var/vmail/%d/default.sieve
  #sieve_global_dir = /var/vmail/%d/conf.d/sieve
}

Dateien in den Ordnern sieve_dir und sieve_global_dir müssen die Dateiendung .sieve haben, da sie sonst nicht erkannt werden. Der Parameter sieve_global_path ist übringes deprecated. Das Script unter sieve_default wird nur dann ausgeführt wenn kein benutzerspezifisches Script gefunden wird.

Sieve Scripts

Ein paar Beispielscripts sind z.B. im Dovecot Wiki zu finden. Im Prinzip sieht der Aufbau der Datei so aus, dass am Anfang die nötigen Plugins referenziert werden und dann eine if/elsif/else Konstruktion folgt.

require ["fileinto", "envelope"];

# Mail von einem Bestimmten Absender
if envelope :is "from" "someone@domain.de" {

  # In der Ordner "Someone" auf Ebene der INBOX verschieben
  fileinto "Someone";
}
elsif  envelope :is "from" "other@domain.de"  {

  # In einen Unterordner von INBOX
  fileinto "INBOX.Test";
} elsif ... {
  [...]
} else {
  keep;
}

Nach dem Ändern eines Scripts muss Dovecot übringens nicht neu gestartet werden (wäre auch ziemlich sinnfrei).

Sieve Remote Management

Der Port für das Remote Management der Sieve Regeln muss in der Datei /etc/dovecot/conf.d/20-managesieve.conf festgelegt werden. Standard ist 4190.

service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}

Zum Schluss noch Dovecot und ggf. Postfix neu starten

sudo service dovecot restart
sudo service postfix restart 

Thunderbird Add-On

Für Thunderbird gibt es ein Add-On mit dessen Hilfe man die Regeln auf dem Server bearbeiten kann. Das Add-On heißt "Sieve".

Allerdings muss man das Nightly Build verwenden, da das offizielle Add-On nicht funktioniert. Das Plugin gibt es hier: https://github.com/thsmi/sieve/blob/master/nightly/README.md

Hat man dieses Installiert steht ein neuer Reiter in den Kontoeinstellungen zur Verfügung auf dem man erst mal einstellen muss, dass derMailserver Sieve unterstützt.

Hat man das gemacht kann man über "Neu" Sieve Scripts anlegen. Das Editieren ist ein Traum da man einen Code Editor mit Syntax Highlightning und Syntaxprüfung zur Verfügung hat.

Thunderbird Add-On Sieve
Blog

Kmoser's Tech-Blog