Wenn ein Email ankommt, wird vor allem entschieden, ob es für eine lokale oder eine andere Adresse bestimmt ist. Je nachdem wird es an einen director oder einen router weitergereicht. Dieser entscheidet über das Zustellungsverfahren, d.h. er bestimmt den transport.
Die Konfigurationsdatei für exim4 ist /etc/exim4/exim4.conf. Der empfohlene Weg, die Konfiguration zu verwalten ist aber jetzt der über das Verzeichnis /etc/exim4/conf.d/, in welchem sich pro Konfigurationsabschnitt ein Unterverzeichnis mit Dateien für die jeweiligen Einstellungen befindet. Daraus wird automatisch eine Konfigurationsdatei erstellt, welche sich dann in /var/lib/exim4/config.autogenerated befindet.
Exim bietet mehrere Kommandozeilen-Optionen zum Testen an.
-d
debugging-Information wird nach std-err
ausgegeben. (Mit der -d
-Option können nicht-privilegierte (also
normale) Benutzer keine E-mails versenden, da es wegen Aufgabe der
root-privileges zu Berechtigungsmangel kommt, der verhindert, daß
Nachrichten „gespoolt“ werden können.)
Stderr-Nachrichten können am Bildschirm erscheinen oder
umgeleitet werden: siehe erste Zeile im Beispiel, der Zusatz nach
dem #-Zeichen (Kommentarzeichen).
~$ /usr/sbin/sendmail -d adressat@domain.org # 2> log.datei Subject: Test jetzt kommt der eigentliche Text... Der alleinstehende Punkt auf der naechsten Zeile schließt die Nachricht ab: .
-bP
Ausgabe aller Konfigurationseinstellungen.
-C file
gibt die Konfigurationsdatei an
-bp...
Listet den Inhalt aller Nachrichten in der mail-queue.
-M xxx
message id (Nachricht mit Nummer) xxx wird versucht,
zuzustellen, unabhängig von allen anderen Einstellungen...
Arbeiten auf einem System verschiedene Benutzer mit Email-Adressen bei verschiedenen Email-Providern, müssen die Emails auch den entsprechenden Servern zur Weiterleitung zugeschickt werden.
Das erreicht man mit Routern, die nach einem definierbaren Verfahren Emails weiterleiten. Dabei können sie nämlich z.B. nicht nur die Empfängeradresse auswerten, sondern auch z.B. die Absenderadresse, was in diesem Falle wichtiger ist. Solche Router können in der /etc/exim/exim.conf bspw. so aussehen (entscheidend für das Beispiel ist der Treiber „manualroute“, welcher erst ab exim4 existiert):
###################################################################### # ROUTERS CONFIGURATION # # Entscheidet die Behandlung nichtlokaler Adressen # ###################################################################### # REIHENFOLGE IST WICHTIG # # Nicht-lokale Adressen werden weitergereicht, bis sie passen # ###################################################################### # Remote addresses are those with a domain that does not match any # item in the "local_domains" setting above. # Manually defined routes: smart_topixnet: driver = manualroute transport = remote_smtp_topixnet route_list = !+local_domains mail.topix.net senders = *@topix.net smart_voppixde: driver = manualroute transport = remote_smtp_voppixde route_list = !+local_domains mail.voppix.de senders = robert@voppix.de end
Ein Test für diese Konfiguration:
~# sendmail -d -C /etc/exim/exim.conf -f robert@voppix.de \ voppmann@surfeu.de Text:Test . ~#
Ausführliche Ausgaben von der Verarbeitung dieses Versuchs werden
wegen der Option -d
direkt im Terminal ausgegeben, eine
„Zusammenfassung“ enthält das Hauptprotokoll
/var/log/exim4/mainlog
Das Routing schien geklappt zu haben, aber dafür erhielt ich die Nachricht "relaying denied" vom smarthost.
Probieren wir mal, ob das an der pop-vor-smtp-Regel liegt:
fetchmail -c -p pop3 -u robert mail.voppix.de
(-c
heißt check,
d.h. Emails werden nicht angefaßt, sondern nur gezählt). Das nun
folgende mail wird wieder abgelehnt, also muß wohl doch eine andere
Autentifikation zur Anwendung kommen.
Die vom Server unterstützten Autentifizierungsmethoden können mit telnet und dem EHLO-Kommando in Erfahrung gebracht werden:
~$ telnet mail.voppix.de 25 Trying 62.241.50.15... Connected to mail.voppix.de. Escape character is '^]'. 220 a15.webplus24.de ESMTP Sendmail 8.12.10/8.11.6; Tue, 21 Oct 2003 08:49:32 +0200 EHLO mail.voppix.de 250-a15.webplus24.de Hello brln-d9ba0327.pool.mediaWays.net [217.186.3.39], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 110000000 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN DIGEST-MD5 250-DELIVERBY 250 HELP
Die dritte Zeile von unten gibt die Autentifizierungsmethoden an: LOGIN, PLAIN, DIGEST-MD5.
Die Autentifizierung muß in der Konfigurationsdatei im Abschnitt
AUTHENTICATION CONFIGURATION manuell aktiviert werden.
(In meiner Konfigurationsdatei fehlte überdies der Eintrag
begin authenticators
am Beginn dieses Abschnitts).
Hier habe ich also folgenden Abschnitt eingefügt:
# robert added authentication: login: driver = plaintext public_name = LOGIN client_send = ": Benutzer : passwort" # der Doppelpunkt bedeutet 'auf Antwort warten', d.h. gesendet wird # - erst das 'AUTH'-Kommando ohne Zusatzinformation, # - dann der Benutzername und # - dann das Passwort
Damit die Werte für Benutzer und Passwort in Abhängigkeit vom Mailserver nachgeschlagen werden können, wird für jeden Mailserver der Benutzername und das Passwort in der Datei passwd.client registriert.
# Datei /etc/exim/passwd.client # Format: Mailserver:Benutzername:Passwort mail.voppix.de:Benutzer:Passwort
Die entsprechende Benutzer:Passwort-Kombination wird mittels string-expansion herausgefunden. Das expansion item heißt lookup, der Suchmethode (search type) heißt lsearch und so sieht nun der Autentifikationsabschnitt aus:
# robert added authentication: login: driver = plaintext public_name = LOGIN client_send = ${lookup {$host} lsearch {/etc/exim/passwd.client} {$value}} # $host ist das Suchkriterium (der aktuelle Partner), # lsearch - die Suchmethode, # {/etc/exim/mailservers} - die Datei # {$value} - das Ergebnis der Suche
Ob ein Expansions-Mechanismus funktioniert, kann man mit der
Kommandozeilenoption -be
testen, z.B. mit
~$ exim4 -be '${lookup {mail.voppix.de} lsearch {/etc/exim/passwd.client}{$value}}'
Wenn alles klappt, sollte exim hier mit der Ausgabe „Benutzername:Passwort“ antworten (oder was auch immer in der angegeben Datei hinter „mail.voppix.de:“ steht).
Die Standard Config-Datei schlägt allerdings folgendes vor:
client_send=${if !eq{$tls_cipher}{}{}fail}\ : ${extract{1}{::}{${lookup{$host}lsearch*{\ /etc/exim4/passwd.client}{$value}fail}}}\ : ${extract{2}{::}{${lookup{$host}lsearch*{\ /etc/exim4/passwd.client}{$value}fail}}}
was zwar bei mir schon beim ersten if scheitert, aber sinnvoll ist. Denn hiermit wird das Vorliegen einer sicheren Verbindung geprüft, als Voraussetzung dafür, daß Benutzername und Passwort im Klartext über das Netz geschickt werden können.
Der verschlüsselte Übertragungsmodus wird von exim automatisch versucht (sofern exim dies beim Kompilieren nicht abgewählt wurde). Exim besteht aber nicht auf TLS, wenn der entsprechende Mailserver nicht in der Konfigurations dafür gekennzeichnet wurde. Wenn darauf beharrt werden soll, dann muß dies in der Konfiguration angegeben werden (Optionen in den entsprechenden Transport-Abschnitten):
hosts_require_tls = mailstore.fernuni-hagen.de
Ebenso könnte der Versuch einer verschlüsselten Verbindung auch vermieden werden mit:
hosts_avoid_tls = mail.ohneverschl.de
Spezifikation-36; TLS heißt Transport Layer Security und ist ein Synonym für SSL – Secure Sockets Layer. Wenn eine SMTP-Verbindung hergestellt ist, dann wird mittels des Kommandos STARTTLS auf verschlüsselte Kommunikation umgestellt.