schnörkellos und schnell: exim

01.07.2001
Das Aufsetzen eines Mail-Servers wie Sendmail raubt dem Anwender mitunter eine Menge Zeit. Wenn Sie jedoch Ihre Energie lieber in das Verfassen von Mails als in die Konfiguration des Servers stecken, dann könnte der MTA exim das Programm Ihrer Wahl werden.

Installation mit Fingerspitzengefühl

Wer von exim spricht, denkt in erster Line an die Distribution Debian, die exim als Standard-MTA bereitstellt. Durch das Paket eximconfig ist dort die Konfiguration schnell vollbracht. Aber auch als Benutzer einer anderen Distribution wie z. B. SuSE können Sie exim verwenden, wenn Sie für die exim-Installation eines rpm-Paketes oder tar.gz-Archivs etwas Fingerspitzengefühl aufbringen, was an dieser Stelle nicht verschwiegen werden soll. Eine komplette Installationsanweisung für die unterschiedlichen Distributionen und Problemstellungen würde leider den Rahmen dieses Artikel sprengen, eine ausgezeichnete Anleitung (nicht nur) zur Installation finden Sie jedoch auf der Webseite von Rene Sasse: http://www.world-email.cx.

Vor der Installation von exim vergewissern Sie sich, dass nicht schon ein MTA wie sendmail, postfix, qmail oder smail auf Ihrem Rechner arbeitet, indem Sie das Kommando telnet localhost smtp in die Shell eingeben und sich beispielsweise mit dem Befehl rpm -q -i sendmail darüber informieren, ob das entsprechende Paket installiert ist. Sollte bereits sendmail oder ein anderer Mailserver auf Ihrem Rechner laufen, müssen Sie ihn als root mit dem Befehl rpm -e --nodeps oder einem Konfigurationstool wie Yast deinstallieren. Mit der Option --nodeps ignoriert der Paketmanager alle Pakete, die ihre Arbeit von dem zu löschenden Paket abhängig machen, in diesem Fall also z. B. der Cron-Daemon (näheres zu Cron in Heft 12/2000, S. 80) oder der Mailreader mutt (weiteres zu mutt in Heft 05/2001, S. 86). Falls Ihnen das Entfernen von sendmail noch zu heikel erscheint, finden Sie eine detaillierte Einführung in dieses Thema in unserem Postfix-Artikel in Heft 10/2000, S. 42. Bevor Sie nun sendmail recyceln, stellen Sie als root mit dem Kommando type sendmail fest, auf welchem Pfad sendmail zu finden ist. Sie werden diese Information im weiteren Verlauf dieses Artikels noch brauchen.

Neue User für neue Aufgaben

Nachdem Sie sich von sendmail befreit haben, müssen Sie den User mail und die Gruppe mail anlegen. Ohne diesen User verweigert exim Ihnen jede Mitarbeit und die Installation kann nicht durchgeführt werden:

root@comone: # rpm -ihv exim-3.20-4.i386.rpm
 user mail does not exist - using root

Auch dazu können Sie zumeist das Konfigurationstool Ihrer Distribution benutzen, oder Sie führen die root-Kommandos groupadd und useradd aus. Zunächst fügen Sie eine neue Gruppe hinzu:

groupadd -g 15 mail

Die Option -g 15 weist der neu erstellten Gruppe mail die numerische Gruppen-Kennung (GID) 15 zu. Schauen Sie jedoch zuvor in die Datei /etc/passwd, ob ob es nicht bereits eine Gruppe mail gibt und falls nicht, welche Gruppen-ID noch frei ist. Die erste Zahl der Einträge in /etc/passwd bezeichnet die User-Kennung, die zweite die Gruppen-Kennung:

mail:x:38:15::/home/mail:/bin/bash

Dann erschaffen Sie den User mail

useradd -u 38 -g mail -d /home/mail -s /bin/bash mail

Hierbei steht -u für die einmalige numerische User-Kennung (UID), die Sie frei wählen können, die jedoch für System-Zugänge wie dem User mail kleiner als 100 sein sollte, -g für die Gruppe, der der User angehört, -d ist das Home-Verzeichnis, das eventuell neu erstellt wird, und -s die Standard-Login-Shell. Auch hier werfen Sie bitte zuvor einen Blick in die Datei /etc/passwd, welche UID unbelegt ist.

Letzte Hürden

Ein weiteres Hindernis könnte das Fehlen des Systemtools /sbin/chkconfig sein, das die symbolischen Links in /etc/rc.d bearbeitet, und das es u. a. in der Distribution SuSE 7.0 gar nicht gibt. Ein Installationsversuch wird dann mit einer Fehlermeldung abgebrochen:

* Fehler: fehlgeschlagene Paket-Abhängigkeiten:
 *         /sbin/chkconfig wird von exim-3.20-4 gebraucht

Hier hilft Ihnen ebenfalls die Option --nodeps, mit der Sie ein Paket aufspielen können, egal von welchen Paketen es sonst noch abhängig ist. In diesem Beispiel funktioniert exim trotzdem, Sie sollten jedoch sehr sparsam und vorsichtig mit der Option --nodeps umgehen, wenn Sie Ihr System administrieren.

root@comone: # rpm -ihv --nodeps exim-3.20-4.i386.rpm

Damit exim auch ohne chkconfig beim booten gestartet wird, müssen Sie im folgenden Schritt als root ein exim -bd -q30m in die Datei /sbin/init.d/boot.local (ab SuSE 7.1 /etc/init.d/boot.local) eintragen, sowie bei der möglichen Fehlermeldungen…

/sbin/init.d/rc2.d/S80exim : [ : = : unary operator expected
 Starting exim: /sbin/init.d/rc2.d/S80exim: daemon: command not
 found

…in der Datei /sbin/init.d/rc2.d/ alle Links mit dem Namen exim löschen. Ein solcher Drahtseilakt sollte allerdings die Ausnahme und nicht die Regel bei den gängigen Distributionen sein.

Bevor Sie sich nun endlich an die Konfiguration von exim machen können, müssen Sie noch zu guter Letzt einen Link von exim zu sendmail setzten, denn viele Programme kennen nur den Pfad zu sendmail und werden auf diese Weise richtig geleitet:

ln -s /usr/sbin/exim /usr/sbin/sendmail

Die Pfad von exim und sendmail können auf Ihrem Rechner von dem angeführten Beispiel abweichen. Und bestimmt erinnern Sie sich noch an das Ergebnis des Befehls type sendmail weiter oben im Text, das Sie nun verwenden können.

Nachdem Sie Ihr System neu gebootet haben, tippen Sie zur Kontrolle, ob exim gestartet ist, in die Shell ps -ax |grep exim. Als Ergebnis sollte Sie diese oder eine ähnliche Ausgabe erhalten:

95 ? S 0:00 exim -bd -q30m

Sollten Ihnen bei der Kontrolle der Log-Dateien von exim im Verzeichnis /var/log/exim Fehlermeldungen auffallen, überprüfen Sie, ob Sie die smtp-Zeile der Datei /etc/inetd.conf mit einem Kommantarzeichen versehen haben, und, sollten Sie Yast benutzen, ob die SMTP-Variable und die POSTFIX-Variable auf no stehen.

Bereit zum Versenden

Die Konfigurationsdatei von exim befindet sich, je nach Distribution oder der Version von exim, auf Ihrem Rechner zumeist als /etc/exim.conf, /usr/local/etc/exim oder /etc/exim. Alle möglichen Anweisungen, mit denen Sie exim konfigurieren können, sind in der Textdatei OptionLists.txt zusammengefasst, deren Pfad Sie am besten mit locate OptionLists.txt herausfinden, und deren Inhalt Sie mit den Shell-Programmen less oder more lesen können. Sie brauchen keinen Grund zur Sorge zu haben, denn von den über 400 Befehlen müssen Sie nur einen Bruchteil nutzen.

Um nun Ihre Mails versenden zu können, starten Sie als root Ihren Lieblingseditor, öffnen exims Konfigurationsdatei und tragen im Abschnitt MAIN CONFIGURATION SETTINGS in die Zeile qualify_domain Ihren Domain-Namen ein:

qualify_domain = [IHRE.DOMAIN.DE]

Vielleicht merken Sie jetzt auf, weil Sie keine Domain besitzen. Das braucht dem Versenden Ihrer Mails und der korrekten Generierung einer Message-IDjedoch nicht im Wege zu stehen. Doch dazu später mehr. Lassen Sie einfach die qualify_domain-Zeile mit dem Zeichen # kommentiert und sehen Sie sich den Eintrag qualify_recipient an. Diese Zeile ist wichtig für die lokale Zustellung der Mails, also vom Cron-Daemon an den root oder vom root an den User. Tragen Sie in diese Zeile localhost ein:

qualify_recipient = localhost

Damit exim weiss, welche lokale Domain sein Arbeitgeber ist, müssen Sie es im mit folgendem Eintrag sagen:

local_domains = localhost:[IHR.RECHNERNAME].local

Mit der Anweisung:

queue_remote_domains = ! *.localhost

…bleiben alle von Ihnen geschrieben Mails in /var/spool/exim/input, bis Sie exim als root mit exim -qf -v den Befehl zum Versenden geben.

Wenn Sie Mails erlauben wollen, die an Ihren Rechnernamen oder Ihre IP-Adressegerichtet sind, dekommentieren Sie die folgende Zeilen und setzen Sie den Wert auf true:

local_domains_include_host = true
 local_domains_include_host_literals = true

Der nächste Eintrag, der für Sie interessant sein könnte, regelt, welche Rechner im Netzwerk auf Ihren Rechner localhost als Relay zugreifen dürfen. Für einen Einzelplatz-Rechner schreiben Sie diesen Eintrag:

host_accept_relay = localhost:[IHR.RECHNERNAME].local

Wenn Sie mehreren Rechnern den Zugriff erlauben wollen, verbinden Sie die Variable localhost mit den entsprechenden IP-Adressen:

host_accept_relay = localhost:[xxx.xx.xxx.0/8]

Nicht jeder Mensch schreibt ständig unter der selben Mail-Adresse, und damit exim keine Absendeadresse auf seine Basis-Einstellungen zurücksetzt, sollten Sie dem Programm sagen, welcher User auch andere Headerbenutzen darf:

trusted_users = root:[IHR.USERNAME]

Die Zeile smtp_verify setzen Sie besser auf false. Dieser Eintrag veranlasst exim, den Return-Path der Mail zu prüfen. Das kann für Sie nützlich sein im Kampfe gegen Spam, aber es kann auch hinderlich sein, wenn der Cron-Daemon vielleicht Probleme bekommt, Ihnen seine regelmäßigen Berichte zu schicken:

smtp_verify = false

Die Menge der Mails, die exim bis zum Versenden für Sie lagert, legen Sie mit folgendem Eintrag fest:

smtp_accept_queue_per_connection = 100

Und als letzten Eintrag, bevor wir den Transport der Mails zum SMTP-Server Ihres Providers konfigurieren, wenden wir uns den unzustellbaren Mails zu, die exim einfriert, und über die Sie gerne informiert werden möchten:

freeze_tell_mailmaster = true

Im Abschnitt TRANSPORTS CONFIGURATION springen wir gleich zu den Zeilen, die sich unter dem Kommentar # This transport is used for delivering messages over SMTP connections befinden, und dort fügen Sie die Anweisung headers_remove = "Message-ID" hinzu:

# This transport is used for delivering messages over SMTP connections.
 remote_smtp:
 driver = smtp
 headers_remove = "Message-ID"

Wenn Sie kein Besitzer eines Domain-Namens sind, dann erreichen Sie mit diesem Eintrag, dass die von Ihrem Mailprogramm erstellte Message-ID vor dem Versand herausgeschnitten wird. So kann Ihr Provider seine eigene, legale Message-ID in den Header Ihrer Mail einfügen.

Den Mail-Server Ihres Providers definieren Sie schließlich im Abschnitt ORDER DOES MATTER in der Zeile route_list:

# Send all mail to a smarthost
 smarthost:
 driver = domainlist
 transport = remote_smtp
 route_list = "* [MAILSERVER.PROVIDER.DE] bydns_a"
Abb 1. Die Rewrite Flags im Test

Der letzte Abschnitt mit dem Namen REWRITE CONFIGURATION überschreibt Ihren Rechnernamen mit der von Ihnen vorgegebenen E-Mail-Adresse, falls Sie in der Zeile qualify_domain keinen Domain-Namen angegeben haben. Sie brauchen dazu nicht erst, wie im Konfigurationsbeipiel angegeben, die Datei /etc/email-addresses zu erstellen, sondern können Ihre Angaben in der ersten Zeile über den Beispielen eintragen:

*@[IHR.RECHNERNAME].local     IHRE.MAIL@ADRESSE.DE Ffrsh

Die Buchstaben hinter Ihrer Mail-Adresse sind Kürzel für die zu überschreibenden Header (Rewrite Flags):

F überschreibt das Envelope-From-Field
 f überschreibt den From-Header
 r überschreibt den Reply-To-Header
 s überschreibt den Sender-Header
 h überschreibt alle Header
 b überschreibt den BCC-Header
 c überschreibt den CC-Header
 T überschreibt das Envelope-To-Field
 E überschreibt alle Envelope-Fields

Ob die Regeln richtig greifen, überprüfen Sie als root mit dem Kommando exim -brw [USER@IHR.RECHNERNAME.local]. In unserem Beispiel werden für alle User, die an Ihrem Rechner arbeiten, die Header mit Ihrer Mail-Adresse überschrieben. Es ist natürlich möglich, für jeden User eine eigene Mail-Adresse zu generieren, wenn Sie den Eintrag *@[IHR.RECHNERNAME].local entsprechend ändern. Allerdings können nur solche Benutzer eine Adresse außer der Reihe benutzen, die in der Zeile trusted_users eingetragen sind.

Eine Testmail auf Reisen

Auch wenn Sie Ihr Mailprogramm noch nicht auf exim hin konfiguriert haben, können Sie eine Testmail mit einem Shell-Befehl schreiben und diese an Ihre eigene Mail-Adresse senden:

echo "Der Mail-Text" | mail -s "und das Subject" IHRE.MAIL@ADRESSE.DE

Ein Druck auf die Taste [Return] befördert die Mail in den Queue, wo Sie sie mit dem Kommando mailq sehen können. Wenn Sie nun den Rechner bei Ihrem Provider einwählen, können Sie unter laufender Verbindung mit dem Befehl exim -qf -v Ihre Testmail auf Reisen schicken.

Abb 2. Mit exim -qf -v wird die Testmail auf den Weg gebracht.

Alles, was Sie jetzt noch tun müssen, ist, die Mail mit kmail, netscape oder vielleicht fetchmail von Ihrem Postfach abzuholen und Ihrem Mailprogramm für die Zusammenarbeit mit exim den letzten Schliff zu geben.

Glossar

MTA

(Mail Transport Agent): Programm, das Nachrichten zwischen den Rechnern eines Netzes weiterleitet.

Message-ID

Header-Zeile, die die Kennung einer E-Mail darstellt, und die immer aus einem Domain-Namen zusammengesetzt sein sollte.

IP-Adresse

Eine 32 Bit lange Zahlenfolge, die zur Identifizierung von einzelnen Rechnern und Netzwerken dient.

Header

Der Kopf einer Datei oder eines Nachrichtenpaketes, die z. B. Absender und Empfänger enthält.

Spam

Unverlangt erhaltene Werbe-Mails und Rundschreiben.

SMTP-Server

Simple Mail Transport Protocol. Ein Verfahren zur Übertragung von E-Mails.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

Kommentare