The Über Mail-Server

Dieses Tutorial befindet sich derzeit noch in der Entwicklungsphase, Nachbauen des Systems auf eigene Gefahr!

Über Tester und Feedback freue ich mich natürlich =)

Vorwort

Willkommen, Freunde des offenen Mail-Verkehrs! Ihr habt es nun endlich gefunden, das brandneue Meisterwerk aus dem Hause Nefarius Solutions: The Über Mail-Server! Nach dem großen Erfolg des perfekten Mail-Servers wurde nun gut ein Jahr nach dessen Erstellung an einer neuen, geradezu über-neuen Anleitung gebastelt, die nun hier zu bestaunen ist. Vorweg gilt mein ganz besonderer Dank dem Kollegen Heribert Blank, ohne den ich nie so weit gekommen wäre bzw. mich nicht so intensiv damit beschäftigt hätte. Bevor ihr euch nun aber über den Artikel stürzt und das System eifrig nachbaut lest euch bitte erst noch dieses Vorwort durch, es sollte so gut wie alle Fragen für den Anfang abdecken ;-)

Wo hast du nur wieder diesen Namen aufgeschnappt?!

Ich gebe zu, der Titel meiner Kreation ist nicht ganz ohne Einfluss meines Lieblings-Shooters Team Fortress 2 entstanden. Aber was geht dich das eigentlich an?!

An welche Gruppe von Lesern richtet sich dieser Artikel?

Vorzugsweise an erfahrene Linux-Server Administratoren, die einfach eine strukturierte, vollständige Lösung für ein umfangreiches E-Mail System suchen. Auch Bastler und Neulinge in der Linux-Welt sind willkommen und dazu eingeladen, sich damit auszutoben. Am einfachsten richtet man sich dafür eine virtuelle Maschine mit Debian ein. Experimente auf dedizierten oder virtuellen Servern im bösen bösen Internet begrüße/dulde ich nicht und gebe auch keinen Support dazu! DNS-Grundlagen müssen auch sitzen!

Ich habe einen vServer/RootDS und erst 2mal die Konsole gesehen...

Dann bist du besser hier aufgehoben :-) Schau dir den Artikel hier besser erst wieder in 3-5 Jahren an, danke!

Du verwendest da großteils Beta-Software, warum das?

Ziel dieses Set-Ups war diesmal nicht Stabilität (darum extreme Vorsicht bei Produktiv-Systemen!) sondern Aktualität und Features. Mir sind die Komponenten nach langen Tests allerdings stabil genug ;-)

Debian?! *Schluchz* aber ich hab doch Ubuntu...

Es läuft auch mit Ubuntu ab 10.04 problemlos :-)

FREMDQUELLEN!!! *SCHIMPF*

Tja, wenn du gerne alles selbst kompilieren möchtest, nur zu!

Du hast Feature-Request soundso immer noch nicht eingebaut!!!

Tja, ich habe auch noch ein reales Leben, man glaubt es kaum :-P

Wenn du bereit bist und noch immer nicht beleidigt auf mich; viel Spaß! :-)

Der Duke sagt es…

Voraussetzungen

Damit dieses Setup von Erfolg gekrönt wird müssen folgende Bedingungen erfüllt sein:

  • Der Server ist mit mindestens einer statischen IP mit dem Internet verbunden.
    • dazu zählen keinesfalls dynamische IPs wie von privaten ISPs vergeben!
  • Eine funktionierende DNS-Konfiguration muss vorhanden sein.
    • dazu gehört ein MX-Record und der PTR.
    • DynDNS fällt da nicht hinein!

To-Do

  • Ubuntu-spezifische Unterschiede dokumentieren
  • ClamAV einbinden
  • APT-Pinning einbauen
  • Beispiele zum Testen einfügen
  • DAViCal ausprobieren

Software

Geschrieben und getestet wurde diese Anleitung auf Debian „Squeeze“ 6 und Ubuntu „Lucid Lynx“ 10.04, beide in den amd64-Varianten mit dieser Software:

  • Postfix 2.7
  • Dovecot 2.0
  • MySQL 5.1
  • Apache 2.2 oder Lighttpd 1.4
  • PHP 5.3
  • Perl 5.10
  • Vbox.Adm 0.1.8
  • RoundCube 0.3.1 oder 0.5.3 (optional)

Vorbereitung

Bevor wir loslegen können, benötigen wir für ein noch ein paar Software-Repositories:

Dovecot

Stabiler Dovecot 2.0 Build:

echo "deb http://xi.rename-it.nl/debian/ stable-auto/dovecot-2.1 main" >> /etc/apt/sources.list.d/the_ueber_mail-server.list
wget -O - http://xi.rename-it.nl/debian/archive.key | apt-key add -

VBox.Adm

Aktuellster Build von VBox.Adm:

echo "deb http://packages.gauner.org/ squeeze main contrib non-free" >> /etc/apt/sources.list.d/the_ueber_mail-server.list
wget -q -O- http://www.vboxadm.net/C85AEFAC.pem | apt-key add -

RoundCube

Arbeite diesen Teil ab, wenn du RoundCube STABLE 0.3.1 verwenden möchtest
Hierfür ist nichts weiter zu erledigen.
Arbeite diesen Teil ab, wenn du RoundCube UNSTABLE 0.5.3 verwenden möchtest
echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list.d/the_ueber_mail-server.list

Installation

Da wir dem System nun einige neue Software-Quellen hinzugefügt haben, müssen wir die Paket-Liste aktualisieren lassen:

aptitude update

MySQL

Zuerst installieren wir den MySQL-Server, dessen zentrale Aufgabe es sein wird, die Daten der virtuellen Mailboxen zu speichern:

aptitude install mysql-server

Das Installationsskript fragt nach einem neuen Passwort für den eben angelegten MySQL-Nutzer root. Es ist ein entsprechend langes und zufälliges Passwort zu wählen und notieren:

Die Eingabe wiederholen, um Tippfehler auszuschließen:

Webserver, Perl & PHP

Das Front-End VBox.Adm und der IMAP-Client RoundCube benötigen sowohl einen Webserver, als auch die Unterstützung für Perl und PHP:

Arbeite diesen Teil ab, wenn du Apache verwenden möchtest
aptitude install libapache2-mod-php5 libapache2-mod-perl2
Arbeite diesen Teil ab, wenn du Lighttpd verwenden möchtest
aptitude install lighttpd php5-cgi

Die notwendigen Module müssen noch aktiviert und die Konfiguration neu eingelesen werden:

lighty-enable-mod fastcgi fastcgi-php
service lighttpd force-reload

RoundCube

Arbeite diesen Teil ab, wenn du RoundCube STABLE 0.3.1 installieren möchtest
Der IMAP-Webclient RoundCube wird aus den regulären Debian Repositories geholt und installiert:
aptitude install roundcube roundcube-mysql
Arbeite diesen Teil ab, wenn du RoundCube UNSTABLE 0.5.3 installieren möchtest
Der IMAP-Webclient RoundCube wird aus den Debian Backports geholt und installiert:
aptitude -t squeeze-backports install roundcube roundcube-mysql roundcube-plugins

Nun werden wir gefragt, ob wir die Datenbank automatisch einrichten lassen möchten, das nehmen wir dankend an:

Datenbanktyp ist natürlich MySQL:

Damit das Installationsskript seine Arbeit verrichten kann, benötigt es nun das MySQL-root-Passwort (wie weiter oben bereits definiert):

Jetzt kann ein neues Passwort für den neuen Datenbankbenutzer gesetzt werden (möglicht zufällig und lang):

Eingabe wiederholen zur Fehlervermeidung:

Postfix

Nun installieren wir unseren SMTP-Server Postfix, die Unterstützung für PCRE (perl compatible regular expression) maps und MySQL:

aptitude install postfix postfix-pcre postfix-mysql

Vermutlich ist Exim bereits installiert, dessen Deinstallation kann ohne Weiteres zugestimmt werden:

Dieser Hinweis (sollte er auftauchen) kann übersprungen werden:

Wir wählen „Internet-Site“ und weiter mit OK:

Dieser Wert wird im späteren Verlauf überschrieben, es ist also vollkommen egal, was hier eingegeben wird. Den Empfehlungen des Skripts muss nicht Folge geleistet werden, da unser Szenario anders aufgebaut sein wird!

Postgrey & Policyd

Für Anti-Spam installieren wir nun den Postgrey-Dämon - welcher bei unbekannten Absendern mit einem temporären Fehler antwortet, um schlecht konfigurierte Spam-Server auszuschließen - und den Policyd für Postfix, der (zusammen mit anderen Komponenten) Spam-Checks durchführt:

aptitude install postgrey policyd-weight

Dovecot

Für Dovecot installieren wir mehrere Pakete für den Support von IMAP, POP3, Sieve, den Managesieve-Dämon und den LMTP-Server:

Wer heutzutage noch - aus welchem unverständlichen Grund auch immer - POP3 benötigt, lässt das entsprechende Paket dovecot-pop3d in der nachfolgenden Zeile. Ansonsten kann es getrost gekickt werden.

aptitude install dovecot-imapd dovecot-sieve dovecot-managesieved dovecot-pop3d dovecot-mysql dovecot-lmtpd

VBox.Adm

Die Installation des Web-Front-Ends VBox.Adm erfolgt erst später, da davor noch ein paar Schritte notwendig sind!

Konfiguration

VBox.Adm

Die Kommandozentrale des neuen Mail-Systems bildet VBox.Adm, welches in diesem Abschnitt eingerichtet wird. Es wird neben dem Web-Frontend auch ein SMTP-Proxy zum Filtern von Mails mitgeliefert, der noch seinen eigenen Benutzer benötigt:

adduser --system --home /var/lib/vboxadm --no-create-home --group --disabled-password --disabled-login vboxadm

Die Mails landen bei meinem Setup in einem separaten Verzeichnis mit eigenem Besitzer:

mkdir -p /var/vmail/
adduser --system --home /var/vmail --no-create-home --group --uid 150 --disabled-password --disabled-login vmail
chown -R vmail:vmail /var/vmail/

Jetzt können wir das Meta-Paket vboxadm installieren, welches alle notwendigen Pakete für die Administrations- und Filter-Umgebung VBox.Adm beinhaltet:

aptitude install vboxadm
Arbeite diesen Teil ab, wenn du Apache verwendest
Auf die Frage, welchen Webserver wir betreiben, antworten wir mit Apache in der Version 2:

Während der Installation wird auch ein neuer virtueller Host angelegt, welcher auch Direktiven für eine RoundCube Instanz mit bringt. Dieser wird in diesem Setup nicht benötigt und kann in der /etc/apache2/conf.d/vboxadm.conf gelöscht werden. Das vermeidet unnötige Warnungen im Log.

Die mitgelieferte Konfigurationsdatei wird ebenfalls angepasst, unsere Domain muss eingepflegt werden:

sed -i 's/YOURDOMAIN.TLD/example.net/g' /etc/apache2/conf.d/vboxadm.conf

Damit die Änderungen übernommen werden muss der Indianer neu gestartet werden:

service apache2 restart
Arbeite diesen Teil ab, wenn du Lighttpd verwendest
Auf die Frage, welchen Webserver wir betreiben, antworten wir mit Lighttpd:

Damit die Änderungen übernommen werden muss Lighty neu geladen werden:

service lighttpd force-reload

Der mitgelieferte SMTP-Proxy-Dienst muss noch aktiviert werden:

sed -i 's/START_SMTPPROXY="false"/START_SMTPPROXY="true"/g' /etc/default/vboxadm-sa

Nun ein lästiger Schritt: das anlegen der Datenbank-Benutzer mit sicherer Rechtevergabe. Damit du die Queries nicht alle stumpfsinnig per Hand in die Shell klopfen musst, habe ich sie auf Bash-Syntax umgeschrieben; die folgenden Zeilen können einfach kopiert und in die Shell eingefügt werden. Die Variable MYSQLPW ist mit dem weiter oben definierten Passwort des MySQL-Nutzers root zu füttern, in ACCPW landet ein neues ebenso starkes Passwort für die Konten, die in den folgenden Schritten angelegt werden. Sicherheitsfanatiker können natürlich jedem Nutzer ein eigenes individuelles Passwort verpassen ;-)

unset HIST; unset HISTFILE
MYSQLPW="das MySQL root Passwort"
ACCPW="das Passwort für den Account (hier das gleiche)"
MYSQL="mysql -uroot -p$MYSQLPW"
echo "CREATE DATABASE vboxadm;" | $MYSQL
gunzip -d -c /usr/share/doc/vboxadm-common/examples/mysql/vboxadm-current.sql.gz | $MYSQL vboxadm
echo "GRANT ALL ON vboxadm.* TO 'vboxadm'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "GRANT SELECT ON vboxadm.* TO 'postfix'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "GRANT SELECT ON vboxadm.mailboxes TO 'dovecot'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "GRANT SELECT ON vboxadm.domains TO 'dovecot'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "GRANT SELECT,UPDATE ON vboxadm.mailboxes TO 'vboxadm_user'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "GRANT SELECT ON vboxadm.domains TO 'vboxadm_user'@'localhost' IDENTIFIED BY '$ACCPW';" | $MYSQL
echo "FLUSH PRIVILEGES;" | $MYSQL
unset MYSQLPW
unset ACCPW

Nun machen wir uns über die Konfigurationsdatei von VBox.Adm her und fügen das eben gesetzte MySQL-Passwort ein:

/etc/vboxadm/vboxadm.conf
[default]
dbuser=vboxadm
dbpass=MYSQLPW
dbdb=vboxadm
dbhost=localhost
domain=example.net
mail_location=/var/vmail
 
pwscheme=ssha256
 
[autodiscover]
imap_hostname=mail.example.net
pop3_hostname=mail.example.net
pw_encrypt = 0
pop3_ssl = 1
pop3_tls = 1
imap_ssl = 1
imap_tls = 1
smtp_sma = 1
 
# config for webfrontend
[cgi]
no_ssl=1
base_url=/cgi-bin/vboxadm.pl
media_prefix=
clean_html=1
#template_path=/my/custom/templates
long_forms=1
sa_default_block_score=6.31
obey_pw_lock=1
 
# config for vacation autoresonder
[vacation]
 
notify_interval=7
 
[awl]
ignore_net=192.168.
only_domain=example.net
mailserver = postfix
lifetime = 365
logfile = /var/log/mail.log
whitelist = /etc/postfix/maps/whitelist
 
# Dieses Feature ist noch unvollständig, daher enabled auf 0 lassen!
[mailarchive]
dbuser=vboxadm_ma
dbpass=vboxadm_ma
dbdb=vboxadm_ma
dbhost=vbxoadm_ma
enabled=0
allow=127.0.0.1
 
[notify]
logfile=/var/log/mail.log
cc=postmaster@example.net
recipient=1
sender=1
postmaster=1
 
# config for smtpproxy
[smtpproxy]
nodb=0
soft_bounce=0
caching=1
listen=localhost:10024
connect=localhost:10025
pidfile=/var/run/vboxadm/sa.pid
logfile=/var/log/vboxadm/sa.log
user=vboxadm
group=vboxadm
max_msg_size=25
# the childtimeout should not be set too low. the time necessary to process a message
# is depended on the configuration, the protocol used as well as the size of the message
# and the upstream bandwidth.
# some (!) setups may required very high values here (> 3600s)!
childtimeout=300
# tempdir should be a sufficient large ramdisk to speed up processing
tempdir=/tmp
 
# SpamAssassin
# max. msg size for scanning in MB
sa_max_msg_size=10
# timeout for scanning
sa_timeout=30
sa_default_block_score=6.31
sa_default_status=1
 
# db
#dbuser=vboxadm
#dbpass=vboxadm
#dbdb=vboxadm
#dbhost=localhost
 
# server information
min_servers=20
max_servers=80
min_spare_servers=10
max_spare_servers=20
max_requests=250
nsloglevel=2
logsock=unix
recipient_delimiter=+

Noch ein letzter Schritt; das Anlegen des Administrators. Folgendes Kommando erstellt einen neuen Siteadmin und gibt das erstellte Passwort aus (welches auch notiert werden sollte):

vboxadm mailbox add admin@example.net --bootstrap -a 1 --siteadmin=1

Jetzt kann der SMTP-Proxy gestartet bzw. neu gestartet werden:

service vboxadm-sa restart

In der Standardkonfiguration befindet sich das Web-Frontend unter http://vboxadm.example.net/ Wer hier Probleme hat, siehe Bugs.

Postfix

Nun machen wir uns über unseren SMTP-Server Postfix her. Die vorhandene Konfiguration des Dienstes überschreiben wir mit den Versionen, die VBox.Adm mitgeliefert hat:

cp -a /usr/share/doc/vboxadm-common/examples/postfix/* /etc/postfix/
gunzip -d -f /etc/postfix/*.cf.gz

In den Maps muss noch das MySQL-Passwort gesetzt werden, dazu muss die Variable MYSQLPW mit dem korrekten Passwort versehen werden, danach kann sed seine Arbeit verrichten:

MYSQLPW="das Passwort des MySQL Postfix-Nutzers"
sed -i "s/PASSWORD/$MYSQLPW/g" /etc/postfix/maps/virtual_* /etc/postfix/maps/access_recipient_roles.cf
unset MYSQLPW

Postfix' main.cf bedarf noch einiger kleiner Anpassungen, die wie hier gelistet zu Übernehmen sind:

Dass mir ja keiner auf die Idee kommt, mydestination mit dem FQDN zu füttern, dann knallts! Diese Variable ist in einem virtuellen Setup Tabu, wer sie trotzdem ändert: viel Spaß in Postfix' Log-Hölle! Wer hier nicht auf mich hört bekommt auch keinen Support und darf auch keine freundliche Antwort erwarten!

/etc/postfix/main.cf
myhostname = example.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:150
mydestination = mxsrv01.example.net, localhost
relayhost =
inet_protocols = all
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

Anstatt Deliver benutze ich hier den neuen LMTP-Server von Dovecot; diese Zeile übernimmt die Änderung komfortabel:

postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

Nun muss noch ein wichtiger Schritt durchgeführt werden. RFC-konform konfigurierte Mail-Server prüfen penibelst genau, wer da anklopft und etwas zustellen möchte. Damit unser Server nicht schon beim HELO (oder EHLO bei ESMTP) angewiesen wird, muss er sich mit mit einem FQDN vorstellen, der

  • einen gültigen MX-Record besitzt und
  • rückwärts auflösbar ist (PTR setzen, nicht vergessen bei Verwendung von IPv6!)

Am Besten eignet sich also eine standardisierte Subdomain wie mail.example.net. Diese schreiben wird in die /etc/mailname, welche von Postfix ausgewertet wird:

echo "mail.example.net" > /etc/mailname

Unter den kopierten Dateien findet sich auch ein Makefile, welches das Erzeugen der Datenbanken übernimmt:

cd /etc/postfix/
make maps

Die Meldung

postfix/postfix-script: fatal: the Postfix mail system is not running
make: *** [maps] Error 1

kann ignoriert werden, es hat trotzdem funktioniert.

Jetzt kann Postfix mit dieser neuen Konfiguration neu gestartet werden:

service postfix restart

Postgrey

Hier bedarf es keines großen Aufwands, es ist lediglich der Inhalt der folgenden Datei anzupassen:

/etc/default/postgrey
POSTGREY_OPTS="--inet=60000 --delay=60"

Danach kann der Dienst neu gestartet werden:

service postgrey restart

Dovecot

Jetzt machen wir uns über Dovecot her. Er wird nicht nur als IMAP bzw. POP3-Server fungieren, sondern übernimmt auch die Benutzerauthentifikation, Quotas und Sieve.

Die Daten für die Mailboxen werden aus der Datenbank bezogen, die folgende Datei kann (sofern sie nicht schon existiert) neu angelegt und mit diesem Inhalt bestückt werden:

/etc/dovecot/dovecot-sql.conf
driver = mysql
CONNECT = host=localhost dbname=vboxadm USER=dovecot password=MYSQLPW
default_pass_scheme = PLAIN
 
user_query = /* dovecot-sql.conf user_query */ \
        SELECT '/var/vmail/%d/%n' AS home, 'mdbox:~/mail' AS mail, 150 AS uid, 150 AS gid, \
        CONCAT('*:bytes=', CAST(m.quota AS CHAR)) AS quota_rule, \
        CONCAT(m.local_part, '@', d.name) AS USER, m.password AS password \
        FROM mailboxes AS m LEFT JOIN domains AS d ON m.domain_id = d.id \
        WHERE m.local_part = '%n' AND d.name = '%d' AND m.is_active AND d.is_active
 
password_query = /* dovecot-sql.conf password_query */ \
        SELECT '/var/vmail/%d/%n' AS userdb_home, 'mdbox:~/mail' AS userdb_mail, 150 AS userdb_uid, 150 AS userdb_gid, \
        CONCAT('*:bytes=', CAST(m.quota AS CHAR)) AS userdb_quota_rule, \
        CONCAT(m.local_part, '@', d.name) AS USER, m.password AS password \
        FROM mailboxes AS m LEFT JOIN domains AS d ON m.domain_id = d.id \
        WHERE m.local_part = '%n' AND d.name = '%d' AND m.is_active AND d.is_active

Der Platzhalter MYSQLPW muss natürlich wieder mit dem Passwort des weiter oben angelegten Datenbanknutzers ersetzt werden.

Jetzt geht es um das Herz von Dovecot. Die nun gelisteten Dateien finden sich alle unter /etc/dovecot/conf.d/ und müssen entsprechend angepasst oder erstellt werden:

10-auth.conf

Hier landet alles, was mit Authentifizierung zu tun hat. Da wir Transportschichtverschlüsselung (SSL, TLS) einsetzen, kann plain problemlos die einzige Authentifizierungsmethode bleiben. Danach wird noch die Konfigurationsdatei für die Datenbank inkludiert:

auth_mechanisms = plain
 
!include auth-sql.conf.ext

auth-sql.conf.ext

Diese eben eingebundene Datei wird auf folgenden Inhalt umgeschrieben. Zuerst wird angegeben, über welche Schnittstelle die Authentifizierungsdaten bezogen werden sollen. In unserem Fall ist das die weiter oben bereits angelegte Datei mit den SQL-Queries, welche alle nötigen Daten für die Anmeldung liefern. Danach teilen wir Dovecot mit, dass alle Umgebungsvariablen für den Nutzer bereits aus der Passwort-Query geliefert wurden. Es ist daher kein separater Lookup nötig, was die Anmeldung beschleunigt. Die letzte Abfrage ist für den LDA von bedeutender Wichtigkeit, da dieser ebenfalls über einen Lookup in der Datenbank nicht nur statische Informationen wie UID, GUI, Home usw. benötigt, sondern auch dynamische Daten wie Quota-Limits abfragen muss, um eventuell bei einem vollen Postfach die Zustellung zu verweigern.

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf
}

userdb {
  driver = prefetch
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf
}

10-mail.conf

Nun setzen wir ein paar systemspezifische Parameter. Der Nutzer, mit dessen Rechte der Mailtransport abgewickelt wird, ist unser erstellter vmail. Dessen UID und GID sind die einzig gültigen, für die Mails abgearbeitet werden. Schließlich noch den globalen Plugins das Quota-Plugin hinzufügen:

mail_uid = vmail
mail_gid = vmail

first_valid_uid = 150
last_valid_uid = 150

mail_plugins = $mail_plugins quota

10-master.conf

Der folgende Codeabschnitt erzeugt einen Unix-Socket für Postfix in dessen Jail, an den er akzeptierte Nachrichten weiterreichen wird. Das verwendete LMTP ersetzt den Deliver-Prozess, bekannt aus älteren Setups.

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0660
    user = postfix
  }
}

Dovecot übernimmt die Authentifizierung von Benutzerkonten, über diesen Socket kann Postfix Authorisierungsanfragen stellen:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

15-lda.conf

Nun zur Konfiguration des Local Delivery Agents. Wir geben eine gültige Mail-Adresse an, die an fehlerhafte Absender zurückgeschickt wird. Der Wert von recipient_delimiter muss äquivalent zu Postfix' Parameter sein. Danach weisen wir ihn an, nicht-existente Postfächer beim ersten Eintreffen einer Mail automatisch zu erstellen. Zuletzt aktivieren wir noch alle definierten Plugins zum Filtern der Nachrichten:

postmaster_address = postmaster@example.net
recipient_delimiter = +
lda_mailbox_autocreate = yes

protocol lda {
  mail_plugins = $mail_plugins
}

20-imap.conf

Hier gibt es nicht viel zu ändern, lediglich das Plugin imap_quota muss hinzugefügt werden:

protocol imap {
  mail_plugins = $mail_plugins imap_quota
}

20-lmtp.conf

Das Sieve-Plugin ermöglicht die Nutzung von Sieve-Filter-Skripten, die später noch besprochen werden:

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

20-managesieve.conf

Der Managesiev-Dämon lauscht auf den gegebenen Port und ermöglicht dem Nutzer nach erfolgreichem Login, seine persönlichen Filter-Skripte zu erstellen oder zu ändern:

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

90-quota.conf

Quota-Regeln beschränken die Postfachgröße. Es kann sowohl ein Größenlimit in Bytes als auch in der Anzahl der Nachrichten definiert werden. Ich persönlich halte es für sinnvoller, nur die Größe in Bytes zu beschränken. Die erste Zeile definiert den Speicherort der Information über den benutzen Speicherplatz. Hier wird also eine simple Datei im Mailverzeichnis des jeweiligen Nutzers dafür verwendet. Ich habe mich gegen ein Dictionary in der Datenbank entschieden, da bei intensiver Nutzung des Systems viele Queries mit nur wenigen Bytes Daten entstehen; eine Verschwendung. Die zweite Zeile definiert einen Default-Wert, der die Postfachgröße beschränkt, wenn der Nutzer kein Quota-Limit vorgegeben hat. Dieser Wert wird im normalen Betrieb von dem aus der Datenbank überschrieben:

plugin {
  quota = dict:User quota::file:%h/mail/dovecot-quota
  quota_rule = *:storage=500MB
}

Geschafft! =) Jetzt kann Dovecot neu gestartet werden:

service dovecot restart

RoundCube

Webserver

Arbeite diesen Teil ab, wenn du Apache verwendest
Standardmäßig ist der Alias für RoundCube deaktiviert. In meinem Setup können wir die Standardeinstellungen behalten, es müssen lediglich die beiden Aliase einkommentiert werden: <fileapache /etc/apache2/conf.d/roundcube> # Those aliases do not work properly with several hosts on your apache server # Uncomment them to use it or adapt them to your configuration Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ Alias /roundcube /var/lib/roundcube </file>

Die Änderung muss noch übernommen werden:

service apache2 restart
Arbeite diesen Teil ab, wenn du Lighttpd verwendest
Da Lighty die mitgelieferte .htaccess nicht auswerten kann, müssen wir global die Sitzungsverschlüsselung des Suhosin-Patches deaktivieren. Ohne diesen Schritt kann man sich zwar anmelden, wird jedoch beim nächsten Request sofort wieder hinausgeworfen:
sed -i "s/;suhosin.session.encrypt = on/suhosin.session.encrypt = off/g" /etc/php5/conf.d/suhosin.ini

Damit diese Änderung greift, muss der Webserver neu gestartet werden:

service lighttpd restart

VBox.Adm Plugin

VBox.Admin hat ein Plugin für RoundCube dabei, mit dem es dem Endnutzer ermöglicht wird, sein Passwort zu ändern oder eine Abwesenheitsnachricht zu verfassen. Das Plugin wird zwar mitgeliefert, muss aber eigenhändig installiert und aktiviert werden. Die Installation ist allerdings mit den folgenden Schritten schnell vollzogen:

tar xfz /usr/share/doc/vboxadm-common/examples/roundcube-plugin-vboxadm.tar.gz -C /usr/share/roundcube/plugins/
ln -s /usr/share/roundcube/plugins/vboxadm /var/lib/roundcube/plugins/vboxadm
mkdir -p /etc/roundcube/plugins/vboxadm
mv /usr/share/roundcube/plugins/vboxadm/config.inc.php /etc/roundcube/plugins/vboxadm/
ln -s /etc/roundcube/plugins/vboxadm/config.inc.php /usr/share/roundcube/plugins/vboxadm/config.inc.php

An den Einstellungen des Plugins muss nicht viel geändert werden, lediglich die Datenbank-Zugangsdaten müssen geändert werden:

/etc/roundcube/plugins/vboxadm/config.inc.php
$vboxadm_config['db_dsn'] = 'mysql://vboxadm:MYSQLPW@localhost/vboxadm';

Das Plugin muss in der RoundCube-Konfiguration noch aktiviert werden. Der Plugin-Name vboxadm wird dem Array aktiver Plugins hinzugefügt:

/etc/roundcube/main.inc.php
$rcmail_config['plugins'] = array('vboxadm');

Managesieve Plugin

Mit dem Managesieve-Plugin können die Sieve-Filter-Skripte pro Benutzer bequem direkt in den Einstellungen von RoundCube editiert werden. Um das Plugin zu aktivieren, machen wir zuerst eine Kopie der Default-Konfiguration:

'cp' /usr/share/roundcube/plugins/managesieve/config.inc.php.dist /etc/roundcube/plugins/managesieve/config.inc.php

Hier muss lediglich der Port geändert werden, damit das Skript den Server auch findet:

sed -i "s/2000/4190/g" /etc/roundcube/plugins/managesieve/config.inc.php

Das Plugin muss in der RoundCube-Konfiguration noch aktiviert werden. Der Plugin-Name managesieve wird dem Array aktiver Plugins hinzugefügt:

/etc/roundcube/main.inc.php
$rcmail_config['plugins'] = array('vboxadm', 'managesieve');

Einstellungen

Mit den Standardeinstellungen (zu finden in der /etc/roundcube/main.inc.php) erscheint zusätzlich zu den Eingabefeldern für Benutzername und Passwort auch eine Box für den Hostnamen. Da unser Client auch nur mit unserem neuen Server kommunizieren soll, können wir in der Konfiguration localhost fix einfügen:

$rcmail_config['default_host'] = 'localhost';

Standardsprache ist Englisch, das lässt sich einfach ändern:

$rcmail_config['language'] = 'de_DE';

Ich finde es nützlich, wenn das Vorschau-Panel aktiviert ist:

$rcmail_config['preview_pane'] = true;

In der Standardkonfiguration befindet sich der Webmail Client unter http://example.net/roundcube/

Bugs

Hier sind gefundene Bugs und deren Workarounds verzeichnet.

Komponente Beschreibung Lösung
Vbox.Adm, Datenbank Nach einem Update auf Version 0.1.9 erscheint beim Login der Fehler
Unknown column 'mailboxes.is_siteadmin' in 'where clause' at /usr/share/perl5/CGI/Application/Plugin/Authentication/Driver/DBI.pm line 314.
ALTER TABLE mailboxes CHANGE is_superadmin is_siteadmin TINYINT(1) NOT NULL;
RoundCube, Vbox.Adm Plugin Nach einem Update auf Version 0.1.9 funktioniert das VBox.Adm Plugin nicht mehr. sed -i „s/is_superadmin/is_siteadmin/g“ /usr/share/roundcube/plugins/vboxadm/vboxadm.php
VBox.Adm, SA Proxy Starting VBoxAdm SMTP-Proxy:Argument „vboxadm“ isn't numeric in chown at /usr/sbin/vboxadm-sa line 91. Argument „vboxadm“ isn't numeric in chown at /usr/sbin/vboxadm-sa line 91. chown vboxadm -R /var/log/vboxadm/
VBox.Adm, Webfrontend Es wird auf HTTPS umgeleitet obwohl ich es nicht eingerichtet habe! Siehe hier.

Support

Es hat nicht ganz so reibungslos geklappt wie prophezeit? Du hängst irgendwo fest? Bekommst einen Fehler, dessen Ursache du nicht finden kannst bzw. dessen Bedeutung dir nicht ganz klar ist? Du hast Verbesserungsvorschläge, Kritiken oder sonst was zu melden? Dann gibt es nun mehrere Möglichkeiten für dich, Support zu erhalten:

  • Du schreibst einen Kommentar unter diesen Artikel
    • Vorteil: andere Nutzer könnten von deinem Beitrag profitieren.
    • Nachteil: meist bin es nur ich der antwortet und das auch häufig verzögert.
  • Du wendest dich an diesen Forums-Thread wenn du einen Fehler entdeckt oder anderweitig zur Verbesserung des Artikels beitragen kannst!
    • Vorteil: ich reagiere so schnell wie möglich auf deinen Beitrag und integriere ggf. deine Vorschläge sofort.
    • Nachteil: diesen Thread bitte nicht mit Support-Anfragen bei Fehlern zumüllen, das erschwert das Beantworten und verwirrt andere Leser.
  • Du wendest dich ans Server-Unterforum und erstellst einen neuen Thread, wenn du auf ein unlösbares Problem gestoßen bist, obwohl du dich exakt an die Anleitung gehalten hast.
    • Vorteil: neben meiner Wenigkeit stehen dir dort auch eine Menge anderer Experten zur Verfügung, die dir gerne weiterhelfen werden.
    • Nachteil: du musst dich eventuell etwas gedulden, bis du eine Antwort bekommst, da auch andere Nutzer Hilfe bei ihren Problemen benötigen.

Lobgesänge können natürlich weiterhin in der Kommentar-Sektion ausgetragen werden ;-)

Quellen

Kommentare