
diff -r 000000000000 -r 2a5f2464f8c6 manual.tex
--- /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:




