InhaltWeiter

16. UUCP über IP mit ssh sicherer machen

16.1 Sicherheitslücken

UUCP über IP baut im Normalfall eine Verbindung zu Port 540 des UUCP-Servers auf. Diese Verbindung ist unverschlüsselt und somit kann rein theoretisch jeder Rechner auf dem Weg der Daten diese abfangen und das Paßwort im Klartext lesen. Ein sogenannter Sniffer ist fast unsichtbar, da er nur passiv den Datenstrom mitliest und keine eigenen Pakete verschickt.

Das Paßwort ermöglicht dem Angreifer, E-Mails und News von UUCP-Server zu holen, als sei er der echte Client. Oft wird für einen eventuell vorhandenen FTP-Zugang, Shell-Account oder sogar für den PPP-Zugang das selbe Paßwort verwendet, so daß der Angreifer auf Kosten des Benutzers surfen kann.

16.2 Die Verbindung verschlüsseln

Es ist möglich, die komplette Verbindung so zu verschlüsseln, daß niemand den Inhalt erkennen kann. Als Nebeneffekt ist eine Kompression zuschaltbar, um bei DialUp-Leitungen Kosten zu sparen. Diese Kompression wirkt meist nur bei Mails, da News-Batches meist schon komprimiert sind.

Ihr Provider muß den SSH-Server sshd laufen haben und Sie benötigen den SSH-Client ssh.

So testen Sie, ob Ihr Provider den sshd laufen hat. uucp.netuse.de ersetzen Sie natürlich durch den Namen des UUCP-Servers Ihres Providers:

$ telnet uucp.netuse.de 22
Trying 193.98.110.140...
Connected to uucp.netuse.de.
Escape character is '^]'.
SSH-1.5-1.2.27
quit
Connection closed by foreign host.
$

Geben Sie quit ein, um die Verbindung zu beenden oder benutzen Sie die Escape-Sequenz ^]. Auf dem Server in diesem Beispiel läuft der im Moment aktuelle SSH-Daemon Version 1.2.27. Falls Sie eine einigermaßen aktuelle Distribution nutzen, haben sie wahrscheinlich auch diese Version.

Überprüfen Sie, ob Sie den SSH-Client installiert haben: Wenn Sie folgenden Befehl eingeben, sollten sie den Pfad zu dem Programm erhalten:

$ which ssh
/usr/local/bin/ssh
$

Ist dies nicht der Fall, sollten Sie das SSH-Paket Ihrer Distribution installieren. RedHat-Pakete bekommen Sie z.B. hier:

ftp.replay.com:/pub/crypto/

16.3 SSH-Tunnel starten

Der SSH-Tunnel kann z.B. so gestartet werden:

$ ssh -f -C uucp.netuse.de 5400:uucp.netuse.de:540 sleep 120

Die Optionen haben folgende Bedeutung:

-f

Diese Option sorgt dafür, daß ssh sich nach der Authentisierung in den Hintergrund »forkt«.

-C

Kompression aktivieren (optional)

uucp.netuse.de

Adresse des UUCP-Servers Ihres Providers (z.B. uucp.provider.de)

5400:uucp.netuse.de:540

5400 ist ein lokaler Port, der fast beliebig gewählt werden kann. uucp.netuse.de ist wieder der Hostname des UUCP-Servers und 540 der Port, auf dem der Server lauscht.

sleep 120

Dies ist ein Shell-Befehl, der dafür sorgt, daß der Tunnel 2 Minuten auf Daten wartet, bevor er wieder abgebaut wird.

Der lokale Port 5400 ist bewußt über 1024 gewählt, damit auch ein Benutzer ohne root-Rechte den Tunnel aufbauen kann.

16.4 UUCP konfigurieren

Damit der SSH-Tunnel genutzt wird, muß der eigene Client umkonfiguriert werden. Er darf jetzt keine Verbindung mehr zum UUCP-Server aufbauen, sondern zum lokalen Port 5400.

Die Dateien port und sys werden bearbeitet:

port

port tcpssh
type tcp
service 5400

Es wird ein neuer Port tcpssh konfiguriert, der statt Port 540 den Port 5400 nutzt.

sys

system uucp
port tcpssh
protocol t
address 127.0.0.1

Dieser Abschnitt sollte Ihnen schon bekannt vorkommen. Vielleicht haben Sie die UUCP-über-IP-Variante auch nur als Alternate konfiguriert. Die Verschlüsselung funktioniert trotzdem. Im Gegensatz zu Ihrer alten Konfiguration wird der Port und die address-Zeile angepasst. Den Port tcpssh haben wir bereits in der Datei port konfiguriert.

Die Adresse wird auf 127.0.0.1 (localhost) gesetzt, damit der SSH-Tunnel die Daten an den eigentlichen UUCP-Server weiterleiten kann.

Bei einem Aufruf des SSH-Befehls und anschliessendem Pollens sollten Sie keine Unterschiede in den Logs im Vergleich zu alten Calls feststellen.

16.5 Verschlüsselung automatisieren

Es ist nicht sehr benutzerfreundlich, vor jedem Pollen den SSH-Befehl eintippen und ein Paßwort angeben zu müssen. Ein Skript, welches uucico aufruft, kann also auch ohne Probleme noch einen zusätzlichen Befehl vertragen:

#!/bin/bash
# SSH-Tunnel starten
ssh -f -C uucp.provider.de 5400:uucp.provider.de:540 sleep 120

# Hier kann nochmal schnell ein News-Batchen im 
# Hintergrund angeworfen werden.
# su -c "/usr/bin/sendbatch uucp" news &

# Hier wird uucico gestartet.
/usr/sbin/uucico -Suucp

16.6 SSH ohne Paßwort

Durch Eintragen des Public Keys des Clients auf dem Server wird eine SSH-Verbindung ermöglicht, die kein Paßwort benötigt. Generieren Sie sich dazu einen Public Key für SSH, falls Sie nicht bereits einen besitzen:

$ ssh-keygen
Initializing random number generator...
Generating p:  ........++ (distance 184)
Generating q:  ............++ (distance 210)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key (/home/user/.ssh/identity): 
Enter passphrase: 
Enter the same passphrase again: 
Your identification has been saved in /home/user/.ssh/identity.
Your public key is:
1024 35 127642664008810473190379335529362297128585226778196\
81550133787496336590741138179031632372787523983722146993732\
04821130289447237973952899107810754205502922180340071603017\
45428600832943838422850984029284270667469908839608991926944\
06721675129466163897527649041652188452013063146729141405576\
7033019358488561450739 user@perikles.toppoint.de
Your public key has been saved in /home/user/.ssh/identity.pub

Der Dateiname ist egal, bestätigen Sie also einfach mit Enter. Die Paßwortabfrage bestätigen Sie zweimal mit Enter, um kein Paßwort zu setzen.

Im Verzeichis ~/.ssh/ sollten Sie nun diese Dateien finden:

$ ls -l
total 3 
-rw-------   1 netadmin netadmin      544 May 31 19:56 identity
-rw-rw-r--   1 netadmin netadmin      348 May 31 19:56 identity.pub
-rw-------   1 netadmin netadmin      512 May 31 19:56 random_seed

Zusätzliche Dateien wie z.B. authorized_keys oder known_hosts sind nicht störend, sondern enthalten Informationen zu vergangenen SSH-Verbindungen.

Ihr Public Key muß nun auf den UUCP-Server kopiert werden. Nutzen Sie dazu am besten gleich SSH, damit niemand Ihre Verbindung mitlesen kann. Sie benötigen dazu einen Shell-Zugang zu dem UUCP-Server Ihres Providers. Oft ist dies der gleiche Rechner, der auch den Shell-Zugang selbst bereitstellt. Wenn Sie keinen Shell-Zugang haben, sollten Sie Ihren Provider bitten, die Datei identitiy.pub in das entsprechende Verzeichnis zu kopieren. Wenn der Provider nichts mit Ihrer Anfrage nichts anfangen kann, dann hat er wahrscheinlich nicht viel Ahnung von Sicherheit :-).

Der UUCP-Server ist in diesem Beispiel uucp.provider.de und der Benutzername ist blafasel.

Wechseln Sie ins richtige Verzeichnis wechseln:

$ cd  /.ssh

Zum Kopieren des Public Keys nutzen wir den Befehl scp (Secure Copy) des SSH-Pakets:

$ scp identity.pub blafasel@uucp.provider.de:.ssh/
blafasel@uucp.provider.de's password: 
identity.pub              |          1 KB |   7.4 kB/s | ETA: 00:00:00 | 100%

Diese Verbindung benötigt natürlich noch ein Paßwort. Geben Sie das Paßwort für Ihren Shell-Account ein.

Testen Sie nun, ob ein Login ohne Paßwort möglich ist:

$ ssh blafasel@uucp.provider.de
Last login: Tue May 30 17:44:47 2000
No mail
$ uname -n
uucp.provider.de

Falls Sie den gleichen Benutzernamen auf Ihrem Client und dem Server nutzen, können Sie den SSH-Befehl zu ssh uucp.provider.de reduzieren. Die Meldungen nach dem Login können stark varieren, je nachdem welches Betriebssystem Ihr Provider einsetzt. Kontrollieren Sie mit dem Befehl

$ uname -n

ob Sie auf dem richtigen Rechner eingeloggt sind.

16.7 SSH-Tunnel beim Login per PPP aktivieren

Wenn ich per SyncPPP online bin, wird automatisch alle 5 Minuten nach Mails und News gesucht. Falls sie etwas ähnliches machen, können Sie die SSH-Zeile für den Tunnel in die Datei /etc/ppp/ip-up eintragen und somit einen permanenten Tunnel aufstellen. Achten Sie darauf, daß der sleep Befehl einen hohen Wert hat, damit der Tunnel lange bestehen bleibt.

Nachteil dieser Version ist, daß bei Dial on Demand oft Verbindungen aufgebaut werden können oder die Verbindung nicht abgebaut wird, obwohl keine Daten mehr transferiert werden und das Idle-Timeout überschritten ist.

Als Lösung dieses Problems bietet es sich an, vor jedem UUCP-Call den SSH-Tunnel für ein paar Sekunden aufzubauen. Wie viele Sekunden Sie benötigen, hängt von Ihrer Anbindung ab. 10 Sekunden sollten allerdings ausreichend sein.


InhaltWeiter