Tunnel (Computer)
Tunnel bzw. Tunneling bezeichnet den Gebrauch eines Netzwerkprotokolls als Transportmittel für artfremde Daten, ohne dabei den Standard des Protokolls (RFC) zu verletzen. Entweder werden in einem Tunnel die Daten eines Dienstes im Protokoll eines anderen Dienstes eingebettet (SSH-, VPN-, http-Tunnel, etc.) oder zumindest das Protokoll eines Dienstes mit dienstfremden Daten versehen und somit funktionell erweitert (DNS-Tunnel). Dafür benötigt man auf beiden Kommunikationsseiten zwingend einen Konverter, welcher z.B. die Daten des ursprünglichen Dienstes abfängt, konvertiert und über den anderen Netzwerkdienst an das Zielsystem weiterreicht. Auf dem Zielsystem werden die empfangenen Daten in das ursprüngliche Format zurückverwandelt und ggf. an den Dienst weiterreicht, für den die Daten tatsächlich bestimmt sind.
Tunnel werden verwendet, um unsichere Netzwerkprotokolle mithilfe eines gesicherten und verschlüsselten Netzwerkprotokolls zu transportieren (z.B. SSH), um ganze Netzwerke abhörsicher über unsichere Netzwerke (Internet) hindurch miteinander zu verbinden (z.B. VPN) oder um das Regelwerk einer Firewall und andere Sicherheitsmaßnahmen zu umgehen.
Prinzipiell lassen sich alle Protokolle für einen Tunnel gebrauchen. Sie müssen sich nur durch das Internet routen lassen und die Möglichkeit bieten, die zu transportierenden Daten einbetten zu können. So lassen sich z.B. auch ping-Pakete (ICMP) für den Datentransport verwenden. Es sind auch asymmetrische Tunnel möglich, in dem zwei unterschiedliche Protokolle für den Hin- und Rückweg eingesetzt werden.
|
leicht erklärt (für Laien)
Wie arbeitet ein Tunnel und wie lässt sich damit eine Firewall umgehen?
Ein Netzwerkdienst arbeitet in der Regel auf einem festgelegten Standardport. Werden Ports mit Hilfe einer Firewall gesperrt, will man damit erreichen, dass bestimmte Dienste nicht genutzt werden können. Ist z.B. Port 80 (http) erlaubt und Port 21 (ftp) gesperrt, so kann der Anwender problemlos Internetseiten aufrufen (http), aber keine Dateien per ftp mit einem Internetserver austauschen (Daten die über Port 21 gehen, werden von der Firewall blockiert).
Jemand könnte nun das ftp-Client-Programm und den Serverdienst seines eigenen Internetservers so verändern, dass diese ebenfalls über Port 80 kommunizieren und so die Filterregel der Firewall umgehen. Eine Firewall, welche in der Lage ist, die Pakete zu analysieren, kann das verhindern. Um sicherzugehen, dass kein anderer Dienst den Port des freigegebenen Dienstes für seine Kommunikation missbraucht, untersucht die Firewall also zusätzlich den Aufbau der Daten und blockiert alle Pakete, welche nicht dem Protokoll des freigegebenen Dienstes entsprechen.
In der Praxis ist eine solche Kontrolle jedoch nicht trivial. Schließlich soll jedes Protokoll irgendwelche Daten transportieren. So ist es möglich, z.B. die Daten eines ftp-Dienstes in dem Protokoll eines http-Dienstes einzubetten, ohne dabei den Protokollstandard zu verletzen. Die Daten müssen dazu lediglich entsprechend konvertiert werden. Genau das macht man beim Tunneln, wodurch der Anwender des Tunnels in der Lage ist, die Regeln der Firewall zu umgehen: Er schickt die Daten eines eigentlich gesperrten Dienstes eingebettet in den Daten eines freigegebenen Dienstes durch die Firewall zu seinem Zielsystem. Dafür muss auf dem PC und dem Zielsystem jedoch eine Tunnelsoftware installiert sein, welche die Daten auf dem PC zuvor konvertiert und auf dem Zielsystem wieder in das ursprüngliche Format zurückverwandelt.
Das Tunnelprinzip für eine verschlüsselte Verbindung verwenden
Tunnel werden vornehmlich dazu verwendet, um abhörsichere Verbindungen über ungesicherte Computernetzwerke hinweg aufzubauen. Dabei sorgt die Tunnelsoftware dafür, dass die Netzwerkpakete zuvor verschlüsselt und in einem für die Übertragung verschlüsselter Daten vorgesehenen Protokoll eingebettet werden, um sie auf der Gegenseite wieder zu entschlüsseln und auszupacken. Dadurch wird eine verschlüsselte Datenübertragung auch für Dienste realisiert, die normalerweise über keine eigene Verschlüsselung verfügen. Auch ganze Netzwerke können so abhörsicher miteinander verbunden werden. Ein Beispiel dazu findet sich unter VPN.
Warnung vor der Nutzung unautorisierter Tunnel
Zwar ist es für den Arbeitgeber oft nicht möglich, Tunneling gänzlich zu verhindern, jedoch gibt es ein paar Indizien, die ihn auf einen Tunnel aufmerksam machen können. Die wenigsten Arbeitgeber zeigen für die Nutzung unautorisierter Tunnel Verständnis. Der Hilflosigkeit wird oft mit harten Konsequenzen begegnet, die durchaus den Verlust des Arbeitsplatzes beinhalten können. Selbst wenn man sich offenkundig als Ethickerd versucht, oder den Datentransfer eines durch die Firewallregel erlaubten Dienstes lediglich mit einem eigenen Tunnel verschlüsseln möchte, so kann dies arge Folgen haben. Deshalb ist es ratsam, sich zuvor sachkundig zu machen, was in dem Firmennetz erlaubt ist und was nicht.
technische Details (für Fortgeschrittene)
Aushebeln von Firewallrichtlinien: Der Weg zum Tunneln
Nehmen wir einmal an, ein Firmenmitarbeiter betreibt privat einen Server im Internet. Nachdem sein Arbeitgeber das Firmennetz mit dem Internet verbunden hat, könnte er nun nach belieben aus dem Firmennetz heraus auf seinen privaten Server zugreifen. Ohne jegliche Restriktionen wäre es ihm so z.B. möglich, zwischen seinem Arbeitsplatz und dem privaten Server per ftp Dateien zu kopieren. Dazu muss auf seinem Internetserver lediglich ein ftp-Dienst laufen, welcher am Standard-ftp-Port (Port 21) auf seine Anfragen wartet. Auf seinem Arbeitsplatz installiert er nun ein beliebiges ftp-Client-Programm, welches in der Lage ist, den Dienst zu nutzen und Daten mit seinem Server auszutauschen.
Um so etwas zu verhindern, installiert der Arbeitgeber in unserem Beispiel zunächst eine Paketfilter-Firewall, welche die Kommunikationsversuche zwischen dem Firmennetz und dem Internet filtert. Die Firewall wird so konfiguriert, dass sie lediglich Anfragen an Port 80 zum Internet durchlässt, was zu Folge hat, dass nur noch Internetseiten angezeigt werden können (sämtliche Standard-Ports anderer Dienste werden blockiert – so auch Port 21 für ftp).
[PC des Mitarbeiters]--internes Netz (Firma)-->[Firewall=nur Port 80 in Richtung Internet erlauben]--externes Netz-->[Internetserver]
Nun sucht der Mitarbeiter nach einem Weg, diese Sperre zu überwinden. Der Weg zum Tunneln:
- Eine einfache Methode ist es, den Dienst auf seinem Internetserver so umzuprogrammieren, dass er nicht mehr am Standardport 21 lauscht, sondern den Port 80 für ftp-Anfragen akzeptiert. Nun muss er noch die ftp-Client-Software dahingehend ändern, dass sie die Anfrage an seinen Server auf Port 80 und nicht auf Port 21 stellt. Und schon läuft seine private ftp-Verbindung wieder.
Schritt eins des Tunnels wurde erreicht: Die Anfragen an seinen Dienst laufen einfach über einen anderen, freigegebenen Port, welcher eigentlich für einen anderen Dienst reserviert wurde (hier der http-Port 80).
- Ein Nachteil dieser Methode zeigt sich darin, dass der Mitarbeiter nun keinen x-beliebigen ftp-Client oder Dienst mehr verwenden kann, sondern immer auf die von ihm angepasste Version angewiesen ist. Eine elegantere Methode soll helfen, das Problem zu überwinden: Statt die Software des Clients oder Servers umzuschreiben, installiert er einfach ein zusätzliches Hilfsprogramm in Form eines Port-Forwarding-Tools, welches die Anfragen des ftp-Clients auf Port 21 entgegennimmt und sie automatisch auf Port 80 umleitet. Auf dem Server läuft ebenfalls ein solches Tool, welches die Anfragen an Port 80 entgegennimmt und einfach an den Port 21 des eigenen Servers zurückreicht. Der Vorteil ist, dass dieses Tool mit beliebigen ftp-Clients und Diensten zusammenarbeitet, ohne dass deren Software angepasst werden muß.
Schritt zwei des Tunnels wurde erreicht: Eine programmunabhängige, automatische Umleitung des Ports, genannt „local port forwarding“, wurde realisiert.
- Dieser Mechanismus funktioniert so lange, bis der Arbeitgeber statt der Paketfilter-Firewall eine Application Level Firewall (ALF) verwendet, welche in der Lage ist, in die Netzwerkpakete hineinzusehen. Diese Firewall bemerkt nun, dass die Netzwerkpakete nicht http-Konform sind und blockiert diese einfach. Es reicht also nicht, die Pakete per „local port forwarding“ umzuleiten, sie müssen im gleichen Atemzug durch das Umleitungsprogramm auch in das entsprechende Format umgewandelt und auf der anderen Seite wieder in das ursprüngliche Format zurückkonvertiert werden. In unserem Beispiel wird das Format des http-Dienstes also quasi als Verpackung verwendet, um darin hinterlegte, beliebige Daten für die ftp-Verbindung zu transportieren.
Der dritte und letzte Schritt des wirklichen Tunnelns wurde erreicht: Die automatische Konvertierung in ein gültiges Protokoll, damit die Kommunikation auch weiterhin dem RFC-Standard entspricht.
Zu Schritt 2 („local port forwarding“): eine Serverapplikation verwenden
Oben wurde unter Schritt 2 geschrieben, dass man mit Hilfe eines „local port forwarding“-Tools einfach den Port umleitet und daher keine Änderung der Clientsoftware durchführen muss. Das stimmt leider nicht ganz, denn dieser Automatismus ließe sich nicht einrichten, wenn man auf dem System keine Administrationsrechte hat. Auch hier sollte eine elegantere Lösung helfen, das Hindernis zu überwinden:
So hängt sich die clientseitige Port-Forwarding-Software nicht in den IP-Stack, um ausgehende Anfragen an Port X automatisch nach Port Y umzuleiten. Vielmehr lauscht sie an einem eigenen Port des PCs, um alle Pakete, welche an diesem Port eingehen, umleiten zu können. Mit anderen Worten läuft die Port-Forwarding-Software als Serverapplikation auf dem PC, sodass der PC Anfragen an einem seiner eigenen Ports entgegennehmen kann. Sämtliche Anfragen an diesen Port werden der Tunnelsoftware übergeben.
In unserem Beispiel wird nun das ftp-Client-Programm so konfiguriert, dass es seine Anfragen nicht mehr an das Zeilsystem auf Port 21 schickt, sondern an den eigenen Rechner (localhost) auf den Port der Port-Forwarding-Software sendet (Zielsystem = „localhost:Port X“). Die Port-Forwarding-Software wird wiederum so konfiguriert, dass sie alle Pakete, welche an Port X eintreffen automatisch an das Zielsystem auf Port Y weiterreicht (Zeilesystem = „IP-Adresse oder DNS-Name des Servers:Port Y“). Der Vorteil: Die Port-Forwarding-Software benötigt keine Administrationsrechte mehr, um dies zu tun. Zudem können nun mehrere lokale Ports verwendet werden, die man einzeln konfigurieren und mit unterschiedlichen Zielen verbinden kann.
Wenn man sich jetzt noch verdeutlicht, dass die Port-Forwarding-Software wie oben unter Schritt 3 beschrieben auch die Protokollkonvertierung vornimmt, so lässt sie sich zusammenfassend als „Tunnelsoftware“ betiteln. In unserem Beispiel ergibt sich folgendes Schema:
ftp Client, Ziel=“localhost:XX“-->Port XX=Eingangsport der Tunnelsoftware auf dem PC, welche das ftp-Protokolls in http umwandelt-->weiterleiten an „Zielserver:Port 80“
Auf dem Server läuft die Tunnelsoftware nach demselben Prinzip – nur genau anders herum (sie lauscht am Tunnelport, konvertiert alle dort eingehenden Pakete in das Ursprungsformat zurück und leitet sie dann zum Bestimmungsport weiter):
Zielserver:Port 80=Eingangsport der Tunnelsoftware, welche das Protokoll in ftp zurückkonvertiert-->weiterleiten an „localhost:21“ (21=Port des lokalen ftp-Dienstes)
Einen flexiblen Tunnel verwenden: die Schritte 1 und 2 dynamisieren
Im Vergleich zum bisher gezeigten starren Tunnel ist das besondere am interaktiven Tunnel, dass sich der Remote-Port des Servers vom Client aus konfigurieren lässt. Dadurch wird es möglicht, jeden verfügbaren Dienst des Servers über den Tunnel anzusprechen, ohne den serverseitigen Tunnelpartner umkonfigurieren zu müssen. Sie können jedes Protokoll eines beliebigen Dienstes weiterleiten. Zudem lässt sich über die Option „Remote-Host“ vom Client aus in der Regel auch ein Dienst eines beliebigen Rechners hinter dem Tunnel ansprechen.
[PC des Mitarbeiters->Tunnelsoftare=Verbindung zum Tunnelserver:PortX herstellen/Verbindungsoption:Remote-Host (Tunnelserver oder ein beliebiger Server hinter dem Tunnel):PortY (Port des Dienstes für den die Daten tatsächlich bestimmt sind)]--internes Netz (Firma)-->[Firewall=PortX in Richtung Internet ist erlaubt]--externes Netz-->[Internetserver (Tunnelserver)/Pakete auspacken und weiterreichen an das durch die Verbindungsoption angegebene Zielsystem (Remote-Host:PortY)]
Neben dem interaktiven Tunnel gibt es auch Tunnel, die sämtliche Pakete in das Netz des Tunnelservers weiterleiten, wodurch sich alle Rechner seines Netzes vom Tunnelclient praktisch direkt ansprechen lassen. Beispiele für beide Tunnelarten:
- Ein Tunnel mit interaktiver Port- und „Remote-Host“-Weiterleitung, welche sich individuell auf dem Client konfigurieren lässt, ohne den serverseitigen Tunnelpartner vor Ort anpassen zu müssen. Beispiel: der SSH-Tunnel
- Ein Tunnel, welcher ungesehen alle Port- und Host-Anfragen weiterreicht und damit sogar eine uneingeschränkte Verbindung zweier Netzwerke zulässt. Beispiel: der VPN-Tunnel
Einen Tunnel ohne Portumleitung realisieren
In den meisten Fällen, in denen über Tunneling gesprochen wird, handelt es sich tatsächlich um die oben erwähnten drei Schritte (Tunneling=Kommunikation über einen anderen Port per Port-Umleitung und einer entsprechenden Protokollkonvertierung). Wenn man versucht zu verstehen, wie man per Tunneling eine Firewall umgehen kann, so ist es anfänglich verständlicher, wenn man sein Augenmerk auf die ersten beiden Schritte lenkt. Allerdings sind die Schritte 1 und 2 nicht unbedingt erforderlich, um einen Tunnel zu realisieren. Um das zu verstehen, wird der folgende Tunnel etwas näher beleuchtet:
- Ein Tunnel ohne Port Forwarding. Beispiel: der DNS-Tunnel
Weblinks (externe Links)
|