Gliederung
1 Einleitung
2 Voraussetzungen
3 Einwahlrechner für
eine Modemverbindung
3.1 Konfiguration
des Modems
3.2 Anlegen
eines Einwahlbenutzers
3.3
Einwahl nur zu bestimmten Zeiten ermöglichen
3.4 Weitere Systemeinstellungen
für die Modemeinwahl
4 Einwahlrechner für
eine ISDN-Verbindung
5 Sonstige allgemeine
Systemeinstellungen
6 Sicherheitsaspekte
Als Pakete müssen mindestens installiert sein:
ppp
Für die Modem-Verbindung:
mgetty
Für die ISDN-Verbindung:
i4l
Dafür, daß das Modem bei Anruf abhebt, sorgt das Programm
mgetty. Dieses Programm überwacht die serielle Schnittstellen. Es
kann noch viel mehr, als "nur" eine ppp-Verbindung intiieren, aber das
ist ein anderes Thema. Um mgetty regelmäßig beim Systemstart
zu starten, muß die Datei /etc/inittab verändert werden. Öffnen
Sie diese Datei mit einem Editor und suchen Sie nach den Zeilen
# modem getty
# mo:23:respawn:/usr/sbin/mgetty -s 38400 modem
entfernen Sie das Kommentarzeichen und passen Sie ggf. die Geschwindigkeitsvorgabe
an. Wenn Sie ein schnelles Modem und eine entsprechende serielle Schnittstelle
(mit einem Baustein vom Typ 16550A) können Sie dort auch die maximale
Geschwindigkeit für aktuelle serielle Schnittstellen von 115200 einstellen.
mo:23:respawn:/usr/sbin/mgetty -s 115200 modem
Wenn diese Zeilen nicht zu finden sind, tragen Sie sie selbst dort so ein, wie oben beschrieben.
Wenn Sie vorgeben möchten, daß das Modem erst nach z.B. 6
Klingelzeichen abheben soll, tragen Sie noch den Parameter -n 6 ein.
mo:23:respawn:/usr/sbin/mgetty -s 115200 -n 6 modem
Das wäre eine Möglichkeit, das Modem und das normale Telefon
gemeinsam an einer Leitung zu betrieben. Sie müssen nur den Wert für
die anzahl der Klingelzeichen so hoch setzen, daß ein normaler Anrufer
mit großer Wahrscheinlichkeit aufgelegt hat (z. B. 6 oder 8). Diese
Lösung hat aber den Nachteil, daß Sie zu Hause doch relativ
lange auf die Verbindung warten müssen. Deshalb wird unten eine andere
Lösung beschrieben.
Das war's bereits mit dem Modem. Nach einem Systemneustart müßte das Modem jetzt aktiv sein.
#!/bin/sh
exec /usr/sbin/pppd
Bei neueren Versionen von pppd gibt es eine unterschiedliche Behandlung von Optionen, die über die Kommandozeile angegeben werden und von denen, die in der Datei /etc/ppp/options stehen. Deshalb habe ich jetzt alle Parameter nur noch in der Datei stehen. Im Grunde könnte somit auch direkt /usr/sbin/pppd als Einwahlshell angegeben werden.
Diese Skript soll von allgemeinen Nutzern nur ausgeführt werden, aber nicht geändert werden können. Deshalb stellen wir sicher, daß root der Eigentümer ist (chown root ppplogin) und setzen die entsprechenden Rechte (chmod 644 ppplogin).
Besonders wichtig sind in dieser Beispielskonfiguration die Rechte des Programms pppd. Wir ordnen das Programm der Gruppe einwahl zu: chgrp einwahl /usr/sbin/pppd. Da das Programm in wichtige Systemdetails (v.a. das routing des Kernels) eingreift, muß es mit root-Rechten (suid) laufen. Also: chmod 4750 /usr/sbin/pppd.
Wichtig: Wenn Sie diese Konfiguration so durchführen wollen, dürfen Sie bei S.u.S.E. Distributionen YaST nicht laufen lassen, da dieses die Rechte standardgemäß anders setzt, bzw. Sie müssen den entsprechenden Teil von SuSEConfig abschalten! Oder Sie müssen hinterher die Installation entsprechend überprüfen bzw. wiederherstellen. Falls hier die Rechte nicht richtig gesetzt sind, erhalten Sie in der Datei /var/log/messages eine entsprechende Meldung mit dem Inhalt "persission denied", wenn debugging eingeschaltet ist (s.u.).
Sie können jetzt überprüfen, ob die Installation soweit funktioniert, indem Sie sich an einer der Konsolen als Benutzer "einwahl" einloggen. Wenn alles stimmt, sehen Sie nach einem kurzen Moment eine Reihe merkwürdiger Zeichen auf dem Bildschirm, unter den Zeichen finden Sie eine Menge von geschweiften Klammern. Was Sie da sehen, sind die Ausgaben von pppd, der versucht, mit Ihnen über die Details der ppp-Verbindung zu verhandeln. In der Regel beendet sich pppd dann nach erfolglosen Versuchen (Sie sind ja in diesem Moment kein Modem) von selbst. Andernfalls beenden Sie die Verbindung oder fahren Sie das System herunter.
Mit Hilfe des cron-Programms können wir dafür sorgen, daß
Werktags zu Bürobeginn diese Datei erstellt wird und zu Büroende
wieder gelöscht wird. Es gibt eine systemweite Datei für das
Programm cron (/etc/crontab) und für jeden Benutzer/jede Benutzerin
eine eigene. Bei meinem Einwahlserver habe ich in die systemweite Datei
zwei Zeilen wie folgt eingetragen:
0 18 * * 1-5 root rm /etc/nologin.ttyS0
0 7 * * 1-5 root cp /etc/dummy /etc/nologin.ttyS0
Die erste davon bewirkt, daß um 18 Uhr und 0 Minuten mit der
Benutzerkennung root der Befehl rm /etc/nologin.ttyS0 ausgeführt
wird, das heißt die Datei /etc/nologin.ttyS0 gelöscht wird.
Die zweite bewirkt, daß um 7 Uhr und 0 Minuten diese Datei erstellt
wird, indem eine Datei aus dem /etc-Verzeichnis entsprechend umkopiert
wird. Diese Datei kann leer sein oder einen beliebigen Inhalt haben (Sie
sollten wenigstens hineinschreiben, wofür sie gut ist, falls sich
später einmal Alsheimer ankündigt). Das heißt, Sie müssen
diese Datei erst einmal mit einem beliebigen Editor erstellen.
Achtung: Je nach Konfiguration von mgetty kann es auch sein, daß mgetty auf ihr Modem nicht über /dev/ttyS0 oder /dev/ttyS1 zugreift, sondern über den symbolischen Link /dev/modem. Wenn also obiges nicht funktionieren sollte, versuchen Sie es mit /etc/nologin.modem als Dateinamen.
Wichtig für das Einwahlsystem ist vor allem die Datei /etc/ppp/options,
in der die Details für das Programm pppd festgelegt werden.
Die Datei des Einwahlservers ist nachfolgend kommentiert wiedergegeben
(Kommentare beginnen mit einem #)
#
# Datei /etc/ppp/options
# es sollen Meldungen über den Verbindungsaufbau in die Datei
# /var/log/messages geschrieben werden, die bei der Fehlersuche
helfen
# wenn das Ganze läuft besser wieder herausnehmen, da die
Datei sonst zu groß wird
debug
# benutze die modem control lines
modem
# benutze hardware flow control
crtscts
# alle Zeichen der Verbindung koennen genutzt werden
asyncmap 0
# Groesse der Uebertragungspakete fuer die Uebertragung
mtu 1500
# Groesse der Uebertragungspakete fuer Empfangen
mru 1500
# die beiden obigen Werte können bei schlechten Telefonleitungen
verkleinert werden
# und liefern dann einen etwas besseren Durchsatz
#
# Spiegle dem System vor, die IP-Adresse des anrufenden Modems
gehöre zum lokalen Netz
proxyarp
# Das angerufene System soll (passiv) auf Initiativen des anrufenden
Systems warten
passive
# die ip-Nummern werden fest vorgegeben für die Modems lokal:remote
# bei kleinen Systemen sicher einfacher als dynamische ip-Zuweisung
192.168.2.40:192.168.2.41
# Achtung: einige interne Einstellungen des
Programms pppd haben sich bei aktuellen
# Distributionen geändert. Mit SuSE
5.2 hat noch folgendes funktioniert:
# erzwinge Authentifizierung per CHAP
+chap
# Verweigere Authentifizierung per PAP
-pap
# ab SuSE 6.0 habe ich das so noch nicht
wieder zum Laufen gebracht. Zudem haben sich
# die Bezeichnungen geändert. Dort müßte
es wohl
# require-chap und
# refuse-pap
# heißen. Also habe ich diese Zeilen
erst einmal wieder herausgenommen.
# Sobald ich eine Lösung zur Authentizierung
habe, werde ich sie ergänzen.
# Im Moment erfolgt also die Einwahl wohl
ohne Authentizierung. Die einzige
# Sicherheit bieten daher hier Username und
Passwort.
Sie finden im Verzeichnis /etc noch ein Unterverzeichnis /mgetty+sendfax. Die dort bei der Systeminstallation eingerichteten Dateien dialin.config login.config mgetty.config voice.conf habe ich nicht weiter verändert.
Die einfachste Lösung ist meiner Meinung nach, die ISDN-Karte zu Beginn so einzurichten, als wolle mensch eine Verbindung vom Server zum Client (zu dem Rechner, der sich einwählt) herstellen. Wir tun also so, als wäre es gerade andersherum als wir eigentlich wollen. Bei S.u.S.E. geschieht das am einfachsten mit dem Installationsprogramm YaSt. Das ist im Handbuch so deutlich beschrieben, daß ich mir hier Details spare.
Um jetzt aus dem Rechner einen Einwahlserver zu machen, müssen
einige Dateien angepaßt werden.
Ich führe im folgenden nur die zu ändernden Details auf:
/etc/ppp/ip-up
Dieses Skript wird unter Linux immer aufgerufen, wenn eine ppp-Verbindung
zustand kommt und wenn sie abgebaut wird. Bei einem Client, also einem
Rechner, der sich woanders einwählt, wird vor allem im Abschnitt ip-up
des Skripts das routing so gesetzt, daß die IP-Pakete dann in das
fremde Netz weitergeleitet werden. Bei einem Server wäre das aber
völliger quatsch. Das Routing muß hier so bleiben, wie vor der
Einwahl.
Öffnen Sie die Datei /etc/ppp/ip-up und löschen Sie bis auf
die Semikolons alles zwischen den Zeilen ip-up) und ip-down).
Eigentlich kann die Datei ganz gelöscht werden, aber der Rest
schadet zumindestens nicht.
Der entsprechende Abschnitt der Datei sieht dann so aus:
...
case "$BASENAME" in
ip-up)
;;
ip-down)
...
Dann müssen noch die PPP-Optionen für das Gerät ISDN-Karte
geändert werden. Diese werden zum einen aus der systemweiten Datei
/etc/ppp/options gelesen und zum zweiten dann aus der zur jeweiligen Karte
gehörigen Konfigurationsdatei. Bei einer Karte ist das /etc/ppp/options.ippp0.
Um ggf. später weitere Karten hinzufügen zu können, ist
bei mir die Datei /etc/ppp/options bis auf eine Kommentarzeile ganz leer.
Soweit ich weiß muß diese Datei allerdings vorhanden sein,
Löschen geht also nicht.
Die eigentliche Konfiguration erfolgt in
/etc/ppp/options.ippp0. die sieht so aus:
# /etc/ppp/options.ippp0
#Optionen für einen Einwahlserver
#
# basierend auf dem Originalskript von
# Klaus Franken, kfr@suse.de
#
# das "Gerät", hier die erste ISDN-Karte
/dev/ippp0
# ermöglicht, daß Einwahlrechner als Bestandteil des
# lokalen Netzes erscheint
# Diese Zeile muß eingefügt werden!
proxyarp
# wir geben die IP-Adressen fest vor:
192.168.2.40:192.168.2.41
# ein paar Systemeinstellungen
-vj
-vjccomp
-ac
-pc
-bsdcomp
# Größe der Pakete zum Empfangen
mru 1524
# Größe der Pakete zum Versenden
mtu 1500
Zum Austesten der Verbindungen sollte in der Datei /etc/ppp/ioptions
das Debugging aktiviert werden. Dazu sollte das Kommentarzeichen vor der
Zeile mit der anweisung debug entfernt werden. Das sorgt dafür, daß
in der Datei /var/log/messages die Verbindungsversuche protokolliert werden.
Wenn das Ganze funktioniert, sollte das Kommentarzeichen # wieder eingefügt
werden.
# Set 'debug' to create a lot of information in /var/log/messages
debug
Im Prinzip war es das. Da der Einwahlrechner im konkreten Fall an einer größeren ISDN-Anlage hängt, protokolliert die Karte alle Wählverbindungen im Netz und müllt damit die Logdatei /var/log/messages voll. Um das zu unterbinden, habe ich in der Datei /etc/isdn/isdnlog.isdnctrl0.options die Zeile mit der Angabe syslog= geändert:
# Angabe der gewuenschten Meldungen, die in's syslog eingetragen
# werden sollen
# ist in der Standardeinstellung: syslog=1015
# will aber nur Errors (1), Warnings (2), Notice (4)
syslog=7
Wenn Authentifizierung per CHAP verlangt wird, muß auf beiden Rechnern eine Datei /etc/ppp/chap-secrets vorhanden sein. Dort werden jeweils in einer Zeile server, client und ein Paßwort festgehalten, mit dem sich die Systeme gegenseitig bekanntmachen. Da CHAP zweiseitig ist, d.h. der Client meldet sich beim Server an und umgekehrt, hat die Datei auf beiden Rechnern das nachfolgend beschriebene Aussehen. Die Namen für Client und Server entsprechen üblicherweise den jeweiligen Hostnamen, müssen aber wohl nicht; im dargestellten Beispiel verwende ich ppp_client für den Rechner, der anruft und ppp_server für den Rechner, der angerufen wird.
# /etc/ppp/chap-secrets
# server client secret
ppp_server ppp_client verratichnicht
ppp_client ppp_server verratichnicht
Das routing auf dem Einwahlserver ist sehr einfach, es gibt dort nur die lokale Netzkarte und das default-Gateway des Netzes (in unserem Fall wieder ein Gateway).
#
# /etc/route.conf
#
# wird gelesen von /sbin/init.d/route.
#
# loopback-device
127.0.0.0
0.0.0.0
255.255.255.0
lo
# Ethernetz-Karte, die mit dem lokalen Netz verbunden ist
192.168.2.0
0.0.0.0
255.255.255.0
eth0
# default-route zeigt auf das gateway im Netz
default
192.168.1.1
Das routing für das Modem und die ISDN-Karte wird automatisch geregelt, insbesondere der Eintrag proxyarp in /etc/ppp/options ist hier wichtig!