= Mailserver - Umsetzung =

Auf dieser Seite möchte ich die Umsetzung der Ideen und Überlegungen auf der Seite MailServer beschreiben. Beides in eine Seite zu schreiben, dürfte schnell unübersichtlich werden. Deshalb soll die Seite MailServer als Übersicht über die gewünschten Funktionen dienen und die Seite MailServerUmsetzung für Diskussionen hierüber und die konkrete Umsetzung.

''(Ob ich zuviel Java programmiert habe, wenn ich jetzt meine Wiki-Seiten schon in Interface und Implementation aufteile, mag der geneigte Leser selbst entscheiden... ;-) --ThomasBayen)''

Die Reihenfolge in diesem Dokument entspricht der logischen Reihenfolge bei der Installation (nicht der thematischen Reihenfolge auf der Seite MailServer).



== Exim-Konfiguration ==

In diesem Abschnitt ist die eigentliche Mailserver-Software als Kern unseres Mailsystems sowie deren Konfiguration beschrieben.


=== Auswahl der Mailserver-Software ===

Grundsätzlich habe ich die bekanntesten Mailsysteme überflogen. Das Hauptkriterium ist erstmal Sicherheit und Stabilität. Das versprechen jedoch eh alle Mailserver. :-) Nun wollte ich einen Server haben, der alles kann (also nicht zu einfach), der halbwegs gut verbreitet ist und deshalb nicht so schnell stirbt und der gut genug dokumentiert ist, um alle Anforderungen umsetzen zu können. Nach einigen Erfahrungen der Vergangenheit rate ich von '''Sendmail''' dringend ab, weil dessen Konfiguration die Hölle ist.

Ich habe mich einstweilen für [Exim|http://exim.org] enschieden. Der Hauptgrund ist, daß Exim standardmäßig von Debian installiert wird und ich mich daher bereits etwas an ihn gewöhnt habe. Exim ist sehr leistungsfähig. Leider geht damit einher, daß er für die Konfiguration im Grunde eine eigene Programmiersprache geschaffen hat. Die Dokumantation hierzu ist sehr lang und knochentrocken. Es sind zwar alle Befehle und Optionen erklärt, aber mir fehlt noch die Stelle, an der praktische Beispiele stehen. Ich musste mir die Debian-Standardkonfiguration Stück für Stück ansehen und daraus lernen, was man wie am besten macht. Wenn man die Konfiguration einmal hat, ist Exim ein solides Arbeitstier.

Von den anderen Alternativen erschien mir Postfix noch als am ehesten geeignet, ich hatte aber keine Lust, ich da auch noch in die Doku einzuarbeiten. Wie gesagt ist hier alles mit Exim beschrieben, bis jemand mit Postfix-Erfahrung seine Tips dazugibt.

''Übrigens ist bei Exim die Version 4 aktuell. In älteren Systemen geistert auch noch Exim 3 herum. Grundsätzlich sollte alles hier beschriebene auch aus einem Exim 3 herauszukitzeln sein. Die Konfiguration hat sich jedoch stark geändert, weshalb ich mich hier ausschließlich auf Exim 4 beziehe. Eine ältere Seite zum Thema, die auf Exim 3 basiert, findet sich unter EximMailServer.

Die Standard-Konfiguration unter Debian weicht übrigens von der Standard-Konfiguration von Exim ab. Es kann also sein, daß unten genannte Beispiele für andere Distributionen angepasst werden müssen.''

Exim installiert man unter Debian ganz einfach:

  aptitude install exim4
  dpkg-reconfigure exim4-config

Debconf setzt vor allem Werte in ''/etc/exim4/update-exim4.conf.conf''. Diese habe ich hier als Beispiel angegeben:

  dc_eximconfig_configtype='smarthost'
  dc_other_hostnames='meinedomain.de'
  dc_local_interfaces=''
  dc_readhost=''
  dc_relay_domains=''
  dc_minimaldns='false'
  dc_relay_nets=''
  dc_smarthost='smtp.meinedomain.de'
  CFILEMODE='644'
  dc_use_split_config='true'
  dc_hide_mailname='false'
  dc_mailname_in_oh='true'
  dc_localdelivery='mail_spool'

Die beste Doku für den Start ist '''/usr/share/doc/exim4-base/README.Debian.gz'''. Dort sind z.B. auch alle Debconf-Fragen genau erklärt.

Für die von uns gewünschten Manipulationen benötigt man in erster Linie die sog. '''Router''', die in ''/etc/exim4/config.d/routers/'' konfiguriert werden. Die dort liegenden Dateien sollte man mal überfliegen und versuchen herauszufinden, was sie tun. Dabei sollte man eine erste Vorstellung bekommen, wie Exim-Konfigurationen funktionieren.

'''Links:'''

* http://wiki.debian.org/PkgExim4 - Debian-Paket-Seite


=== Versand von Mails ===

Grundsätzlich kann unser Exim sich zum Versand per DNS den sogenannten "MX-Record" der Zieldomain suchen. Dort steht der zuständige Mailserver, an den man dann die Mail senden kann. Praktisch ist es jedoch so, daß die allermeisten Mailserver unsere Mail gar nicht so einfach annehmen. Aus Gründen des Spamschutz werden dynamische IPs und überhaupt IPs, hinter denen sich Normaluser-Anschlüsse verbergen sollten, oftmals ausgefiltert. Deshalb ist es (wenn unser Mailserver nicht für einen "echten Provider" arbeiten soll) sinnvoll, daß wir unsere Mail an unseren Provider weiterreichen. Das kann der sein, dessen Internetzugang ich benutze oder der, der mir meine Domain zur Verfügung stellt.

Alle vernünftigen Provider verlangen nun, daß wir uns authentifizieren. (Die Unvernünftigen können von jedem Spammer zur Weiterleitung benutzt werden und landen daher auch bald auf Blacklists. Nimmt Dein Provider alsoo Mail ohne Authentifizierung an, ist es Zeit, sich einen neuen Provider zu suchen.)

'''Langer Rede kurzer Sinn:''' In der Datei ''/etc/exim4/passwd.client'' muss der SMTP-Server meines Providers, mein Benutzername und mein Passwort angegeben werden, da mein Provider nur authentifizierte Verbindungen annimmt. Der ''remote_smtp_smarthost''-Transport bemerkt diese Datei und benutzt eine authentifizierte Verbindung zum Provider-Server, wenn nötig.


=== gesicherter Zugriff ===

Gute Informationen zum Einstieg ins Thema gibt es in '''/usr/share/doc/exim4-base/README.Debian.gz'''.

Mit dem folgendem Befehl erzeugt man ein selbstsigniertes Zertifikat, das dann im Verzeichnis ''/etc/exim4'' abgelegt wird. Bei den abgefragten Daten ist eigentlich nur wichtig, daß man als Server Name den Namen angibt, unter dem der Nameserver im lokalen Netz bekannt ist (z.B. ''mail.intranet'').

  /usr/share/doc/exim4-base/examples/exim-gencert

Dazu muss man noch ein Macro in der Konfiguration setzen. Hierzu kann man z.B. eine Datei ''/etc/exim4/conf.d/main/00_localmacros'' mit folgendem Inhalt erzeugen:

  MAIN_TLS_ENABLE = 1

Nun ist Exim in der Lage, verschlüsselte Verbindungen per SSL aufzubauen. Über diese Verbindungen macht nun auch eine Authentifizierung Sinn. Diese konfiguriert man in ''/etc/exim4/conf.d/auth/30_exim4-config_examples''.

Man kann einerseits den '''plain_saslauthd_server''' benutzen. Dieser benutzt die normalen Linux-Benutzerpasswörter. Natürlich werden diese dadurch auch leichter kompromittiert. Wer den Mailserver zu nichts anderem benutzt, hat dadurch eine einheitliche Stelle, an der die Passwörter liegen. Allerdings kann ein kompromittiertes Passwort einen Login-Zugang auf dem Mailserver öffnen. Über dieses Einfallstor kann ein guter Hacker dann weiterkommen. Natürlich kann man die Login-Shell in ''/etc/passwd'' deaktivieren. Allerdings fragt man sich dann, warum man nicht gleich eine eigene Passwort-Datei benutzt.

Auf jeden Fall muss man dazu das Debian-Paket '''sasl2-bin''', dann in ''/etc/default/saslauthd'' '''START=yes''' einstellen, dann die Befehle '''mkdir /var/run/saslauthd''' und '''adduser Debian-exim sasl''' ausführen. Nach einem Neustart von sasl und Exim kann man sich dann mit seinem normalen Passwort einloggen.

Besser kann man sich eine Plain- oder (besser) CRAM-MD5-Authentifizierung einrichten, indem man den entsprechenden Bereich in ''/etc/exim4/conf.d/auth/30_exim4-config_examples'' entkommentiert und die dort beschriebene Passwort-Datei anlegt.

Übrigens kann man von außen immer ohne Authentifizierung Mail an die eigene Domain und die mit debconf angegebenen relay-Domains sowie aus dem gesamten relay_net abgeben. Deshalb sollten die Relay-Einstellungen möglichst leer bleiben (wie oben im Beispiel). Eine Anlieferung von Mails an die lokale Domain ohne Authentifizierung ist immer möglich. Wollte man dies ändern, müsste man ggf. ACLs benutzen, aber das ist ein Thema für ein anderes Mal!


=== extended Adressen ===

Extended Adressen werden wohl von fast jedem Mailserver irgendwie unterstützt, sind aber schlecht dokumentiert. Insbesondere Exim glänzt mal wieder dadurch, daß in der Doku alle Puzzleteile genau erklärt sind, aber einem keiner sagt, wie das dann zusammen funktioniert. Zum Glück gibt es das [TMDA-Wiki|http://wiki.tmda.net/PreConfiguration#exim]. In die Dateien

  /etc/exim4/config.d/routers/400_exim4-config_system_aliases
  /etc/exim4/config.d/routers/600_exim4-config_userforward
  /etc/exim4/config.d/routers/900_exim4-config_local_user

habe ich folgende Zeilen am Ende der Router-Definition eingefügt:

  # -TB-
  local_part_suffix = -*
  local_part_suffix_optional

Diese Dateien enthalten Definitionen für Router wie den, der "~/.forward"-Files abarbeitet (mit deren Hilfe vom Benutzer z.B. procmail, TMDA, etc. aufgerufen werden können.) sowie den Router zur eigentlichen Zustellung in das lokale Postfach eines Linux-Benutzers. Diesen wird nun beigebracht, daß der email-Name ein Suffix enthalten kann ,das mit "-" beginnt. Dieses wird dann bei der Suche nach den richtigen Benutzer weggelassen.


=== Alias-Adressen ===

Es gibt in sogut wie allen Mailservern eine Datei ''/etc/aliases''. Hier trage ich ganz einfach meine Alias-Adressen ein. Wenn mein Account also normalerweise ''thomasbayen'' heisst, ich aber z.B. auch als ''superman'' angesprochen werden will, füge ich folgendes ans Ende dieser Datei:

  superman: thomasbayen

=== Catch-All-Adresse ===

Eine Catch-All-Adresse kann recht nervig sein, weil Spammer oftmals erfundene Adressen bekannter Domains benutzen. Insbesondere benutzen sie diese gerne als Absende-Adresse. Die Spam sieht so etwas weniger nach Spam aus (weil sie ja von einer echten Domain, nämlich meiner, kommt). Daraufhin erhalte ich nun also alle Antworten auf die Spam. An guten Tagen trudeln bei mir Tausende(!) solcher "bounces" ein, in denen die Leute mir mitteilen, daß sie nicht mehr existieren, daß sie meine Mail nicht annehhmen, weil sie wie Spam aussieht, daß sie in Urlaub sind oder sonstwas...

Dennoch kann es Gründe geben, Mails an unbekannte Adressen abzufangen und wenn es nur aus Neugierde ist. Auf jeden Fall lege ich die Mails in einem eigenen User-Account ab. Dort stören Sie meinen normalen Mailverkehr nicht, ich kann Sie abrufen, wenn es mich interessiert und ich kann sie vor allem im Block löschen, wenn ich sie nicht mehr haben will.

Ich erzeuge einen Spam-Account mit 

  adduser spam

Der erste Gedanke war, die Datei ''/etc/exim4/config.d/routers/400_exim4-config_system_aliases'' durch setzen eines "*" hinter "lsearch" anzupassen. Dann nimmt der Alias-Router einen "*"-Eintrag in ''/etc/aliases'' als Default-Eintrag. Dabei ergibt sich allerdings das Problem, daß so alles, was nicht in aliases steht - und damit auch alle normalen User - umgeleitet wird. Man könnte natürlich die User hier einzeln eintragen, würde dann aber Probleme mit extended  Adressen bekommen. Kurzum - der Weg ist der falsche.

Richtiger ist, später im Routing-Ablauf einzusetzen. Dafür brauchen wir einen ganz eigenen Router, der dann aufgerufen wird, wenn alle anderen Zustellungen versagt haben. Also habe ich folgenden Router geschrieben:

  ### router/950_exim4-config_default_user
  ########################################
  
  # erstellt von Thomas Bayen
  # Weiterleitung von Mails, die bisher nicht lokal
  # zugestellt werden konnten, an den User "defaultuser",
  # der dann in "/etc/aliases" einem wirklichen Benutzer
  # zugeordnet werden kann.
  
  default_user:
    debug_print = "R: default_user for $local_part@$domain"
    driver = redirect
    domains = +local_domains
    local_parts = ! root
    data = defaultuser

Dazu setze ich noch einen Eintrag in ''/etc/aliases'':

  defaultuser: spam



=== globale Kopien ===









'''Links:'''

* http://www.exim.org/eximwiki/HACKS/HACKS?highlight=%28copy%29 - Exim-Hacks zum Thema lokale Kopien
* http://www.exim.org/eximwiki/FAQ/Miscellaneous/Q5033?highlight=%28copy%29 - Exim-FAQ zum Thema lokale Kopien


== Abholung (fetchmail) ==

Das Abholen von Mails geschieht nicht durch Exim. Dafür ist dieser Abschnitt gedacht:

=== Abholung von Mails ===



== Nachbearbeitung beim User (procmail) ==

Dieser Abschnitt widmet sich den Einstellungen, die jeder User für sich treffen kann bzw. muss.


=== automatische Sortierung ===


=== Kopien per User ===


----
Das meiste auf dieser Seite ist von ThomasBayen geschrieben worden, der bei Rückfragen (am besten auf die LugMailingListe) gerne antwortet.