Mailserver (mit IMAP)
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