original in de Stefan Blechschmidt
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.
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.
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.
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.
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.
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.
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.
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.
�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
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.
Vor dem Testen sollte zuerst der Superserver neu gestartet werden.
Ein /etc/init.d/inetd restart d�rfte reichen.
Nun kannst du mit
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 :-).