heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

c't
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

Mailserver (mit IMAP)

  1. Mailserver (mit IMAP)
    1. Exim 4
    2. Cyrus + SASL
      1. Übersicht
      2. Installation
      3. Konfiguration von SASL
      4. Anlegen von Mailboxen
      5. Anbindung an Exim
    3. Squirrelmail
    4. Fetchmail
    5. Backup
      1. Migration der Mailboxen von einer anderen Cyrus-Installation
    6. Literatur

Der Mailserver gehört nicht gerade zu den wichtigsten Diensten auf meinem System. Im Prinzip kommt man auch relativ gut ohne diesen aus und kann einfach alles über einem Webmailer oder jedes beliebige E-Mail Programm erledigen. Außerdem sind die Zeiten, in denen Freemailer wie GMX oder Web.de nur wenige Megabyte an Speicherplatz angeboten haben, schon lange vorbei.

Einer der Vorteile eines eigenen Mailservers liegt in der kostenlosen Verfügbarkeit von IMAP. Normalerweise wird dieser Dienst bei den Freemailern nur kostenpflichtig angeboten. Mit IMAP ist es problemlos möglich, von verschiedenen Betriebssystemen mit völlig unterschiedlichen E-Mail Clients auf den gleichen Datenbestand zuzugreifen. Für Anwender, die häufig auf unterschiedlichen Rechnern arbeiten, entfällt so der Aufwand für die Synchronisation, ohne dabei auf den Komfort eines E-Mail Clients verzichten zu müssen.

Bei mir hole ich meine E-Mails mit fetchmail über POP3 bei meinen Mail-Provider(n) ab. Dabei werden die Mails über den Mailserver (Exim) direkt in meinem IMAP-Postfach (Cyrus) abgelegt. Beim Versenden werden die Nachrichten direkt über den jeweiligen Provider verschickt, da der Umweg über den eigenen Mailserver teilweise Probleme bereitet. In der Regel kann der eigene Mailserver keine Nachrichten direkt an den Mailserver des Empfängers verschicken, da kaum ein Server im Internet Nachrichten aus dynamisch zugewiesenen IP-Adressbereichen annimmt. Es müssen also alle Nachrichten über den SMTP-Server des Providers versendet werden.

Dieses führt bei mehreren Benutzern teilweise zu Problemen, da der Mailserver alle Nachrichten über den gleichen Provider versendet. In den Regel wird ein Mailserver von GMX keine Nachrichten annehmen, die z.B. eine Freenet-Adresse als Absender tragen. Andersherum kann das zwar evtl. funktioniere, aber machmal werden die Mails vom entgültigen Empfänger geblockt, da E-Mails vom Freenet-Mailserver mit einer fremden Absenderadresse als SPAM gewertet werden. Schlimmstenfalls kann es vorkommen, dass der Absender erst einmal gar nicht davon erfährt, dass seine E-Mails nicht zugestellt werden konnte.

Aufgrund dieser und ähnlichen Erfahrungen versende ich die Nachrichten lieber direkt vom Client aus an den Server des jeweiligen Providers, da es hierbei weniger Fehlerquellen gibt. Eine Anbindung des Servers an einen externen SMTP-Smarthost kann aber trotzdem sinnvoll sein, wenn z.B. automatisch generierte Nachrichten (Cron, Anrufbeantworter, ...) an eine externe Adresse gesendet werden sollen.

Exim 4

Zuerst wird Exim4 installiert und eingerichtet. Dabei ist es am sinnvollsten, die Konfiguration zuerst über ctsrvcfg (Gruppe "mail") durchzuführen, da zum einen die meisten Werte automatisch passend voreingestellt werden, zum anderen auch der Benutzername und das Passwort für den SMTP-Server des Providers abgefragt werden. Wer auch die anderen Einstellungen kontrollieren möchte, kann nach der Konfiguration durch ctsrvcfg noch einmal dpkg-reconfigure exim4-config aufrufen. Ich entscheide mich hierbei für die Option, die Einstellungen auf kleine Dateien aufzuteilen.

Konfiguration über ctsrvcfg:

  • SMTP-Server Ihres Providers/Hosters?: mx.freenet.de
  • Name der DNS-Domain für abgehende Mail: <leer>
  • Benutzername für SMTP-Zugriff: <login name> (Bei einigen Providern mit "@provider.de", bei anderen ohne)
  • Passwort für SMTP-Zugriff: <e-mail passwort>

Die hier eingstellten Werte stehen später in den Dateien "update-exim4.conf.conf" und "passwd.client" unter "/etc/exim4".

Ich möchte gerne, dass im lokalen Netz auch Nachrichten ohne Domainnamen im Empfänger (also einfach "christian" anstelle von "christian@…") versendet werden können. Außerdem soll es zulässig sein, dass lokal auf dem Server Username als Absender ausreichend ist (z.B. "root" anstelle von "root@…"). Dafür muss die Exim-Konfigurationsdatei gerinfügig angepasst werden:

--- /etc/exim4/conf.d/main/02_exim4-config_options ---
--- bzw. /etc/exim4/exim4.conf.template, falls die Konfiguration nicht auf kleine Dateien aufgeteilt wurde ---

# By default, Exim expects all envelope addresses to be fully qualified, that
# is, they must contain both a local part and a domain. Configure exim
# to accept unqualified addresses from certain hosts. When this is done,
# unqualified addresses are qualified using the settings of qualify_domain
# and/or qualify_recipient (see above).
sender_unqualified_hosts = 127.0.0.1
recipient_unqualified_hosts = 127.0.0.1:192.168.0.0/24

Cyrus + SASL

Übersicht

Cyrus als IMAP-Server ist Cyrus fast eine Nummer zu groß für den Heimgebrauch und normalerweise auch nicht gerade einfach einzurichten. Für die Verwaltung der Benutzerdaten bringt Cyrus einen Dienst (SASL) mit, so dass Mail-Benutzer keinen Account auf dem Linux-System benötigen. Da ich aber auf jeden Fall eine zentrale Benutzerverwaltung (und vor allem einheitliche Passwörter) haben möchte, soll bei mir über PAM auf die LDAP-Benutzer zugegriffen werden. Unabhängig davon muss aber für jeden Benutzer eine Mailbox mit Hilfe von cyradm angelegt werden.,

Cyrus kann auch direkt auf (ohne PAM) auf einen LDAP-Server zugreifen. Ich empfinde die Konfiguration des Zugriffs über PAM aber als unkomplizierter. Da keine erweiterten Userdaten für Cyrus in der LDAP-Datenbank abgelegt werden sollen, ist diese Methode für mich gleichwertig. Die prinzipielle Konfiguration von Cyrus sowie die Anbindung von Exim ist unter [1] beschrieben.

Installation

Cyrus sollte besser nicht über ctsrvcfg installiert werden, da der Name des entsprechenden Debian-Paketes hier falsch hinterlegt ist. Außerdem versucht ctsrvcfg daraufhin erneut, die Einstellungen für Exim abzufragen. Also besser aptitude oder apt-get verwenden und die Pakete "cyrus-admin-2.2", "cyrus-imapd-2.2" und "sasl2-bin" installieren. Wer möchte, kann natürlich auch "cyrus-pop3d-2.2" mit auswählen.

Daraufhin muss das Passwort für den Benutzer "cyrus" eingestellt werden:

# passwd cyrus

Diese Passwort wird später für die Verwaltung der Mailboxen mit cyradm benötigt.

Konfiguration von SASL

Wie schon oben angedeutet, bringt Cyrus den Dienst "SASL" für die Authentifizierung der Benutzer mit. SASL entscheidet für Cyrus, ob ein User existiert und ob das Passwort übereinstimmt. Dabei kann SASL entweder eine eigene Benutzerdatenbank verwenden (sasldb), oder einen andere Methode verwenden (unter [2] recht übersichtlich beschrieben).

In meinem Fall möchte ich, dass SASL keine eigene Benutzerdatenbank verwendet, sondern über PAM auf meine LDAP-Datenbank zugreift (das ganze sollte auch ohne LDAP mit "normalen" passwd/shadow Accounts funktionieren). Dazu muss die Datei "/etc/imapd.conf" angepasst werden:

# Uncomment the following and add the space-separated users who
# have admin rights for all services.
admins: cyrus

...
# Minimum time between POP mail fetches in minutes
popminpoll: 0

...
# Force PLAIN/LOGIN authentication only
# (you need to uncomment this if you are not using an auxprop-based SASL
# mechanism.  saslauthd users, that means you!). And pay attention to
# sasl_minimum_layer and allowapop below, too.
sasl_mech_list: PLAIN

...
# Allow use of the POP3 APOP authentication command.
# Note that this command requires that the plaintext passwords are.
# available in a SASL auxprop backend (eg. sasldb), and that the system
# can provide enough entropy (eg. from /dev/urandom) to create a challenge
# in the banner.
allowapop: no

...
# The mechanism(s) used by the server to verify plaintext passwords. Possible
# values are "saslauthd", "auxprop", "pwcheck" and "alwaystrue".  They
# are tried in order, you can specify more than one, separated by spaces.
#
# Do note that, since sasl will be run as user cyrus, you may have a lot of
# trouble to set this up right.
sasl_pwcheck_method: saslauthd

Die Einstellung "popminpoll: 0" ist nicht unbedingt erforderlich, erlaubt aber das Abfragen der Mailbox über POP3 in kürzeren Intervallen als 1 Minute (hilfreich beim Testen).

Hierrauf wird cyrus neu gestartet:

/etc/init.d/cyrus2.2 restart

Jetzt muss noch saslauthd so konfiguriert werden, dass dieser beim Booten automatisch startet. PAM wird bereits standardmäßig als Backend verwendet.

--- /etc/default/saslauthd ---
# Should saslauthd run automatically on startup? (default: no)
START=yes

Jetzt muss saslauthd einmal manuell gestart werden (passiert ab dem nächsten Booten automatisch):

/etc/init.d/saslauthd start

Anlegen von Mailboxen

Unter Cyrus muss für jeden Benutzer eine Mailbox angelegt werden. Hierzu wird das Programm cyradm verwendet:

# cyradm -u cyrus localhost

Der Passwort wurde bei der Installation vergeben. Falls kein Login möglich ist, stimmt irgendetwas mit der SASL-Konfiguration nicht.

Das help-Kommando zeigt eine Liste alle Befehle in cyradmin. An dieser Stelle zeige ich nur ein paar Beispiele:

localhost> create user.christian
localhost> listmailbox
user.christian (\HasNoChildren)

Mailboxen müssen immer mit "user." beginnen, gefolgt von dem Loginnamen des jeweiligen Besiters.

localhost> listacl user.christian
christian lrswipcda
localhost> delete user.christian
deletemailbox: Permission denied
localhost> setacl user.christian cyrus all
localhost> listacl user.christian
christian lrswipcda
cyrus lrswipcda
localhost> delete user.christian
localhost> exit

Der Benutzer "cyrus" kann Mailboxen zwar anlegen, aber nicht ohne weiteres löschen. Dazu muss er sich erst die nötigen Rechte verschaffen.

Anbindung an Exim

Standardmäßig legt Exim die E-Mails für die lokalen Benutzer unter dem Verzeichnis "/var/mail" ab. Damit Exim die Nachrichten anstattdessen an Cyrus übergibt, muss wieder die Konfiguration etwas angepasst werden. Dazu wird eine neue Datei mit dem Namen "01_exim4-config_cyrus_delivery" im Verzeichnis "/etc/exim4/conf.d/transport" angelegt:

### transport/01_exim4-config_cyrus_delivery

# This transport is used for cyrus delivery over lmtp socket
# with user cyrus.
#

cyrus_delivery:
    driver = lmtp
    socket = /var/run/cyrus/socket/lmtp
    batch_max = 20
    user = cyrus

Außerdem muss der Wert von "dc_localdelivery" in der Datei "/etc/exim4/update-exim4.conf.conf" an die neue Zustellmethode angepasst werden:

dc_localdelivery='cyrus_delivery'

Bei nächsten Neustart von Exim wird daraus automatisch eine neue Konfigurationsdatei für Exim generiert:

/etc/init.d/exim4 restart

Squirrelmail

Für erste Tests kann neben den bekannten E-Mail Clients auch Squirrelmail verwendet werden. Dieser ermöglicht das Lesen und Verfassen von E-Mail über den Web-Browser.

Nach den Problemen mit der Cyrus-Installation traue ich mich nicht mehr, ctsrvcfg zu benutzen :-). Daher installiere ich mit aptitude das Paket "squirrelmail", was unter anderem die Installation von Apache und PHP5 zur Folge hat.

Die Konfiguration von Squirrelmail geht relativ schnell und ist außerdem unter [4] beschrieben. Zuerst wird Squirrelmail in Apache eingebunden:

# ln -s /etc/squirrelmail/apache.conf /etc/apache/conf.d/squirrelmail.conf

Mit dem Kommando squirrelmail-configure erfolgt darauf die Grundkonfiguration. Im wesentlichen sollte hier der richtige IMAP-Server eingestellt werden (Auswahl "D" im Hauptmenü).

Wer gerne die Weboberfläche auf deutsch haben möchte, muss zusätzlich die Locale "de_DE ISO-8859-1" erzeugen (die bereits installierte Locale "de_DE.UTF-8" reicht hier nicht). Dieses kann mit dpkg-reconfigure locales erledigt werden, die Standard-Standorteinstellung sollte dabei aber auf "de_DE.UTF-8" belassen werden.

Jetzt muss noch Apache neu gestartet werden:

/etc/init.d/apache2 restart

Daraufhin kann die Webmail-Oberfläche von einem beliebigen Client-PC aus über die Adresse  http://server/squirrelmail erreicht werden. Nach dem Login sollten als erstes der eigene Name sowie die (öffentliche) E-Mail Adresse unter "Optionen -> Persönliche Einstellungen" eingegeben werden.

Die erste Testmail kann man übrigens problemlos an sich selbst schreiben (einfach den Loginnamen als Empfänger eingeben). Wenn Exim und Cyrus richtig konfiguriert wurden, sollte die Nachricht sofort in der Inbox erscheinen.

Fetchmail

Backup

[28.09.2009] Hier schreibe ich die nächsten Tage weiter...

Migration der Mailboxen von einer anderen Cyrus-Installation

Literatur

  • [1] /usr/share/doc/cyrus-common-2.2/README.Debian.simpleinstall.gz
  • [2]  Cyrus SASL Vortrag
  • [3] man 5 imapd.conf
  • [4] /usr/share/doc/squirrelmail/README.Debian.gz
  • [5]  fetchmail & SSL

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source