<?xml version="1.0" encoding="iso-8859-15"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<!-- TODO switch to DocBook 4.x -->
<article lang="de_ch">
<articleinfo>
  <title>Postfix Mailserver basierend auf Debian Sarge</title>
  <author>
    <firstname>Andreas</firstname><surname>Stricker</surname>
    <affiliation>
      <address><email>rapidmax@gmx.net</email></address>
    </affiliation>
  </author>
  <pubdate>2006-01-23</pubdate>
  <revhistory>
    <revision>
      <revnumber>1.0</revnumber>
      <date>2006-01-23</date>
      <authorinitials>andy</authorinitials>
      <revremark>first official release</revremark>
    </revision>
  </revhistory>
  <abstract>
    <para>Installation eines full-featured Mailserver basierend auf Debian/Sarge</para>
  </abstract>
  <keywordset>
    <keyword>Debian</keyword>
    <keyword>Sarge</keyword>
    <keyword>Postfix</keyword>
    <keyword>Sieve</keyword>
    <keyword>Cyrus</keyword>
    <keyword>IMAP</keyword>
    <keyword>SASL</keyword>
    <keyword>SMTP AUTH</keyword>
    <keyword>Bogofilter</keyword>
    <keyword>Webmail</keyword>
  </keywordset>
</articleinfo>


<sect1 id="intro"><title>Übersicht</title>

<note>
Dieses HOWTO ist noch nicht offiziell freigegeben. U.a. sind noch sehr viele Rechtschreibfehler enthalten.
</note>

<para>
Im Folgenden ist ein Rezept für einen SOHO Mailserver basierend auf Debian Sarge konfiguriert wird.
</para>

<para>Folgende Ziele wurden gesetzt:</para>

<itemizedlist>
  <listitem><para>Der Mailserver sollte vom Internet aus mit SMTP erreichbar sein</para></listitem>
  <listitem><para>Relaying wird über SASL SMTP AUTH Authentizierung erlaubt</para></listitem>
  <listitem><para>Die Mails bleiben auf dem Server in einem Maildir und müssen über IMAP zur Verfügung gestellt werden</para></listitem>
  <listitem><para>Der Server braucht eine Schnittstelle um eingehende Mails auf Viren und Spam zu überprüfen</para></listitem>
  <listitem><para>Jeder User soll in der Lage sein, Filter zu definieren, welche direkt beim Empfang angewendet werden, wenn möglich über ein konfortables Web-Interface</para></listitem>
  <listitem><para>Zusätzlich soll ein Web-Mail-Interface Intra- und Internet-seitig vorhanden sein.</para></listitem>
  <listitem><para>Alternativ sollte es auch möglich sein Internetseitig auf den IMAP-Server zuzugreiffen</para></listitem>
  <listitem><para>Sämtliche Internet-seitige Kommunikation sollte mit TLS vor Abhörversuchen gesichert sein</para></listitem>
  <listitem><para>Nur offizielle Debian-Pakete aus dem Sarge-Zweig verwenden, um eine einfache Pflege sicherzustellen</para></listitem>
</itemizedlist>

<para>
Der Author schlägt vor, Schritt-für-Schritt vorzugehen. Zuerst ein einfacher Server einrichten und sukzsessiv neue Funktionen hinzufügen und Testen. Aufgrund des Risiko, von einem Spammer als Spam-Schleuder missbraucht zu werden, sollte alles in einem geschützen Netzwerk konfiguriert werden. Die Öffnung gegenüber dem Internet soll erst dann erfolgen, wenn man sich (durch Tests) sicher ist, dass der Server nicht als open Relay missbraucht werden kann.
</para>

<sect2 id="credits">
<title>Credits / Contributors</title>
<para>
Vielen Dank für die Beiträge von
</para>
<itemizedlist>
  <listitem><para>Ranko Veselinovic <email>rvjunior(at)gmx(dot)net</email></para></listitem>
  <listitem><para>Bjoern Schiessle <email>bes(at)schiessle(dot)org</email></para></listitem>
</itemizedlist>
</sect2>

<sect2 id="copyright">
<title>Copyright</title>

<para>
This work is licensed under the Creative Commons Attribution-ShareAlike 2.0 Germany License. To view a copy of this license, visit <ulink uri="http://creativecommons.org/licenses/by-sa/2.0/de/">http://creativecommons.org/licenses/by-sa/2.0/de/</ulink> or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
</para>

<para>
Namensnennung-Weitergabe unter gleichen Bedingungen 2.0 Deutschland
</para>

<itemizedlist>
<title>Sie dürfen</title>
  <listitem><para>den Inhalt vervielfältigen, verbreiten und öffentlich aufführen</para></listitem>
  <listitem><para>Bearbeitungen anfertigen</para></listitem>
  <listitem><para>den Inhalt kommerziell nutzen</para></listitem>
</itemizedlist>


<variablelist>
<title>Zu den folgenden Bedingungen</title>
  <varlistentry>
    <term>Namensnennung.</term>
    <listitem><para>Sie müssen den Namen des Autors/Rechtsinhabers nennen.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>Weitergabe unter gleichen Bedingungen.</term>
    <listitem><para>Wenn Sie diesen Inhalt bearbeiten oder in anderer Weise umgestalten, verändern oder als Grundlage für einen anderen Inhalt verwenden, dann dürfen Sie den neu entstandenen Inhalt nur unter Verwendung identischer Lizenzbedingungen weitergeben.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term></term>
    <listitem><para></para></listitem>
    <listitem><para></para></listitem>
  </varlistentry>
</variablelist>

<itemizedlist>
  <listitem><para>Im Falle einer Verbreitung müssen Sie anderen die Lizenzbedingungen, unter die dieser Inhalt fällt, mitteilen.</para></listitem>
  <listitem><para>Jede dieser Bedingungen kann nach schriftlicher Einwilligung des Rechtsinhabers aufgehoben werden.</para></listitem>
</itemizedlist>

<para>
<emphasis>Die gesetzlichen Schranken des Urheberrechts bleiben hiervon unberührt.</emphasis>
</para>

<para>
Das Commons Deed ist eine Zusammenfassung des <ulink url="http://creativecommons.org/licenses/by-sa/2.0/de/legalcode">Lizenzvertrags</ulink> in allgemeinverständlicher Sprache.
</para>

</sect2>

</sect1>

<sect1>
<title>Installation Pakete</title>

<para>
Die Installation ist schnell beschrieben, verlassen wir uns doch ausschliesslich auf Debian/Sarge Pakete. Ich liste hier nur die Paket, welche zu installieren sind, und nicht alle, welche automatisch durch die Abhängigkeiten nachgezogen werden.
</para>
<para>

<variablelist><title>Zu installierenden Pakete nach Verwendungszweck</title>
  <varlistentry>
    <term>postfix, postfix-tls, postfix-doc</term>
    <listitem><para>Der eigentliche <acronym>MTA</acronym>, zwingend notwendig. Die <acronym>TLS</acronym> Version ist für SMTP mit Starttls notwendig, das Documentations-Paket empfielt sich zusätzlich zu diesem Dokument hier.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>cyrus21-admin, cyrus21-imapd, cyrus21-doc, cyrus21-clients</term>
    <listitem><para>Der <acronym>IMAP4</acronym> Server. Auch hier empfiehlt sich das Dokumentationspaket. Das clients-Paket enthält Test-Werkzeuge, die bei Problemen nützlich sein können. Im Admin-Paket sind neben <command>cyradm</command> (Sir-Adam) auch die <command>sieveshell</command> für die Verwalung der Filter auf der Kommandozeile. Das Sieve wird durch Cyrus automatisch mitinstalliert</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>sasl2-bin, libsasl2, libsasl2-modules, libsasl2-modules-gssapi-heimdal, libsasl7</term>
    <listitem><para>Das Authentizierungsmodul für Cyrus und auch Postfix, falls <acronym>SMTP AUTH</acronym> gewünscht ist. Die Module enthalten verschiedenen Authentizierungs-Backends, das bin-Paket den <command>saslauthd</command> Daemon und einige nützliche Test-Werkzeuge</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>fetchmail, fetchmail-ssl</term>
    <listitem><para>Diese Pakete empfehlen sich für das Abholen von Mails von Accounts, welche keine Weiterleitung ermöglichen.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>ssl-cert, ca-certificates</term>
    <listitem><para>Empfehlen sich, wenn man <acronym>TLS</acronym> einsetzen will.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>bogofilter</term>
    <listitem><para>Erspart uns haufenweise Spam</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>procmail</term>
    <listitem><para>Obwohl für das Verteilen der Mails auf die Postfächer Sieve zuständig ist, kann <command>procmail</command> eingesetzt werden kompliziertere Filterung der Mail vorzunehmen</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>apache2, apache2-utils</term>
    <listitem><para>Notwendig wenn die Filteregeln über das Web angepasst werden sollen, oder Web-Mail gewünscht ist.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>libapache2-mod-php4</term>
    <listitem><para>Das Horde-Framework basiert auf <acronym>PHP</acronym>.</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>horde3, imp4, ingo1</term>
    <listitem><para>Das Horde Framework, mit dem Webmailer IMP und der Web-Mailfilter-Verwaltung Ingo</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>postgresql, postgresql-client, postgresql-doc</term>
    <listitem><para>Wird als Datenbank-Backend für Horde verwendet</para></listitem>
  </varlistentry>
  <varlistentry>
    <term>phppgadmin</term>
    <listitem><para>Vereinfacht die Administration der Datenbank durch ein konfortables Web-GUI</para></listitem>
  </varlistentry>
</variablelist>

<para>
Hier nochmal eine Liste mit den relevanten Paketen für die Installation:
</para>
<programlisting>
apache2                                         install
apache2-common                                  install
apache2-mpm-prefork                             install
apache2-utils                                   install
bogofilter                                      install
ca-certificates                                 install
cyrus21-admin                                   install
cyrus21-clients                                 install
cyrus21-common                                  install
cyrus21-doc                                     install
cyrus21-imapd                                   install
fetchmail                                       install
fetchmail-ssl                                   install
horde3                                          install
imp4                                            install
ingo1                                           install
libapache2-mod-php4                             install
libgssapi1-heimdal                              install
libsasl2                                        install
libsasl2-modules                                install
libsasl2-modules-gssapi-heimdal                 install
libsasl7                                        install
openssl                                         install
php-date                                        install
php-file                                        install
php-mail-mime                                   install
php-net-sieve                                   install
php4-cli                                        install
php4-common                                     install
php4-domxml                                     install
php4-gd                                         install
php4-imap                                       install
php4-mcrypt                                     install
php4-mhash                                      install
php4-pgsql                                      install
phppgadmin                                      install
postfix                                         install
postfix-doc                                     install
postfix-tls                                     install
postgresql                                      install
postgresql-client                               install
postgresql-doc                                  install
procmail                                        install
sasl2-bin                                       install
tnef                                            install
vacation                                        install
</programlisting>


</para>
</sect1>

<sect1>
<title>Konfiguration Postfix</title>

<para>
Ich fange mit einer Minimal-Konfiguration an und baue diese dann laufend aus.
</para>
<para>
Im ersten Schritt wird die Konfiguration für Postfix unter <filename>/etc/postfix</filename> für den ersten Schritt angepasst. Ich empfehle die dort vorhandene <filename>main.cf</filename> umzubenennen und durch den im Folgenden vorgestellen Inhalt zu ersetzen. Die <filename>master.cf</filename> wird nur minimal geändert, daher hier eine Sicherheitskopie erstellen.
</para>

<sect2>
<title>main.cf</title>
<para>
Nehmen wir uns also die <filename>main.cf</filename> vor:
</para>

<!-- BEGIN Source code block with description -->

<programlistingco>
  <areaspec>
    <area id="main.cf.1.myhostname" coords="16"/>
    <area id="main.cf.1.mynetworks" coords="18"/>
    <area id="main.cf.1.myorigin" coords="20"/>
    <area id="main.cf.1.mydestination" coords="21"/>
    <area id="main.cf.1.inet_interfaces" coords="22"/>
    <area id="main.cf.1.alias_maps" coords="27"/>
    <area id="main.cf.1.alias_database" coords="28"/>
    <area id="main.cf.1.relayhost" coords="42"/>
    <area id="main.cf.1.mailbox_transport" coords="44"/>
  </areaspec>

<programlisting>
# ----------------------------------------------------------------------------
#  Network specific settings
# ----------------------------------------------------------------------------

# We say hello by presenting this banner (but not too much!)
smtpd_banner = $myhostname ESMTP $mail_name

# appending .domain is the MUA's job.
append_dot_mydomain = no

# group for mail submission an queue management commands
setgid_group = postdrop

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

myhostname = sirius.hogwarts.local
mynetworks_style = host
#mynetworks = 127.0.0.0/8, 192.168.99.0/24
mynetworks = 127.0.0.0/8
myorigin = /etc/mailname
mydestination = $myhostname, sirius, localhost.$mydomain, localhost
inet_interfaces = all

# Database locations
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#sender_canonical_maps = hash:/etc/postfix/sender_canonical
#smtpd_sender-restrictions = hash:/etc/postfix/access

# ----------------------------------------------------------------------------
#  Transport settings
# ----------------------------------------------------------------------------

# we can't send directly to some mail server because our typical dynamic
# revers lookup-address, so we relay mails over our ISP
relayhost = [mail.shinternet.ch]

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp
#mailbox_transport = cyrus
#local_transport = procmail
#mailbox_command = procmail -t -a "$EXTENSION"
mailbox_command =
mailbox_size_limit = 0
recipient_delimiter = +

# no mail notification
biff = no
</programlisting>

  <calloutlist>
    <callout arearefs="main.cf.1.myhostname">
      <para><emphasis>myhostname</emphasis>: Setzen wir auf den <acronym>FQDN</acronym> des Server, sinnvollerweise den internen Hostname.</para>
    </callout>
    <callout arearefs="main.cf.1.mynetworks">
      <para><emphasis>mynetworks</emphasis>: Wird hier nur auf das Loopback Netz gesetzt, da wir uns grundsätzlich für das Relaying authentizieren wollen. Für den ersten Test sollte hier aber zumindest noch das lokale Netz hinzugefügt werden, wie im auskommentieren Teil.</para>
    </callout>
    <callout arearefs="main.cf.1.myorigin">
      <para><emphasis>myorigin</emphasis>: Muss auf den Hostnamen gesetzt werden. Hier wird er aus der Datei <filename>/etc/hostname</filename> gelesen, welche natürlich angelegt werden muss! (<command>echo "sirius.hogwarts.local" &gt; /etc/mailname</command></para>
    </callout>
    <callout arearefs="main.cf.1.mydestination">
      <para><emphasis>mydestination</emphasis>: Bestimmt für welche Domains sich der Mailserver als Empfänger sieht. Sollte bei Virtual Hosts auf keinen fall einen Host enthalten, welcher als Virtual Host gelistet sein wird. Ich empfehle hier wirklich nur localhost und die lokale Domain einzutragen.</para>
    </callout>
    <callout arearefs="main.cf.1.inet_interfaces">
      <para><emphasis>inet_interfaces</emphasis>: Damit wird der Server auf bestimmte Interfaces gebunden, auf denen er hören soll (oder auch eben nicht), Hier wird der Server an alle Interfaces gebunden.</para>
    </callout>
    <callout arearefs="main.cf.1.alias_maps">
      <para><emphasis>alias_maps</emphasis>: Zeigt auf <filename>/etc/aliases.db</filename>, welche im Minimum <command>root: localuser</command> enthalten sollte</para>
    </callout>
    <callout arearefs="main.cf.1.relayhost">
      <para><emphasis>relayhost</emphasis>: Wenn diese Option leer ist, versendet Postfix alle Mails direkt. Wird ein SMTP Server angegeben, so wird dieser Server als Relayhost verwendet. Die eckigen Klammern verhindern das auflösen der MX Records</para>
    </callout>
    <callout arearefs="main.cf.1.mailbox_transport">
      <para><emphasis>mailbox_transport</emphasis>: Bestimmt die Art der lokalen Mail Auslieferung. In diesem Beispiel hier wird direkt auf ein <acronym>LMTP</acronym>Socket geschrieben. Oft wird hier aber nur ein Name angegeben, welcher auf einen Eintrag (Transport) in der <filename>master.cf</filename> passt.</para>
    </callout>

    <callout arearefs="">
      <para/>
    </callout>
  </calloutlist>
</programlistingco>

<!-- END Source code block with description -->

<para>
Noch ein paar Anmerkungen: <parameter>relayhost</parameter> kann für Testzwecke leer gelassen werden, damit verschickt der Server die Mails direkt. Ist der Mailserver nicht an einer statischen Adresse und hat er womöglich auch noch einen Reverse-DNS-Lookup der auf dynamische Bereiche schliessen lässt, so empfehle ich hier den SMTP Server des Providers einzutragen. Sonst kann es vorkommen, dass gewisse Server die Annahme von Mails grundsätzlich verweigern, da sie einen Spam-Bot-Rechner vermuten. Besitzer von Statischen IPs mit korrekt eingerichtetem Reverse-Lookup sind hier fein raus.
</para>
<para>
Ein weiterer Punkt, der Schwierikeiten macht, ist der <acronym>LMTP</acronym> Socket, spezifiziert mit <parameter>mailbox_transport</parameter>. Hier müssen die Rechte angepasst werden, sonst kann Postfix, welcher unter einer anderen <acronym>UID</acronym> als Cyrus läuft nicht in den Socket schreiben. Wichtig ist, dass nicht die Rechte des Socket zum tragen kommen, sondern die des Verzeichnis <filename>/var/run/cyrus/socket</filename>. Dieses gehört dem User Cyrus und der Gruppe <emphasis>lmtp</emphasis>. Postfix ist zu dieser Gruppe hinzuzufügen: <command>useradd postfix lmtp</command>.
</para>

</sect2>

<sect2>
<title>Test der Postfix Konfiguration</title>

<para>
Für den Test empfehle ich direkt mit <command>netcat</command> oder <command>telnet</command> auf den <acronym>SMTP</acronym> Port zu verbinden. Dazu ist ein kleines Studium von RFC821 zu empfehlen, aber es geht auch ohne.
</para>

<screen>
220 sirius.hogwarts.local ESMTP Postfix
HELO andy.hogwarts.local
250 sirius.hogwarts.local
MAIL FROM: &lt;&gt;
250 Ok
RCPT TO: &lt;andy@sirius.hogwarts.local&gt;
250 Ok
DATA
354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
Subject: Test from netcat

Body
.
250 Ok: queued as 04C43D3CA
QUIT
221 Bye
</screen>

<para>
In diesem Beispiel stellte man sich mit einem einfachen <acronym>HELO</acronym> mit seinem Hostname vor (wird verlangt!). Als nächstes leitet man eine neue Mail ein mit <acronym>MAIL FROM</acronym>. Hier kann die eigenen Mail-Adresse angegeben werden oder auch nicht. Gewisse Server verlangen zwar mittlerweile aus Spam-Schutz-Gründen hier eine Mail-Adresse, unser Server ist aber noch nicht so streng konfiguiert. Schliesslich teilen wir dem Mailserver mit <acronym>RCPT TO</acronym> mit, welchen Empfänger wir kontaktieren wollen, worauf der Server mit <computeroutput>250 Ok</computeroutput> und einem darauf folgenden <computeroutput>DATA</computeroutput> antworten soll, wenn eine lokale Adressen angegeben wurde. Oder der Server antwortet mit mit <computeroutput>554 &lt;foo.bar@spam.baz&gt;: Relay access denied</computeroutput>, falls eine externe Adresse angegeben wurde und es dem Client nicht erlaubt ist zu Relayen.
</para>

<para>
Viel interessanter als ein simples <acronym>HELO</acronym> ist das etwas nach Vertipper aussehende <acronym>EHLO</acronym>. Dieses listet alle Features auf, welcher der Server unterstützt.
</para>

<screen>
220 sirius.hogwarts.local ESMTP Postfix
EHLO andy.hogwarts.local
250-sirius.hogwarts.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250 8BITMIME
</screen>

<para>
In diesem Beispiel aus der finalen Konfiguration (ja, ich will es etwas schmackhaft machen...), erkennt man, dass der Server <acronym>TLS</acronym> (<acronym>SSL</acronym>), <acronym>SMTP AUTH</acronym> und <acronym>ETRN</acronym> unterstützt, die maximale Grösse auf 10MB festgelegt hat und zudem 8-bittige Mails unterstützt. (Was man auch sieht, ist dass der Server keine vermurkste Outlook Syntax für <acronym>SMTP AUTH</acronym> unterstützt, aber nicht, dass dies Absicht ist }-&gt; )
</para>

<para>
In diesem Moment wird es möglich sein, Mails abzuschicken, aber sie werden noch nicht bei Cyrus landen. Die Mail Queue <command>postqueue -p</command> wird noch einige hängen gebliebene Mails anzeigen. Weitere Informationen sind im Logfile <filename>/var/log/mail.log</filename> zu entdecken. Der Grund ist, dass noch keine Mailboxen in Cyrus angelegt wurden.
</para>

</sect2>

<sect2>
<title>master.cf</title>

<para>
Erfreulicherweise ist die <filename>master.cf</filename> bereits vorkonfiguriert, so dass für die ersten Experimente keine Änderungen notwendig sind. Hier dennoch ein Auszug der wichtigsten Transporte, ohne die per default vorhandenen Einträge für externe Software.
</para>

<programlisting>
smtp      inet  n       -       n       -       -       smtpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       -       300     1       qmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       -       -       -       smtp
relay     unix  -       -       -       -       -       smtp
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
</programlisting>

<para>
Noch ein Wort zu diesen Einträgen: Diese werden als <quote>Transports</quote> bezeichnet. Die oben gelisteten Transporte sind Postfix-Intern und sollten nur verändert werden, wenn man genau weiss, was man tut (zumindest bei einem werden wird das später machen). Die Einträge für externe Software sind inaktive, da diese explizit ausgewählt werden müssen. Das geschieht über die Parameter <parameter>mailbox_transport</parameter> und <parameter>local_transport</parameter> in der <filename>main.cf</filename>.
</para>

<para>
Wie wir oben gesehen haben, verwenden wir nur den Parameter <parameter>mailbox_transport</parameter> und referenzieren dort nicht auf einen der Transporte, sondern direkt auf einen <acronym>LMTP</acronym> Unix Socket. Das ist die empfohlene Variante für die Übergabe der Mails an Cyrus. In vielen Älteren Dokumenten sieht man häufig die Verwendung eines Transports der etwas so ausschaut:
<programlisting>
cyrus     unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}
</programlisting>
Das ist aber sinnlos, da <command>cyrdeliver</command> nichts anderes macht, als die Mails in den LMTP Socket zu schreiben.
</para>

<para>
Will man <command>procmail</command> einsetzen, so wendet man einen Transport an, der etwa so aussieht:
<programlisting>
procmail  unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/bin/procmail -p /etc/procmailrc USER=${user} EXTENSION=${extension}
</programlisting>
<command>procmail</command> wird dann so konfiguriert, dass es zur Auslieferung <command>cyrdeliver</command> einsetzt. Wie wir später sehen werden, ist es viel konfortabler auf Sieve zu setzen um die Mails auf die einzelnen Unterverzeichnisse zu verteilen. Zudem ist es auch ineffizient, für jede Mail zwei Prozesse zu spawnen.
</para>

<para>
Allerding gibt es durchaus sinnvolle Möglichkeiten <command>procmail</command> hier einzusetzen. Ich denke da an einen Filter für benutzerunabhängige Filterung der Mails auf Spam, Vieren und eigenen Regeln.
</para>

</sect2>

<sect2>
<title>Virtuelle Hosts</title>

<para>
Wir haben in Unserem <acronym>SOHO</acronym>-Szenario zwei DNS-Namen für unseres System. Den bisher konfigurierten und verwendeten Internen Namen <quote>sirius.hogwarts.local</quote> und eine externe Domain <quote>rapidmax.homelinux.net</quote>. Diese soll nun als virtueller Host hinzugefügt werden.
</para>

<para>
Wichtig ist vor allem, dass der Name <emphasis>nicht</emphasis> in <parameter>mydestination</parameter> aufgeführt ist.
</para>

<programlisting>
virtual_alias_domains = rapidmax.homelinux.net
virtual_alias_maps = hash:/etc/postfix/virtual
</programlisting>

<para>
In der Option <parameter>virtual_alias_domains</parameter> werden einfach die Domains gelistet. In der Datei <filename>/etc/postfix/virtual</filename> werden schlussendlich die Namen auf die internen Usernamen gemappt. Man soll darauf achten, entweder eine Catch-All Regel einzurichten, oder sonst zumindest die nach RFC 2142 vorgeschriebenen Namen. Nachdem das erledigt ist, mittels <command>postmap /etc/postfix/virtual</command> eine Hash-Tabelle generieren. Bei Änderungen nicht vergessen das zu wiederholen!
</para>

<!-- TODO ast: virtual file beschreiben -->

</sect2>

</sect1>

<sect1>
<title>Konfiguration von Cyrus</title>

<sect2>
<title>imapd.conf</title>

<para>
Diese Konfigurationsdatei ist direkt in <filename>/etc/imapd.conf</filename> zu finden. Auch diese Datei ist sinnvoll vorkonfiguriert, so dass es hier für erste Experimente nicht viel zu ändern gibt. Hier zuerst mal die Konfigurationsdatei:
</para>

<programlisting>
configdirectory: /var/lib/cyrus
defaultpartition: default
partition-default: /var/spool/cyrus/mail
partition-news: /var/spool/cyrus/news
newsspool: /var/spool/news
altnamespace: no
unixhierarchysep: no
admins: cyrus
allowanonymouslogin: no
popminpoll: 1
autocreatequota: 0
umask: 077
sieveusehomedir: false
sievedir: /var/spool/sieve
hashimapspool: true
allowplaintext: yes
sasl_pwcheck_method: auxprop
sasl_auto_transition: no
lmtpsocket: /var/run/cyrus/socket/lmtp
idlesocket: /var/run/cyrus/socket/idle
notifysocket: /var/run/cyrus/socket/notify
</programlisting>

</sect2>

<sect2>
<title>cyrus.conf</title>

<para>
Es scheint langsam langweilig zu werden, trotzdem muss ich auch hier auf die bereits vorhandene Default-Konfguration verweisen, welche fast im Urzustand gelassen werden kann.
</para>

<programlisting>
START {
        recover         cmd="/usr/sbin/ctl_cyrusdb -r"
        delprune        cmd="/usr/sbin/ctl_deliver -E 3"
        tlsprune        cmd="/usr/sbin/tls_prune"
}
SERVICES {
        imap            cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100
        #pop3            cmd="pop3d -U 30" listen="pop3" prefork=0 maxchild=50
        lmtpunix        cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20
        sieve           cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100
        notify          cmd="notifyd" listen="/var/run/cyrus/socket/notify" proto="udp" prefork=1
}
EVENTS {
        checkpoint      cmd="/usr/sbin/ctl_cyrusdb -c" period=30
        delprune        cmd="/usr/sbin/ctl_deliver -E 3" at=0401
        tlsprune        cmd="/usr/sbin/tls_prune" at=0401
}
</programlisting>

<para>
Man beachte das ausgeklammerte pop3.
</para>

</sect2>

<sect2>
<title>Test von Cyrus</title>

<para>
Damit Cyrus funktioniert, musst mit <command>saslpasswd</command> ein Benutzer zur <acronym>SASL</acronym>-eigenen Benutzerdatenbank <filename>/etc/sasldb2</filename> hinzugefügt werden:
</para>
<screen>
# saslpasswd -c cyrus
Password: 
Again (for verification): 
# saslpasswd -c myself
Password: 
Again (for verification): 
</screen>
<para>
Für diesen Benutzer muss natürlich auch eine Mailbox erstellt werden. Das kann mit dem cyrus-Login geschehen:
</para>
<screen>
# cyradm -u cyrus localhost
IMAP Password:
localhost&gt; help
...
localhost&gt; lm
localhost&gt; cm user.myself
localhost&gt; lm
user.myself (\HasNoChildren)
localhost&gt; exit
</screen>
<para>
Man achte auf den Prefix <quote>user</quote>: Es ist wichtig, alle Benutzer-Mailboxen unterhalb des Namespace <quote>user</quote> anzulegen.
</para>

<para>
Im nächsten Schritt versuchen wir eine Mail durch Postfix an Cyrus auszuliefern. Im folgenden sehen wir das Testmail, vom Postfix Test, wie es im Cyrus angekommen ist.
</para>

<programlisting>
Return-Path: &lt;&gt;
Received: from sirius.hogwarts.local ([unix socket])
    by sirius (Cyrus v2.1.18-IPv6-Debian-2.1.18-1) with LMTP; Mon, 23 Jan 2006 23:54:43 +0100
X-Sieve: CMU Sieve 2.2
Received: by sirius.hogwarts.local (Postfix, from userid 103)
    id 1DCA8D416; Mon, 23 Jan 2006 23:54:43 +0100 (CET)
Received: from andy.howarts.local (andy.hogwarts.local [192.168.1.8])
    by sirius.hogwarts.local (Postfix) with SMTP id 04C43D3CA
    for &lt;andy@sirius.hogwarts.local&gt;; Mon, 23 Jan 2006 23:54:04 +0100 (CET)
Subject: Test from netcat
Message-Id: &lt;20060123225404.04C43D3CA@sirius.hogwarts.local&gt;
Date: Mon, 23 Jan 2006 23:54:04 +0100 (CET)
From: MAILER-DAEMON@sirius.hogwarts.local
To: undisclosed-recipients: ;
X-Bogosity: Unsure, tests=bogofilter, spamicity=0.530418, version=0.94.4

Body
</programlisting>

<para>
Um das Mail abzuholen konfigurieren wir einen belieben Mail-Client auf <acronym>IMAP4</acronym> über den Server auf Port 143. Wie immer sind Fehlermeldungen in <filename>/var/log/mail.log</filename> zu finden:
</para>
<screen linenumbering="numbered">
postfix/smtpd: connect from andy.hogwarts.local[192.168.1.8]
postfix/smtpd: 20B0ED3CA: client=andy.hogwarts.local[192.168.1.8]
postfix/cleanup: 20B0ED3CA: message-id=&lt;20060125235602.20B0ED3CA@sirius.hogwarts.local&gt;
postfix/qmgr: 20B0ED3CA: from=&lt;&gt;, size=406, nrcpt=1 (queue active)
postfix/pipe: 20B0ED3CA: to=&lt;andy@sirius.hogwarts.local&gt;, relay=bogofilter, delay=58, status=sent (sirius.hogwarts.local)
postfix/qmgr: 20B0ED3CA: removed
postfix/pickup: BCBDBD416: uid=103 from=&lt;MAILER-DAEMON@sirius.hogwarts.local&gt;
postfix/cleanup: BCBDBD416: message-id=&lt;20060125235602.20B0ED3CA@sirius.hogwarts.local&gt;
postfix/qmgr: BCBDBD416: from=&lt;&gt;, size=620, nrcpt=1 (queue active)
cyrus/master: about to exec /usr/lib/cyrus/bin/lmtpd
cyrus/lmtpunix: executed
cyrus/lmtpd: accepted connection
cyrus/lmtpd: lmtp connection preauth'd as postman
cyrus/lmtpd: duplicate_check: &lt;20060125235602.20B0ED3CA@sirius.hogwarts.local&gt; user.andy 0
cyrus/lmtpd: mystore: starting txn 2147483687
cyrus/lmtpd: mystore: committing txn 2147483687
cyrus/lmtpd: duplicate_mark: &lt;20060125235602.20B0ED3CA@sirius.hogwarts.local&gt; user.andy 1138233421
cyrus/lmtpd: mystore: starting txn 2147483688
cyrus/lmtpd: mystore: committing txn 2147483688
cyrus/lmtpd: duplicate_mark: &lt;20060125235602.20B0ED3CA@sirius.hogwarts.local&gt; .andy+.sieve. 1138233421
postfix/lmtp: BCBDBD416: to=&lt;andy@sirius.hogwarts.local&gt;, relay=/var/run/cyrus/socket/lmtp[/var/run/cyrus/socket/lmtp], delay=1, status=sent (250 2.1.5 Ok)
postfix/qmgr: BCBDBD416: removed
postfix/smtpd: disconnect from andy.hogwarts.local[192.168.1.8]
</screen>
<para>
Besondere Beachtung sollte der drittletzten Zeile geschenkt werden. Im Parameter <parameter>relay</parameter> steht oft der Grund, weshalb das Mail nicht an Cyrus übergeben werden konnte: Hier ein Beispiel bei dem es nicht geklappt hat, weil postfix noch keine Rechte gegeben wurden, auf den Socket zuzugreiffen:
</para>

<screen>
postfix/lmtp: 96860D3FC: to=&lt;andy@sirius.hogwarts.local&gt;, relay=none, delay=3769, status=deferred (connect to /var/run/cyrus/socket/lmtp[/var/run/cyrus/socket/lmtp]: Permission denied)
</screen>

</sect2>

</sect1>

<sect1>
<title>SASL SMTP AUTH und andere Probleme...</title>

<sect2>
<title>saslauthd ver auxprop</title>

<para>
Zuerst am Anfang: Das in einigen Dokumenten erwähnte <command>pwcheck</command> ist veraltet und wurde durch <command>saslauthd</command> ersetzt. Damit haben wir die Wahl zwischen <parameter>auxprop</parameter> und <command>saslauthd</command>. Während ersteres mit einer eigenen Passwort-Datenbank arbeitet, lässt sich bei <command>saslauthd</command> zwischen <acronym>pam</acronym>, <acronym>shadow</acronym> und der <filename>sasldb</filename> wie bei auxprop wählen.
</para>

<para>
Nun mag man sich Fragen, wieso auxprop überhaupt noch notwendig ist. Die Notwendigkeit liegt darin, dass in derSASL-eigenen Datenbank die Passwörter im Klartext liegen und daher Authentizerungsmechanismen zur Verfügung stehen, welche das Passwort nicht im Klartext über die Leitung schicken, während <command>saslauthd</command> nur Plaintext-Mechanismen unterstützt.
</para>

<para>
In diesem Beispiel werden wir <command>saslauthd</command> einsetzen, um die normalen Systemaccounts einzusetzen. Das vereinfacht Verwaltung, die Passwörter sind nur einmal einzugeben für Remote-Login, <acronym>IMAP</acronym> und <acronym>SMTP AUTH</acronym>. Den Nachteil mit der Beschränkung auf Plaintext Mechanismen gleichen wir dann später aus, indem wir den Kanal mit TLS verschlüsseln.
</para>

<para>
Um in Debian den <command>saslauthd</command> als Daemon laufen zu lassen, muss die Datei <filename>/etc/default/saslauthd</filename> editiert werden:
</para>

<programlisting>
START=yes
MECHANISM="shadow"
</programlisting>

<para>
Zum Schluss kann die korrekte Funktion des Daemon mit dem Befehl <command>testsaslauthd</command> verifiziert werden: <command>testsaslauthd -u myself -p secret</command> worauf eine Meldung wie <computeroutput>0: OK "Success."</computeroutput> im Erfolgsfall und <computeroutput>0: NO "authentication failed"</computeroutput> im Fehlerfall erscheinen soll.
</para>

</sect2>

<sect2>
<title>Cyrus</title>

<para>
Vorausgesetz der <command>saslauthd</command> läuft, kann Cyrus auf diesen Umgestellt werden. Dazu passen wir die Konfigurationsdatei <filename>/etc/imapd.conf</filename> wie folgt an:
</para>

<programlisting>
sasl_mech_list: PLAIN
sasl_pwcheck_method: saslauthd
sasl_auto_transition: no
</programlisting>

<para>
Damit sollte man sich bei Cyrus bereits mit dem Systemaccount anmelden können. Oh, halt, etwas haben wir noch vergessen! Weisen wir erst noch Cyrus an, die Konfiguration neu einzulesen: <command>invoke-rc.d cyrus21 reload</command>. Auch hier sind nützliche Fehlermeldungen im Logfile zu finden.
</para>

</sect2>

<sect2>
<title>Postfix</title>

<para>
Es gilt zu beachten, dass es zwei Gruppen von Optionen hat, die sich sehr ähnlich sehen: <parameter>smtpd_sasl_*</parameter> und <parameter>smtp_sasl_*</parameter>. Die Variant ohne das Daemon-<quote>d</quote> nach <quote>smtp</quote> ist für den <acronym>SMTP</acronym> Client, als den Teil der Verbindung zu fremden Server aufnimmt und sich dort ev. authentizieren muss. Dementsprechend ist die andere <quote>smtpd</quote>-Variante für unser gewünschter <acronym>SMTP AUTH</acronym> zuständig. Das sehen wir uns zuerst an.
</para>

<para>
In der Datei <filename>main.cf</filename> müssen folgende Einträge hinzugefügt werden:
</para>

<programlisting>
smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
#broken_sasl-auth_clients = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
</programlisting>

<para>
<parameter>smtpd_sasl_application_name</parameter> definiert den Namen für die SASL-Konfiguration-Datei. Die auskommentierte Option <parameter>broken_sasl_auth_clients</parameter> kann dann einkommentiert werden, wenn aus unvermeidbaren Gründen Microsoft Outlook eingesetzt werden soll. Schliesslich die Option <parameter>smtpd_sasl_security_options</parameter> auf <option>noanonymous</option> gesetzt stellt sicher, dass keine Anonyme Logins möglich sind.
</para>

<para>
Noch ist <acronym>SASL SMTP AUTH</acronym> nicht aktiv. Es wird durch hinzufügen der Option <option>permit_sasl_authenticated</option> zur Option <parameter>smtpd_recipient_restrictions</parameter> aktiviert. Diese Option ist momentan noch nicht präsent, daher hier in kompletter Form:
</para>

<programlisting>
smtpd_recipient_restrictions =
        reject_unauth_pipelining,
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination
</programlisting>

<para>
Diese Konfiguration bewirkt, dass sich nicht an RFC haltende Clients rejected werden, alle in mynetworks eingetragenen Ranges erlaubt werden, als nächstes erfolgreich mit <acronym>SMTP AUTH</acronym> authentizierte Clients abenfalls erlaubt werden und zum Schluss alles abgelehnt wird, was nicht an lokale Domains gerichtet ist und nicht in den Relay Domain gelistet wurde.
</para>

<para>
Damit ist die Konfiguration noch nicht abgeschlossen. Als nächstes erstellen wir ein Unterverzeichnis im Postfix Ordner <filename>/etc/postfix/sasl</filename>. Wir haben oben den Wert der Option <parameter>smtpd_sasl_application_name</parameter> auf den Wert <option>smtpd</option> gesetzt. Daher ist eine Konfigurationsdatei mit den Namen <filename>/etc/postfix/sasl/smtpd.conf</filename> mit folgendem Inhalt zu erstellen:
</para>

<programlisting>
log_level: 5
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
</programlisting>

<para>
Wie schon bei Cyrus haben wir hier die Auswahl zwischen <command>saslauthd</command> und auxprop für die Option <parameter>pwcheck_method</parameter>. Man beachte das beim Einsatz von <command>saslauthd</command> nur Plain-Mechanismen Funktionieren und daher die Option <parameter>mech_list</parameter> entsprechend eingegrenzt werden muss.
</para>

<para>
Nun schauen wir noch kurz die <parameter>smtp_sasl_*</parameter> Optionen an. Diese wird man vermutlich nur in dem Fall anwenden, wenn die Mail an den Mailserver des Providers zum Relaying weitergereicht werden und dieser eine Authentizierung verlangt. In diesem Fall fügt man die folgenden Optionen zur <filename>main.cf</filename> hinzu.
</para>

<programlisting>
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
</programlisting>

<para>
In der Datei <filename>/etc/postfix/sasl_passwd</filename> trägt man Benutzername, Tab und Passwort ein. Danach ist mit <command>postmap /etc/postfix/sasl_passwd</command> die Hashtabelle zu generieren. Aus sicherheitsgründen sollen diese Dateien root gehören und mit den Rechten <option>0600</option> (<option>-rw-------</option>) ausgestattet sein.
</para>

</sect2>

<sect2>
<title>Test von SMTP AUTH</title>

<para>
Einmal eingerichtet folgt der Test der Konfiguration. Dieser wird am besten wieder direkt mit dem Server im Dialog getestet.
</para>

<programlisting>
220 sirius.hogwarts.local ESMTP Postfix
EHLO andy.hogwarts.local
250-sirius.hogwarts.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250 8BITMIME
AUTH PLAIN dXNlcgB1c2VyAHBhc3N3b3Jk
535 Error: authentication failed
AUTH PLAIN dXNlcgB1c2VyAGdlaGVpbQ==
235 Authentication successful
</programlisting>

<para>
Einige mögen sich nun wundern, wass der Zeichensalat nach <command>AUTH PLAIN</command> zu bedeuten hat. Dieser Teil ist der <acronym>Base64</acronym>-codierte Benutzername und Passwort in der Form: <synopsis>username ZERO username ZERO password</synopsis> wobei <quote>ZERO</quote> das Null-Zeichen mit <acronym>ASCII</acronym>-Wert 0x00 ist, welches üblichweise in der Form <quote>'\0'</quote> in Strings geschrieben wird. Die Kodierung in <acronym>Base64</acronym> kann mit Python oder Perl erfolgen:
</para>

<programlisting>
$ python 
&gt;&gt;&gt; from base64 import *
&gt;&gt;&gt; print encodestring('user\0user\0password')
dXNlcgB1c2VyAHBhc3N3b3Jk

&gt;&gt;&gt;
$ perl -MMIME::Base64 -e 'print encode_base64("user\0user\0password");'
dXNlcgB1c2VyAHBhc3N3b3Jk
</programlisting>

<para>
Fehlermeldungen sind in den Logfiles zu finden.
</para>

</sect2>

</sect1>

<sect1>
<title>Spamfilter</title>

<para>
Der Spamfilter wird auf jede Mail angewendet, bevor diese an Cyrus weitergeleitet wird. Postfix bietet dazu den <quote>After-Queue Content Filter</quote> an. Die Mail wird dabei durch einen externen Filter-Prozess geschickt und danach wieder in die Queue zurückgeleitet.
</para>

<programlisting>
#!/bin/bash

PATH=/bin:/usr/bin
HOME=/var/run/bogofilter
export PATH HOME
SENDMAIL="/usr/sbin/sendmail"
BOGOFILTER="/usr/bin/bogofilter"

EX_TEMPFAIL=75
EX_UNAVAILABLE=69

cd $HOME

$BOGOFILTER -p | $SENDMAIL -i "$@"

exit $?
</programlisting>

<programlisting>
echo $(pwd)/hambox | bogofilter -n -v -b
echo $(pwd)/spambox | bogofilter -s -v -b
</programlisting>

</sect1>

<sect1>
<title>Webmail</title>

</sect1>

<sect1>
<title>Backup</title>

<para>
Dieser Punkt sollte nicht ausser Acht gelassen werden. Schliesslich will man seine E-Mail nicht verlieren. Es stellt sich also die Frage was alles zu sichern ist.
</para>

<sect2>
<title>Benutzerdaten</title>

<para>
Um den Kompletten Status zu sichern, reicht es nicht das cyrus-Spoolverzeichnis zu sichern. Damit hat man zwar alle E-Mails, aber es fehlen Informationen zu den Mailboxen, den Abonnierlisten etc. Trotzdem ist es möglich, mit diesem Verzeichniss allein alle Mails wiederherzustellen. Mit Hilfe von <command>reconstruct</command> - unter Debian <command>/usr/sbin/cyrreconstruct</command> - kann die Datenbank wiederhergestellt werden.
</para>

<itemizedlist>
<title>Zu sichernde Elemente</title>
<listitem><para>Default-Partition <filename>/var/spool/cyrus</filename></para></listitem>
<listitem><para>Weitere Partitionen</para></listitem>
<listitem><para>Datenbank <filename>/var/lib/cyrus</filename></para></listitem>
<listitem><para>Sieve Scripts <filename>/var/spool/sieve</filename></para></listitem>
</itemizedlist>

<para>
Um Inkonsitenzen im Backup auszuschliessen, sollte Cyrus zuvor ausgeschaltet werden.
</para>

<para>
Hier ein Beispiel für ein Backup-Script.
</para>

<programlisting>
#!/bin/bash

if [ -z "$1" ]; then
        echo -e "Usage: $0 DIRECTORY"
        exit 1
fi

BACKUPDIR="$1"
if [ ! -d "$BACKUPDIR" ]; then
        echo -e "!!! $BACKUPDIR must be a directory"
        exit 1
fi

TODAY=$(date -I)

echo -e "*** Backup using ${BACKUPDIR}"

su - cyrus -c "/usr/sbin/ctl_mboxlist -d" &gt; $BACKUPDIR/mboxlist-$TODAY.txt

cp /etc/imapd.conf $BACKUPDIR/imapd.conf.$TODAY
cp /etc/cyrus.conf $BACKUPDIR/imapd.conf.$TODAY

echo -e "*** Maildirs"
tar --create --bzip2 \
        --directory /var/spool \
        --file $BACKUPDIR/cyrus-mail-$TODAY.tar.bz2 \
        cyrus

echo -e "*** Database directory"
tar --create --bzip2 \
        --directory /var/lib \
        --file $BACKUPDIR/cyrus-lib-$TODAY.tar.bz2 \
        cyrus

echo -e "*** Sieve scripts"
tar --create --bzip2 \
        --directory /var/spool \
        --file $BACKUPDIR/sieve-$TODAY.tar.bz2 \
        sieve

echo -e "*** Backup finished"
</programlisting>

</sect2>

<sect2>
<title>Konfiguration und Systemdateien</title>

<para>
Die Konfiguration und die Systemdateien sollte bereits mit dem Systembackup gesichert werden. Hier gibt es so viele Ansätze, dass ich gar nicht weiter darauf eingehen will.
</para>

<para>
Geht es darum, die Konfiguration später wiederherzustellen, so sind folgende Dateien in Betracht zu ziehen:
</para>

<itemizedlist>
<listitem><para>Postfix Konfiguration unter <filename>/etc/postfix</filename>, insbesondere <filename>main.cf</filename> und <filename>master.cf</filename></para></listitem>
<listitem><para>Cyrus Konfiguration, bestehend aus <filename>/etc/imapd.conf</filename> und <filename>/etc/cyrus.conf</filename></para></listitem>
<listitem><para>SASL Konfiguration, verteilt auf <filename>/etc/defaults/saslauthd</filename> und <filename>/etc/postfix/sasl</filename></para></listitem>
</itemizedlist>

</sect2>

</sect1>

</article>
