--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/manual.tex Fri Nov 04 06:29:26 2005 +0000
@@ -0,0 +1,467 @@
+\documentclass[final]{article}
+% © Heiko Schlittermann
+% $Id$
+% $URL$
+
+\usepackage{ius}
+\usepackage{makeidx}
+\newcommand{\N}[1]{\textit{#1\/}} % name
+\newcommand{\T}[1]{\texttt{#1}} % typed
+\newcommand{\U}[1]{\underline{#1}}
+\newcommand{\C}[1]{}
+
+\title{Mailsystem --- Deutsche Post AG / TCB --- Systemdokumentation}
+\author{$<$hs@schlittermann.de$>$}
+\date{\today}
+%\makeindex
+
+\begin{document}
+\maketitle
+
+%\begin{abstract}
+\subsubsection*{Zusammenfassung}
+ Ein Mailserver. Post wird per \N{fetchmail} geholt, an \N{exim}
+ (SMTP) übergeben und dann in den \N{cyrus}-Mailstore gelegt. Dort
+ ist dann alles per POP/IMAP verfügbar.
+%\end{abstract}
+
+\parskip0mm
+\tableofcontents
+\parskip0.5em
+
+%\setlength{\parindent}{0mm}
+%\setlength{\parskip}{1em}
+
+\section{Verwendete Komponenten}
+
+ \begin{tabular}{ll}
+ Post-Abholer & fetchmail \\
+ SMTP-Server & exim 4.5x \\
+ POP3/IMAP-Server & cyrus 2.2 \\
+ OpenLDAP & 2.2 \\
+ \end{tabular}
+
+\section{LDAP}
+
+ Im LDAP sind die Nutzerdaten (Accounts, Passworte, \ldots) hinterlegt.
+ Mit einem LDAP-Browser ist jederzeit der Zugang zum LDAP-Server
+ möglich, so sind Änderungen relativ einfach und schnell möglich.\index{LDAP-Tools}
+
+ \subsection{SSL/TLS}
+
+ Der LDAP-Server stellt seine Dienste unverschlüsselt zur Verfügung. Verschlüsselung über
+ STARTTLS bzw. \texttt{ldaps:///} ist möglich und konfiguriert. Die Herausforderung ist
+ aber, daß dann der Client das auch unterstützen muß und vor allem mit den von einer nicht
+ offiziellen CA signierten Zertifikaten auskommen muß.
+
+ \subsection{LDAP-Browser}
+
+ Es gibt einige GUI-LDAP-Browser.
+
+ \begin{description}
+ \item{\N{ldapbrowser}} Bei Google man nach \qq{ldapbrowser java}
+ suchen. Er läuft unter Linux und unter Win32 mit einer aktuellen
+ Java-Runtime.
+
+ \item{\N{JXplorer}} Alternative zu dem o.g.
+ \end{description}
+
+ Und es gibt natürlich noch für die (Linux)-Kommandozeile einiges.
+ Am besten geeignet: \N{ldapvi}. Für die Kontrolle über die
+ letzten Schrauben dann \N{ldap\{add,delete,modify\}}. Für
+ \N{ldapvi} ist ein Alias \T{ldapvi} in der \T{~.bashrc} eingetragen,
+ der sich versucht, als Admin an den LDAP-Server zu binden.
+
+ Die Zugangsdaten $\rightarrow$ Seite~\pageref{p:Zugangsdaten}.
+
+ \subsection{Struktur}
+
+ Unterhalb des Knotens \N{ou=MailAccounts} sind Nutzer-Objekte angelegt, die
+ für die Authentifizierung notwendig sind. Außerdem enthalten diese
+ Objekte auch alternative Mail-Adressen und die Mailgruppen-Zugehörigkeit
+ für die jeweiligen Nutzer.
+
+ \begin{sloppypar}
+ Unterhalb von \N{ou=MailAliases} sind Objekte, die den bisherigen
+ Aliasen/Verteilerlisten aus \T{/etc/aliases} entsprechen.
+ \end{sloppypar}
+
+ Es existieren also zwei Mechanismen für eine Realisierung von Alias-ähnlichen
+ Verteilern: über \N{ou=MailAliases} und über das \N{MailGroup}-Attribut.
+
+ \fussy
+ Wichtige Bestandteile der Mail-Accounts sind:
+
+ \begin{tabular}{ll}
+ objectClass & \N{uidObject}, \N{tcbMailRecipient}, \N{person} \\
+ uid & Nutzer-ID (Anmeldung am POP3/IMAP-Server, Name der Mailbox) \\
+ userPassword & Passwort für SMTP/POP3/IMAP \\
+ tcbMailPrimaryAddress & primäre Mailadresse \\
+ tcbMailAddress & alternative Adressen \\
+ tcbMailGroup & Mitgliedschaft in Mailgruppen \\
+ tcbMailForwardingAddress & Weiterleitungsadresse (analog .forward) \\
+ sn & Nachname (ungenutzt, muß aber gesetzt sein) \\
+ cn & allgemeiner Name (ungenutzt, muß aber gesetzt sein) \\
+ \end{tabular}
+
+ Die Aliase sind einfacher aufgebaut:
+
+ \begin{tabular}{ll}
+ objectClass & \N{tcbMailAlias} \\
+ mail & allgemeiner Name des Aliases (hier: \qq{linke Seite}) \\
+ tcbMailForwardingAddress & Alias, als der Empfänger \\
+ \end{tabular}
+
+ \subsection{Files}
+
+ \begin{tabular}{ll}
+ Konfiguration & \T{/etc/ldap/*} \\
+ Logfiles & \T{/var/log/syslog} \\
+ Datenbank & \T{/var/lib/ldap/*} \\
+ Backup & \T{/var/backups/ldap.week*} \\
+ \end{tabular}
+
+ \subsection{Administration}
+
+ Am LDAP-Server selbst ist nicht viel zu administrieren. Nutzer an-
+ und ablegen ist auf Seite~\pageref{p:admin} beschrieben.
+
+ \subsection{Backup/Recovery}
+
+ Sollte das LDAP sich über Datenbank-Probleme beschweren, gibt es
+ etwa folgenden Weg:
+
+ \begin{enumerate}
+ \item LDAP-Server neustarten: \T{service lap restart}
+ \item Datenbank-Recovery versuchen:
+ \begin{quote}\T{%
+ service ldap stop \\
+ cd /var/lib/ldap\\
+ db41\_recover\\
+ service ldap start\\
+ }\end{quote}
+ \item Backup wieder einspielen:
+ \begin{quote}\T{%
+ service ldap stop \\
+ rm -r /var/lib/ldap/* \\
+ bzcat </var/backups/ldap/XXX.bz2 | slapadd \\
+ service ldap start \\
+ }\end{quote}
+ \item 0351.8029981
+ \end{enumerate}
+
+\section{SMTP}
+
+ Um unerwünschtes Mailweiterleiten\index{Relaying} zu verhinden, sind Mails von
+ unauthentifizierten Nutzern nur zugelassen, wenn der Empfänger
+ in einer der bekannten lokalen Domains ist. Zum Senden von Mails an
+ andere Domains ist eine Authentifizierung\footnote{Name/Passwort wie
+ am POP3/IMAP-Server} am Mailserver notwendig.
+
+ \subsection{SMTP-Authentifizerung}
+
+ Es werden die Authentifizierungsverfahren PLAIN und
+ LOGIN unterstützt.
+
+ Authentifizierung ist nur möglich, wenn eine verschlüsselte Verbindung
+ zwischen MUA und MTA besteht. Dafür bietet der MTA \N{STARTTLS} an.
+
+ \subsubsection{Authorisierung}
+
+ Authentifizierte Nutzer dürfen Mails an beliebige Adressen versenden.
+ Dabei wird jedoch immer die \N{PrimaryMailAddress} als deren Absender
+ eingetragen.
+
+ \subsection{Mailrouting}\label{s:mailrouting}
+
+ \begin{enumerate}
+
+ \item Mail an nicht lokale Domains (lokal ist
+ \N{tcb.deutschepost.de}) wird an den Smart-Relay (\N{mimesweeper}
+ über DNS-Auflösung) weitergeleitet.
+
+ \item Es wird im LDAP nach Aliasen für die aktuelle Adresse gesucht (unterhalb
+ \N{ou=MailAliases}). Diese Aliase entsprechen den bisherigen
+ \T{/etc/aliases}. Aliase werden dort ohne angehängte Domain gesucht.
+
+ \item Es wird unterhalb von \N{ou=MailAccounts} gesucht, ob der Adressat eine
+ Mailgruppe ist. Wenn ja, werden alle Gruppenmitglieder zu neuen
+ Adressaten.
+
+ \item Es wird unterhalb von \N{ou=MailAccounts} gesucht, ob
+ es für den Adressaten eine Mailbox/UID gibt.
+
+ \item Es wird unterhalb von \N{ou=MailAccounts} gesucht, ob für den
+ Adressaten/UID Weiterleitungsadressen existieren. Wenn ja, werden diese
+ eingesetzt und das Routing beginnt von vorn.
+
+ \item Wenn dieser Schritt erfolgreich ist, wird die Mail an den
+ POP3/IMAP-Server übergeben.
+
+ \end{enumerate}
+
+
+ \subsection{Adress-Rewriting}
+
+ In ausgehenden Mails (zum Mimesweeper) werden alle Absender-Adressen
+ so umgeschrieben, daß als Absender (in \N{From:} und \N{Sender:} und auch im
+ \N{Return-Path} die primäre Adresse des authentifizierten Nutzers steht.
+
+ Enthält die Primäre Adresse kein \T{@}, dann wird der Return-Path
+ auf \T{$<>$} gesetzt und die \N{From:} und \N{Sender:}-Header
+ bleiben unverändert. Mit dieser Einstellung sollte die Mail dann
+ (wegen des leeren Return-Path) die meisten Mailserver passieren
+ können.\footnote{Die meisten. Einige prüfen inzwischen auch die
+ Verfügbarkeit von brauchbaren Header-Zeilen \N{From:} und
+ \N{Sender:}.}
+
+ In \N{CC:}, \N{Reply-To:}, \N{To:}-Headern wird, wenn sie eine
+ Adresse \N{@tcb.deutschepost.de} enthalten, diese ersetzt durch die
+ primäre Adresse des entsprechenden Nutzers (gesucht wird im Ldap
+ nach Einträgen, deren \N{tcbMailAddress} dem Nutzer lokalen Teil der
+ fraglichen Adresse entspricht).
+
+ \subsection{Files}
+
+ \begin{tabular}{ll}
+ Konfiguration \N{Exim} & \T{/etc/exim/*} \\
+ SMTP-Spool & \T{/var/spool/exim/*} \\
+ SMTP-Log & \T{/var/log/exim/\{main,reject,panic\}.log} \\
+ \end{tabular}
+
+ \subsection{Administration}
+
+ Viel zu administrieren sollte es am \N{Exim} nicht geben. Ab und zu
+ kann man die Warteschlange mit \T{mailq} oder \T{exipick} kontrollieren.
+ Eingefrorene Mails sollten nach einigen (7) Tagen verschwinden.
+
+ Im Zweifelsfall ist ein Blick in die Logfiles (vor allem
+ \T{panic.log} und \T{reject.log}) interessant.
+
+ Zum Adress-Test biete sich folgendes an:
+
+ \begin{quote}\T{exim -v -bv hans@domain.de}\end{quote}
+
+ Damit können lokale und auch externe Adressen getestet werden und es
+ ist zu erkennen, wie der Mailserver die jeweilige Adresse routen
+ würde.
+
+
+\section{POP3/IMAP}
+
+ Vom SMTP-Server \N{Exim} kommt die Mail per LMTP zum \N{Cyrus}. Der
+ verwaltet sein eigenes Mailstore in \T{/var/spool/cyrus}. Dort
+ manuell einzugreifen ist nicht die beste Idee, da der \N{Cyrus} sich
+ Index-Dateien erzeugt, über die er dann den Zustand der Mailboxen zu
+ kennen glaubt.
+
+
+ \subsection{Clients}
+
+ Die Clients können per POP3 und/oder IMAP auf ihre Postfächer
+ zugreifen. Allerdings steht per POP3 nur die Inbox zur Verfügung.
+
+ Der übertragenen User-Name wird im LDAP unter \N{ou=MailAccounts}
+ gesucht und dann wird über ein LDAP-Bind die Korrektheit des
+ Passworts geprüft.
+
+ \subsection{Files}
+
+ \begin{tabular}{ll}
+ Konfiguration & \T{/etc/imapd.conf} \\
+ & \T{/etc/cyrus.conf} \\
+ Spool & \T{/var/spool/cyrus} \\
+ Logfiles & \T{/var/log/mail.log}
+ \end{tabular}
+
+ \subsection{Administration}
+
+ Sollten die unten (S.~\pageref{p:admin}) beschriebenen Werkzeuge
+ nicht ausreichen, ist mit \T{cyradm} noch einiges zu retten:
+ \T{cyradm localhost}:
+
+ \begin{verbatim}
+ lm # alle Mailboxen anzeigen
+ cm user/hannes # Mailbox anlegen für hannes
+ lm user/hannes # Hannes Mailbox
+ lam user/hannes # Berechtigungen zeigen
+ sam user/hannes root all # Berechtigungen setzten
+ lq user/hannes # Quota anzeigen
+ sq user/hannes STORAGE 200 # Quota auf 200k setzen
+ \end{verbatim}
+
+ Eine direkte Verbindung mit den Mailboxen ist mit jedem beliebigen
+ IMAP-Client möglich, z.B. auch mit Mutt:
+
+ \begin{quote}
+ \T{mutt -f imap://cyrus@localhost/user/hannes}
+ \end{quote}
+
+ bzw.\ direkt als Hannes:
+
+ \begin{quote}
+ \T{mutt -f imap://hannes@localhost/}
+ \end{quote}
+
+
+\section{Administration}\label{p:admin}
+
+ Zur Administration des Mailsystem liegt ein einfach(!) zu benutzender
+ Script \T{ma} vor. Die aktuelle Dokumentation dazu ist \N{ma(8)} zu entnehmen.
+
+
+ \subsection{Accounts}
+
+ \subsubsection{Anzeigen}
+
+ Vorhandene Accounts können angezeigt werden:
+
+ \begin{quote}
+ \T{ma \U{account} --ls}\\
+ \T{ma \U{account} --ls `h*'}
+ \end{quote}
+
+ \subsubsection{Anlegen}\label{ss:account}
+
+ Beim Anlegen werden nur Accounts und Mailboxen angelegt, wenn sie
+ noch nicht da sind. In bestehende Accounts werden nur die
+ Mail-Attribute (\N{tcbMailPrimaryAddress}, \N{tcbMailAddress}) eingetragen,
+ wenn Sie noch nicht vorhanden sind. Andernfalls gehen wir davon
+ aus, daß es kein Neueintrag ist.
+
+ \begin{quote}
+ \T{ma \U{account} \U{--add} --fullname='Hans Hanson' --other='hh' hans.hanson}
+ \end{quote}
+
+ Weitere Optionen sind:
+
+ \begin{description}
+ \item[\T{--address=s}] Primäre Mailadresse (default: entspricht dem Account-Namen)
+ \item[\T{--fullname=s}] Klartext-Name (default: -)
+ \item[\T{--other:s}] Weitere alternative Mailadressen für \emph{diesen\/} Nutzer (default: -)
+ \item[\T{--imap\_quota=i}] Imap-Quota in MegaByte (default: 300\,MB)
+ \item[\T{--[no]mbox}] Anlegen der Mailbox (default: Mailbox wird angelegt)
+ \item[\T{--password=s}] Passwort (default: \{pwgen\}, d.h.\ es wird generiert und
+ dann angezeigt)
+ \item[\T{--group:s}] Zugehörigkeit zu Mailgruppen.
+ \end{description}
+
+
+ \subsubsection{Verändern}\label{ss:change}
+
+ Vorhandene Einträge können natürlich auch verändert werden:
+
+ \begin{quote}
+ \T{ma \U{account} \U{--modify} --fullname='Hans-Georg Hanson' hans.hanson}\\
+ \end{quote}
+
+ Für einige Attribute ist eine kumulative Änderung möglich (z.B.
+ Hinzufügen von alternativen Namen), bei anderen (primary
+ Mailadresse) nur ein Verändern. Der Präfix \T{+} oder \T{-} ist
+ wichtig, ohne den Präfix wird das Attribut \emph{genau\/} auf den
+ angegebenen Wert gesetzt:
+
+ \begin{quote}
+ \T{ma \U{account} \U{--modify} --also=+hans,-hh hans.hanson} \\
+ \T{ma \U{account} \U{--modify} --also=h.hanson hans.hanson}
+ \end{quote}
+
+ Veränderbar sind die selben Optionen wie oben
+ (\ref{ss:account}).\footnote{Außer die Mailbox-Option, das ist
+ noch nicht implementiert.}
+
+ \subsubsection{Löschen}
+
+ \emph{Vorsicht.\/} Es wird rigoros der komplette LDAP-Eintrag
+ gelöscht! Und bei Bedarf die Mailbox.
+
+ \begin{quote}
+ \T{ma \U{account} \U{--delete} hans.hanson}\\
+ \T{ma \U{account} \U{--delete} --nombox hans.hanson}\\
+ \end{quote}
+
+ Die zweite Zeile würde die Mailbox bestehen lassen.
+ Optionen gibt es keine weiteren.
+
+ \subsection{Aliase}
+
+ \subsubsection{Anzeigen}
+
+ Alle vorhandenen Aliase werden in einem bequemen
+ \T{/etc/aliases}-Format ausgegeben:
+
+ \begin{quote}
+ \T{ma \U{alias} --list} \\
+ \T{ma \U{alias} --list `h*'}
+ \end{quote}
+
+ \subsubsection{Anlegen}
+
+ Beim Anlegen wird der Eintrag nur gemacht, wenn er noch nicht
+ vorhanden ist.
+
+ \begin{quote}
+ \T{ma \U{alias} \U{--add} --members=hans,suse fam.ente}
+ \end{quote}
+
+ Das trägt einen Alias \N{fam.ente} ein, der als Verteiler wirkt
+ und die Mails an \N{hans} und \N{suse} weiterleitet.
+
+ Weitere Optionen gibt es nicht.
+
+ \subsubsection{Verändern}
+
+ Zum Verändern gilt das selbe wie schon in~\ref{ss:change} zu den
+ Accounts. Hinzufügen von Mitgliedern und Entfernen von
+ Mitgliedern ist möglich. Dabei sind auch \qq{Masseneintragungen}
+ möglich:
+
+ \begin{quote}
+ \T{ma \U{alias} \U{--modify} --members=+big.brother '*'}
+ \end{quote}
+
+ \subsubsection{Löschen}
+
+ Der gesamt Alias-Eintrag wird entfernt.
+
+ \begin{quote}
+ \T{ma \U{alias} \U{--delete} fam.ente}
+ \end{quote}
+
+
+\section{Zugangsdaten}\label{p:Zugangsdaten}
+\index{Passwort}
+
+ \subsection{LDAP}
+
+ \begin{tabular}{ll}
+ Server:Port & mail.tcb.deutschepost.de:389 (Plain + STARTTLS)\\
+ & mail.tcb.deutschepost.de:636 (SSL) \\
+ Base-DN & \T{dc=tcb,dc=deutschepost,dc=de} \\
+ Admin-User (Bind-DN) & \T{cn=admin,dc=tcb,dc=deutschepost,dc=de}\\
+ Admin-Passwort & \T{anfang} \\
+ \end{tabular}
+
+ \subsection{IMAP}
+
+ \begin{tabular}{ll}
+ Server:Port & mail.tcb.deutschepost.de:143 \\
+ Admin-User & \T{cyrus} \\
+ Admin-Passwort & \T{anfang} \\
+ Korrespondierender LDAP-Eintrag & \T{uid=cyrus,ou=Cyrus,\dots} \\
+ \end{tabular}
+
+ Um die nervigen Fragen nach Passworten\index{Passwort} für LDAP und IMAP zu umgehen,
+ können die Passworte in Umgebungsvariablen abgelegt werden: \T{export
+ IMAP\_PASS=XXX} und \T{export LDAP\_PASS=XXX}.
+
+\printindex
+
+\vfill
+Stand: \verb!$Id$!\\
+Quelle: \verb!$URL$!
+
+
+\end{document}
+
+% vim:sts=2 sw=2 aw ai sm: