Der Linuxserver als Einwahlrechner

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

1 Einleitung

Ein Linuxrechner ist mit sehr einfachen Mitteln als Einwahlrechner zu konfigurieren. Einwahlrechner meint dabei nicht nur, daß mensch sich mittels eines Terminalprogramms auf den Rechner einwählen kann und dann dort wie auf einem lokalen Rechner arbeiten kann. Sondern hier geht es darum, daß der sich einwählende Rechner zu einem vollwertigen Mitglied des Netzes wird, in dem sich der Einwahlrechner befindet. Wenn dieses Netz über einen Internetzugang verfügt, steht dieser dann auch dem Einwahlrechner zur Verfügung. Zudem kann dem gesamten Netz hinter dem einwählenden Rechnern dieser Internetzugang ermöglicht werden, wenn dort "Masquerading" aktiviert ist. Details dazu sind in den vorhergehenden Seiten ausführlich beschrieben.
Im folgenden werden zwei verschiedene Konfigurationen beschrieben, einmal für eine Modemeinwahlverbindung und zum anderen eine für eine ISDN-Verbindung.
Beide Konfigurationen sind alternativ, soll heißen wenn der gleichzeitige Zugang über Modem und ISDN möglich sein soll, müßten vermutlich noch einige kleinere Änderungen erfolgen.
Das folgende Bild zeigt das Zugangsprinzip am Beispiel der Modemverbindung.

2 Voraussetzungen

Auf dem Einwahlrechner muß logischeweise Linux inclusive der Netzwerkoptionen installiert sein. Wenn der Einwahlrechner seinerseits in einem Netz hängt, muß er (ebenfalls logischerweise) über eine Netzwerkkarte verfügen. Dann benötigen wir noch ein Modem, damit sich andere Rechner hier einwählen können. Da in meinem Büro leider kein ISDN-Anschluß zur Verfügung steht, muß ich mich auf die Modemeinwahl beschränken.

Als Pakete müssen mindestens installiert sein:
ppp
Für die Modem-Verbindung:
mgetty
Für die ISDN-Verbindung:
i4l
 

3 Einwahlrechner für eine Modemverbindung

3.1 Konfiguration des Modems

Das Modem sollten Sie bei der Systeminstallation einrichten, dann wird in der Datei /etc/r.config für ein Modem an der ersten seriellen Schnittstelle (COM1 unter DOS) eine Zeile mit dem Inhalt
MODEM="dev/ttyS0"
bzw.
MODEM="dev/ttyS1"
für die zweite serielle Schnittstelle (COM2 unter DOS) eingerichtet. Und zudem wird im Verzeichnis /dev ein Link von der entsprechenden Datei auf die Datei /dev/modem erstellt. Wenn Sie ohne YaST arbeiten, tun Sie dies von Hand.

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.

3.2 Anlegen eines Einwahlbenutzers

Für die Einwahl definieren wir einen speziellen Benutzer. Dieser soll zu einer speziellen Gruppe im System gehören. Sagen wir zur Gruppe mit dem Namen "einwahl". Diese Gruppe legen wir an mit dem Befehl "groupadd einwahl" an. Dann legen wir den Benutzer einwahl_user an mit "useradd -g einwahl -s /etc/ppp/ppplogin einwahl_user". Die Besonderheit ist hier, daß für diesen User ein spezielles loginscript, nämlich die Datei /etc/ppp/ppplogin definiert wird. Das heißt, sobald sich dieser User im System einloggt, wird dieses Skript gestartet. Vergeben Sie noch ein Passwort für den Benutzer einwahl: passwd einwahl_user.
Das Skript hat folgenden Inhalt:

#!/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.

3.3 Einwahl nur zu bestimmten Zeiten ermöglichen

Wenn im Büro nur eine Telefonleitung zur Verfügung steht, an der das normale Telefon und das Modem parallel angeschlossen sind, können Sie dafür sorgen, daß der Einwahlrechner nur außerhalb der Bürostunden eine Verbindung zuläßt. Das Modemprogramm (mgetty) überprüft nämlich, bevor es abhebt, ob für die serielle Schnittstelle (in unserem Beispiel ttyS0) des Modems eine Datei nologin.ttyS0 im Verzeichnis /etc existiert. Wenn ja, wird nicht abgehoben, wenn nein, wird abgehoben.

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.

3.4 Weitere Systemeinstellungen für die Modemeinwahl

Die lokale Netzwerkkarte muß natürlich richtig installiert sein und vernünftig laufen, wenn Sie auf das Netz zugreifen wollen, in dem sich der Einwahlserver befindet. Das setze ich im folgenden voraus.

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.

4 Einwahlrechner für eine ISDN-Verbindung

Die Konfiguration eines ISDN-Einwahlrechners ist nach meiner Meinung wesentlich einfacher als die eines Modem-Einwahlrechners. Das liegt zum einen daran, daß eine ISDN-Karte in einem Linuxsystem behandelt wird wie eine Netzwerkkarte. Das heißt sie hat eine IP-Nummer und ist anders als ein Modem als Gerät "ansprechbar", auch wenn keine Verbindung vorliegt. Zum anderen wird der spezielle ppp-Daemon (das Hintergrundprogramm für die ppp-Verbindung - ipppd) bei einer ISDN-Karte nur einmal beim Systemstart aktiviert und lauscht gewissermaßen ständig, ob auf die Karte zugegriffen wird. Er stellt dann die Verbindung her oder baut sie wieder ab. Das erspart uns hier die Hilfskrücke mit dem Einwahlbenutzer und dem speziellen Einwahlskript.

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
 

5 Sonstige allgemeine Systemeinstellungen

Wenn Sie die Wahl haben, sollten Sie immer eine Authentifizierung per CHAP verlangen, da dies ein zweiseitiges Verfahren ist und etwas höhere Sicherheit bietet. Sie benötigen dann eine Datei /etc/ppp/chap-secrets.

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!

6 Sicherheitsaspekte

Die beschriebene Lösung ist aus Sicherheitsaspekten insbesondere für die Modemeinwahl nicht ganz unproblematisch, da Benutzer dort von außen ein Programm (pppd) mit root-Rechten ausführen können. Im vorliegenden Fall ist das nicht weiter wild, da der Rechner selbst kein Arbeitsplatzrechner ist, sondern nur für die Einwahl eingerichtet ist und sich Hacker sowohl den Einwahlnamen, Passwort und die Gruppenzugehörigkeit erschleichen müßten. Im schlimmsten Fall muß der Rechner wieder neu eingerichtet werden.
Für öffentlich zugängliche Lösungen sollte das eigentliche Netz durch ein Firewall o.ä. Sicherheitsmaßnahmen abgeschirmt werden. Eine vollwertige Workstation mit wichtigen Daten würde ich so nicht einrichten.



Zurück zur Hauptseite