Automail für fli4l

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

UNIX Basics

AuthorImage:[Here we need a little image from you]

Stefan Blechschmidt

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in de Stefan Blechschmidt 

AboutTheAuthor:[A small biography about the author]

Als gelernter Elektriker hat man mich 1990 vor einen CAD Arbeitsplatz gesetzt, um eine Schaltanlage zu planen. Anscheinend habe ich mich damals mit einem noch unbekannten Virus infiziert, und das ist gut so.

Abstract:[Here you write a little summary]

Wer verwendet ihn nicht den Ein-Diskettenrouter von http://www.fli4l.de/. Sicher kennt auch jeder das Problem das entsteht, wenn man den Router als dial-on-demand Router in einem vorhandenen Netzwerkverbund mit internem Mailserver verwendet. Wenn der Router eine Verbindung aufbaut, sollte auch der Mailserver davon erfahren, um seine Mails zu versenden und abzuholen.
Dieser Artikel soll eine Möglichkeit beschreiben, wie man dieses Problem lösen kann.

ArticleIllustration:[One image that will end up at the top of the article]

Automail mit fli4l

ArticleBody:[The main part of the article]

Kurze Beschreibung der Umgebung

Das Titelbild zeigt eine schematische Darstellung des Netzwerks um das es in diesem Artikel geht. WS1-3 stellen Workstationen dar, die eine Verbindung über den Router ins WWW haben. Der Service-Host ist für das Handling der Mails intern und extern zuständig. Das Versenden wird vom MTA erledigt. Abgeholt wird mit fetchmail und anschließend mit procmail sortiert. Die Mailboxen auf dem Service-Host werden über POP3 bzw. IMAP den Workstationen zur Verfügung gestellt.

Das Problem

Baut einer der Workstationen eine Verbindung ins WWW auf, kriegt in der Regel der Service-Host nichts davon mit. Man könnte zwar über einen cronjob den Service-Host anweisen, Mails zu festgelegten Zeiten zu versenden bzw. abzuholen. Eleganter wäre es aber, diesen bei einer Einwahl ins Netz zu informieren, so dass er seine Arbeiten erledigen kann.

Da der Router als Diskettenrouter betrieben wird, scheidet ein aufwendiges Script oder Programm zur Steuerung des Mailservers über den Router aus.

Die Überlegung

Um den Service-Host über die Einwahl zu informieren, müsste man lediglich eine Anfrage machen, der einen Prozess startet, um die Mails versenden bzw. abholen zu können.

Der Lösungsvorschlag

Für fli4l steht das Programm wget zur Verfügung, das mit seiner Größe von ca. 100 kB leicht noch auf die Diskette passt. Man kann mit wget, bei einer Einwahl zugleich eine Verbindung zu dem Service-Host aufbauen. Hierzu wird auf dem Service-Host mit inetd ein Port geöffnet, der auf die Verbindung vom Router wartet. Bei einer Verbindung wird ein Script gestartet, das über weitere Prozesse die eMails versendet und abgeholt.

Das Script wurde in Perl erstellt, du kannst es dir hier (mailstart.pl.gz) downloaden.

Anpassung Router

Bei einer Einwahl wird die Datei .../opt/etc/ppp/ip-up abgearbeitet. Hier ist der richtige Platz, um eine Verbindung zu unserem Service-Host aufzubauen. Mit dem Hinzufügen der Zeile:

 wget -t 1 --spider  MAILSERVER:PORT/xyz &> /dev/null

ist das auch schon erledigt.

Kommando Erklärung wget

* Option -t 1
   Mit dieser Option wird ein Versuch unternommen, das Programm mailstart auf
   dem Mailserver zu erreichen.

* Option --spider
   Mit dieser Option wird die angeforderte Seite nicht heruntergeladen.
   Es wird lediglich überprüft, ob die Seite vorhanden ist.

* MAILSERVER:PORT/xyz
   Hier wird der Mailserver und der Port angegeben, über den das Programm
   angesprochen wird. Die Angabe xyz bezeichnet die Datei, die geholt
   werden soll. Diese Angabe ist eigentlich egal, wird sie weggelassen
   holt wget standardmäßig die Datei index.html.

* /dev/null
   Die Ausgaben von wget werden ins Nirvana befördert.
   Man kann diese Angabe auch weggelassen,
   um zu sehen was wget an Daten empfängt.

Anpassung Mailserver

Auf dem Mailserver wird über dem Superserver inetd das Programm mailstart [1] gestartet. Hierzu müssen wir die beiden Dateien /etc/services und /etc/inetd.conf bearbeiten.

/etc/services

In dieser Datei wird der Port bestimmt, auf den wget zugreifen soll. Mit der Zeile:

mailstart  4000/tcp # Mailstart

ist das auch schon erledigt.

/etc/inetd.conf

In dieser Datei wird das Programm angegeben, das gestartet werden soll. Hierbei überwacht inetd die Ausführung und protokolliert dies in /var/log/syslog mit.

Mit der Zeile:

mailstart  stream  tcp  nowait  root  /usr/sbin/tcpd  /root/bin/mailstart

ist dieser Schritt auch erledigt. Hierbei muss der erste Name derselbe sein wie er in der Datei /etc/services notiert wurde.

Anpassungen mailstart.pl

Über Variable kann das Programm an den jeweiligen Server angepasst werden.

$protokoll

Mit der Variable $protokoll kann bestimmt werden, ob die Aufrufe mitgeschrieben werden sollen. Wird die Variable auf 1 gesetzt, werden die Aufrufe in der Datei /var/log/mailstart.log mitgeschrieben. Ist die Variable auf 0 gesetzt, wird kein Protokoll erstellt.

Voreinstellung: 1   Protokoll erstellen

$protokoll_ziel

Mit dieser Variable kann man das Ziel des Protokolls bestimmen.

Voreinstellung: /var/log/mailstart.log

$mailholen

Hier wird das Programm eingetragen, mit dem die eMails abgeholt werden. Der Benutzer, der das Programm startet, ist root bzw. der, der unter /etc/inetd.conf eingetragen wurde. Will man einen anderen Benutzer verwenden, so ist der Befehl mit einem su USER -c \"BEFEHL PARAMETER\" zu starten. Wenn der Befehl aus mehreren Wörtern besteht, so muss man diese in Anführungszeichen setzen. Diese Anführungszeichen sind mit einem \ zu schützen.

Voreinstellung (eine Zeile):
su postmaster -c \"fetchmail -t 40 -a -L /var/log/fetchmail/fetchmail.log -f /home/postmaster/.fetchmailrc\"

$mailsenden

Hier wird das Programm eingetragen, mit dem die eMails versendet werden. Der Benutzer der das Programm startet, ist root bzw. der, der unter /etc/inetd.conf eingetragen wurde. Will man einen anderen Benutzer verwenden, so ist der Befehl mit einem su USER -c \"BEFEHL PARAMETER\" zu starten. Wenn der Befehl aus mehreren Wörtern besteht, so muss man diese in Anführungszeichen setzten. Diese Anführungszeichen sind mit einem \ zu schützen.

Voreinstellung: sendmail -q

Übrigens, im Programm ist eine kleine POD Dokumentation eingearbeitet, die eine Beschreibung in Kurzfassung ausgibt. Du kommst zu dieser Beschreibung mit perdoc mailstart.

Test

Vor dem Testen sollte zuerst der Superserver neu gestartet werden. Ein /etc/init.d/inetd restart dürfte reichen. Nun kannst du mit telnet localhost mailstart testen, ob der Server antwortet. Du solltest nun eine Ausgabe ähnlich dieser bekommen.

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HTTP/1.1 220 OK
Date: Sun, 20 Jul 2003 10:45:46 GMT
Server: mailstart/perl (sbsbavaria)
Last-Modified: Sun, 20 Jul 2003 10:45:46 GMT
Content-Type: text/txt
Content-Length: 11

1234567890
Connection closed by foreign host.

Das war's auch schon, ich hoffe du kommst mit dieser Beschreibung zu recht. Wenn nicht, haben wir ein Problem.
- Du, weil es nicht funktioniert.
- Ich, weil es mir nicht gelungen ist, die Beschreibung ordentlich zu erstellen :-).

Download

Links / Referenzen