Jo's Linux Firewall Howto: E-Mail

Sie haben Post: eMail

Ein Heim-Netz ohne eMail ist ziemlich langweilig und einsam. Also muß der interne und externe Zugriff auf Mails installiert werden.  Auf die Mailprogramme, also die Programme, mit denen man seine Mail eingibt bzw. liest, werde ich nicht besonders eingehen, daß ist im wesentlichen Geschmacksache. Die hier gezeigte Konfiguration erlaubt das Bearbeiten der Mails mit Netscape unter X und unter Windows, aber alle anderen Mailprogramme, die IMAP unterstützen, sollten genausogut funktionieren. (Ja, sogar für outlook (schüttel) gebe ich inzwischen Tips - es wird ja doch immer wieder gefragt. ;-)

Dieses Beispiel geht davon aus, das bei einem Provider über eine Wählverbindung auf ein Postfach zugegriffen werden kann. Und zwar, wie meistens, zum Lesen der Post mittels POP und zum Senden der Post mittels SMTP.

Hierbei wird davon ausgegangen, daß bei Zugriffen nach extern die Verbindung zum Provider automatisch hergestellt wird (siehe ISDN oder dsl). Außerdem beziehen sich alle Details - wie immer - auf die Suse-Distribution.

Inhaltsübersicht

– — – — – — – — –
 

eMail unter Linux

Ein paar einführende Worte: eMail ist unter Unix ein Standard Dienst für jeden Benutzer. Jeder Benutzer (User) einer Unix-Maschine hat ein eigenes Home-Verzeichnis und ein eigenes Postfach. Dieses ist in seinem Home-Verzeichnis untergebracht. Hier können Mitteilungen des System Administrators, automatische erzeugte Meldungen oder auch eMail von anderen Benutzern auflaufen.

Der Benutzer verwendet ein Mailprogramm (pine, netscape, winpmail oder gar outlook) um seine Mail zu schreiben und zu versenden. Dieses übergibt die fertig formatierte Mail an den zuständigen Mailserver. (Bei Unix-Rechnern an Port 25 der eigenen Maschine)

Die Weiterleitung der eMail übernimmt ein Programm namens sendmail. (Oder inzwischen verbesserte Versionen wie z. B. smail) Der Sendmail-Dämon kommuniziert dabei mit anderen Sendmail-Dämonen auf anderen Rechner mittels SMTP (Simple Mail Transport Protocol = Einfaches Mail Übertragungsprotokoll). SMTP ist ein Protokoll, das entwickelt wurde, um Mail zwischen Servern (mit festen IP-Adressen) zu übertragen.

Um Mail über 1 Wählverbindung abzuholen, wurde POP (Post Office Protocol = Postschalter Protokoll) entwickelt. Diese indetifiziert den Anfragenden über Benutzername und Paßwort. Danach kann er seine Mail abholen.

Um sicherzustellen, daß auch beim Versenden von Mail, was auch über Wählverbindungen mittels SMTP erfolgt, niemand falsche Absenderangaben verwendet oder einen Mailserver benutzt, für den er keine Berechtigung hat, werden verschiede Mechanismen eingesetzt.

Wenn man 1 lokales Netz wie in diesem HowTo beschrieben hat, hat man 2 Möglichkeiten für die Mail-bearbeitung:

 

Benötigte Programme

Wie unter Unix üblich - und am Ende ist Linux ja nichts anderes als ein Unix - braucht man auch für so "einfache" Dinge wie Mail ein dutzend Programme. Für jede Aufgabe eines. Dafür funktioniert es, im Gegensatz zu megabytedicken Windowslösungen, stabil und zuverlässig.

Na gut, das Dutzend ist noch nicht ganz voll.

Im Normalfall werden diese Programme bei einer Standardinstallation automatisch installiert, sollten also bereits verfügbar sein. Wenn nicht, Yast anwerfen, ...

 

sendmail: Senden der Mail zum Provider

Sendmail läuft als sog. Dämon im Hintergrund. Normalerweise wird es automatisch beim Systemstart aktiviert und liest seine Einstellungen aus einer Konfigurationsdatei. Dies ist üblicherweise /etc/sendmail.cf. Da diese Datei aber recht komplex ist und viele Einstellungen ermöglicht, die kaum jemand benötigt, gibt es ein paar Variablen in einer einfacheren Konfigurationsdatei, aus der dann ein Skript die sendmail.cf zusammenbaut. Dies ist je nach Version der SuSE-Distribution /etc/rc.config oder /etc/rc.config.d/sendmail.rc.config. Man kann aber die entsprechenden Variablen auch mit Yast einstellen (Administraion des Systems -> Konfigurationsdatei verändern).

Diverse Einträge ermöglichen es, sendmail so einzustellen, daß es auf Systemen mit einerm Modem-Verbindung möglichst selten und schon gar nicht automatisch bei jeder Mail die Leitung aufmacht. Dies halte ich - zumindest bei isdn oder dsl inzwischen für überflüssig insbesondere bei den heutigen Preisen. Aber das kann natürlich jeder halten wie er oder sie will.

FROM_HEADER="mail@JWiesemann.de"
Dieser Eintrag betrifft nur wenige automatisch erstellte Mails, da die meisten Mailprogramme die Absenderadresse mit angeben. (Kann man - glaube ich - auch leer bleiben)
SENDMAIL_TYPE="yes"
Wenn hier "yes" steht, erzeugen die SuSE Skripte die eigentliche Konfigurationsdatei für Sendmail automatisch. Wenn man dies selbst machen will (wofür man deutlich mehr Ahnung braucht, als ich sie hier zu vermitteln gedenke), dann muß man hier "no" eintragen, damit diese Datei nicht überschrieben wird.
SENDMAIL_SMARTHOST="mailto.btx.dtag.de"
Hier wird der SMTP-Server des Providers eingetragen. Dies bewirkt, das sendmail die Mails nicht direkt an den endgültigen Empfänger sendet, sondern nur zum Provider, der sich dann um den Rest kümmert. Ist dieser Eintrag leer, wird die Mail immer direkt ausgeliefert, was den Nachteil hat, daß evtl. mehrere Versuche nötigt sind, wenn die Verbindung zum Zielsystem nicht auf Anhieb funktioniert. Außerdem prüfen einige Server, ob der Rechner, dessen sendmail gerade mit ihnen Verbindung aufnehmen will, auch einen gültige DNS-Eintrag hat. Das ist bei Wählverbindungen üblicherweise nicht der Fall.
SENDMAIL_LOCALHOST="localhost"
Hier können weitere Domain-Namen eingetragen werden, die Sendmail als lokal, also zu diesem System gehörig betrachtet. Das wird bei dieser Konfiguration nicht benötigt.
SENDMAIL_RELAY=""
Wenn hier ein Server eigetragen ist, liefert sendmail keine Mail an lokale Benutzer aus, sondern leitet alles an diesen Server weiter, der für das ausliefern zuständig ist.
SENDMAIL_ARGS="-bd -q30m -om"
Die Parameter für den Aufruf von Sendmail. -bd bedeutet, daß sendmail als Dämon in den Hintergrund geladen wird. -q30m bedeutet, daß sendmail alle 30 Minuten prüfen soll, ob noch Mails in der Queue (Warteschlange) stehen und wenn ja, diese versendet. Dabei wird jede Mail sofort bearbeitet, wenn sie in die  Queue gestellt wird und dann, wenn das versenden beim ersten Mal nicht funktioniert hat, alle 30 Minuten wieder. -om bewirkt, daß die MeToo-Options gesetzt wird, daß heist, wenn der Absender auch in der Empfängerliste steht, bekommt er auch 1 Mail.
Wer das automatische Einwählen beim Versenden von Mail verhindern will, der setzt weiter unter sendmail auf "expensive" und erlaubt hier nicht das automatische Bearbeiten der Mail-Queue: "-bd -om". Dann muß, z. B. aus einem cron-Job (automatisch zeitgesteuert gestartete Skripte) oder bei jedem Herstellen der Verbindung sendmail -q aufgerufen werden, um die Mail zu versenden.
SENDMAIL_EXPENSIVE="no"
Hiermit wird bewirkt, das sendmail den Inhalt der Queue nicht automatisch bearbeitet, sondern nur auf Aufforderung.
SENDMAIL_NOCANONIFY="no"
Normalerweise versucht sendmail, die Namen in einer eMAil-Adresse aufzulösen, damit der Mail-Versand schneller geht. Bei expensive-Systemen kann man dies ausschalten (mit "yes"), damit nicht bei jeder Mail der Nameserver angesprochen wird, der vermutlich wiederum die Leitung öffnet - was ja gerade verhindert werden sollte.
SENDMAIL_GENERICS_DOMAIN="klaus.home"
...
SENDMAIL_NODNS="no"
Hier kann eingestellt werden, daß sendmail überhaupt keine Nameserveranfragen absetzt. Dann müssen als Adressen, die sendmail benötigen kann, in /etc/hosts eingetragen sein.
SENDMAIL_DIALUP="no"
...

Neue Mail läuft in /var/spool auf. Abgehende Mail wird in /var/mqueue zwischengelagert. Im Normalfall muß man an diese Verzeichnisse nicht dran, das erledigen der sendmail- bzw. imap-Dämon. Aber man kann hier leicht prüfen, ob alles im Lot ist.

Doku:


– — – — – — – — –
 

fetchmail: Abholen der Mail vom Provider

Zum Lesen der Mails muß bei den meisten Providern POP eingesetzt werden. Da es sich um eine Wählverbindung zum Provider handelt, kann dieser die Mail auch nicht aktiv zustellen, man muß also (regelmäßig) nachsehen, ob Mail vorhanden ist und diese holen. Dazu dient das Programm fetchmail.

Das Programm fetchmail liest normalerweise alle Einstellungen aus einer Datei. Dies ist .fetchmailrc im Home-Verzeichnis des jeweiligen Users. Wenn fetchmail automatisch gestartet wird (über cron oder ip-up), dann ist der User root. Daher sollten die Einstellungen in /root/.fetchmailrc stehen. Hier können auch direkt mehrere Postfächer ausgegelesen werden. Ein typischer Eintrag für das Lesen der Post von t-online sieht so aus:

poll pop.btx.dtag.de protocol pop3 username hansi_mueller password . is hansi

Hierbei ist "pop.btx.dtag.de" die URL des Mailservers von t-online "hansi_mueller" der Mail-(Benutzer-)name bei t-online und "." das Paßwort für diesen eMail Zugang. Übrigens: bei t-online ist das Paßwort immer ".", da man seine Post von t-online nur abholen kann, wenn man den PPP-Zugang direkt bei t-online verwendet. Dann wird die Zugangskennung bereits beim Aufbau der Verbindung geprüft und 1 weiteres Paßwort ist nicht erforderlich. "Hansi" ist dann der User-Name, den der Benutzer auf dem lokalen Rechner hat, in dessen Postfach die abgeholte Post also gesteckt werden soll.

Um diese Eintragung zu testen wird einfach am Terminal fetchmail -v eingegeben. Dann sollte die Verbingung zum Internet aufgebaut werden (wenn sie nicht gerade schon steht) und das Postfach abgefragt werden. Durch die Option -v wird fetchmail dazu veranlaßt, sich sehr gespächig (engl. verbose) zu verhalten, also möglichst viele Informationen auszugeben. Damit sollte es leicht möglich sein, eventuellen Problemen auf die Spur zu kommen. (Tip: man muß natürlich als der User eingelogged sein, dessen .fetchmailrc man testen will.)

Ach ja, bevor ich vergesse es zu erwähnen: fetchmail benötigt zwingend ein laufendes sendmail. Es hat nämlich keinen Zugriff auf die jeweiligen Mailverzeichnisse der Benutzer, sondern versendet die abgeholte Mail einfach lokal an den entsprechenden Benutzer.

Doku:


– — – — – — – — –
 

IMAP: Lesen und Schreiben der Mail aus dem lokalen Netz

Wenn die Mail von mehreren Rechnern aus dem lokalen Netz bearbeitet werden soll, bietet sich als Protokoll IMAP (Internet Mail Access Protocol = Internet Mail-Zugriffsprotokoll) an. Dieses Protokoll läßt die Ordner mit der Mail auf dem Server, so daß alle Mails immer zentral an der selben Stelle gespeichert werden. Das IMAP-Protokoll gilt als sehr unsicher, da unverschlüsselt gesendet und empfangen wird. Da der Zugriff aber nur von Rechnern im lokalen Netz  erfolgen kann und diese im Fall eines Heim-Netzes als vertrauenswürdig einzustufen sind, sollte das kein Problem sein. Sollten die Rechner des Heim-Netzes nicht vertrauenswürdig sein, liegt eher 1 persönliches Problem vor, welches nicht direkt durch Linux gelöst werden kann.

Damit der Mailzugriff auf die Postfächer mittels IMAP ablaufen kann, muß in /etc/inetd.conf dieser Dienst durch einkommentieren (wenn sie schon da ist) bzw. eintragen dieser Zeile aktiviert werden:

imap2 stream tcp nowait root /usr/sbin/tcpd imapd

 

POP3: Lesen der Mail aus dem lokalen Netz

Naja, es gibt auch arme Menschen die müssen Outlook oder sowas einsetzen. Und da geht bisher kein IMAP. Dann besteht immernoch die Möglichkeit, die Mail lokal mit POP3 abzuholen. Was allerdings den Nachteil hat, das die Mails wieder nur lokal auf 1 Rechner gespeichert sind. Aber das ist ja nicht der einzige Nachteil von Outlook (Vgl. "I LOVE YOU"-Wurm).

Auch diesen Meschen soll geholfen werden. Im Prinzip geht das ebenso, wie bei IMAP, nur das jetzt POP3 in /etc/inetd.conf einkommentiert bzw. eingetragen wird:

pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s
– — – — – — – — –
 

SMTP: Schreiben der Mail aus dem lokalen Netz

Damit andere Rechner aus dem lokalen Netz per SMTP auf den Gateyway zugreifen können, muß dieser Zugriff in /etc/mail/access erlaubt werden:

#erlaube Sendezugriffe aus 192.168.0.*
192.168.0       RELAY

Anschließend muß die zugehörige Datenbank (/etc/mail/access.db) aktualisiert werden:

root@gateway:/etc/mail> makemap hash /etc/mail/access.db < /etc/mail/access

Doku:   /usr/share/sendmail/README

– — – — – — – — –
 

Test der Klienten

Nunja, wenn alles klappt, sendet man einfach eine eMail zu einer existierenden Domain mit einer ungültigen eMail-Adresse (z. B. bloedmann@ibm.de)! Dann erhält man nämlich postwendend eine Antwortmail, das es den entsprechenden Benuttzer dort nicht gibt. Wenn diese Mail ankommt, weiß man, daß alles funktioniert hat. Aber was wenn nicht?

1. Schritt: Man testet das Abholen und Senden von Mail auf dem Gateway selbst. Hier helfen einem die log-Dateien weiter: /var/log/messages und /var/log/mail. Und natürlich die Beschreibung weiter oben zu dem jeweiligen Dienst.

2. Schritt: Man testet, ob der Zugriff auf die entsprechenden Dienste von den Klienten aus dem lokalen Netz möglich ist. Dazu startet man jeweils ein telnet (!) zum Gateway auf den zu testenden Port. Alle Dienste übertragen nämlich Klartext-Meldungen. Also sollte man auf dem jeweiligen Port (smpt = 25, pop3 = 110, imap = 143) eine Begrüßungsmeldung des jeweiligen Dienstes (meist den Programmnamen und die Version) erhalten. Wenn nicht, ist evtl. der Dienst für diesen Klienten nicht zugelassen, oder die Paketfilter lassen die Anfrage nicht durch.

3. Schritt: Man konfiguriert das jeweilige Mail Programm und testet ob diese 1 Verbindung aufbauen kann. Hier helfen ggf. wieder die log-Dateien: /var/log/messages und /var/log/mail.

– — – — – — – — –
 

weitere Dokumentation

– — – — – — – — –

Weiter mit: Der Turbo fürs Web: ein Proxy-Cache.

Urheber © Dr. Joachim Wiesemann

Letzte Aktualisierung: 28.5.2006