|
|
Dieses Dokument ist verfübar auf: English Castellano Deutsch Francais Nederlands Turkce |
von Stefan Blechschmidt <sb(at)sbsbavaria.de> Über den Autor: 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. Inhalt: |
Automail für fli4lZusammenfassung:
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.
|
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 :-).
|
Der LinuxFocus Redaktion schreiben
© Stefan Blechschmidt, FDL LinuxFocus.org |
Autoren und Übersetzer:
|
2003-08-13, generated by lfparser version 2.38