VPN unter Linux
Sichere Leitung zum Nulltarif

Sicherheit

Immer noch werden wichtige Informationen unverschlüsselt über das Internet übertragen. Internet Professionell zeigt, wie Sie mit Hilfe eines Linux-Servers und VPNs sichere Datenkanäle steuern.

Verschlüsselte Verbindung

VPN unter Linux

Haben Sie sich schon einmal Gedanken über die Sicherheit Ihrer Daten gemacht? Immer häufiger liest man von Angriffen auf Unternehmensdaten und den Diebstahl geheimer Dokumente. Die Ursache für einen solchen Angriff liegt zumeist im nachlässigen Umgang mit vertraulichen Daten. Noch viel zu oft werden Informationen aus dem internen Netzwerk einfach über das Internet übertragen. Auf Grund der einfachen und kostengünstigen Zugänge ist das Internet das optimale Netzwerk, um verteilte Unternehmensstandorte miteinander zu verbinden. Ein anderes sehr häufig genutztes Anwendungsfeld ist die Anbindung von Außendienst- und Telearbeitern über das Internet. Ganz gleich für welche Anwendung Ihre betrieblichen Daten über das Internet übertragen werden, Sie sollten stets auf deren Sicherheit achten, und das nicht erst, wenn Sie schon einmal Opfer eines Datenspähers geworden sind.


Was ist ein VPN?

VPN unter Linux

Damit Informationen bei der Übertragung für einen potenziellen Angreifer unbrauchbar sind, werden diese verschlüsselt. Diese Technik wird Virtual Private Network (VPN) genannt. Ein solches VPN überträgt Informationen in einem sicheren Kanal über unsichere Netzwerkabschnitte. Hierfür wird ein Tunnel zwischen zwei Stationen aufgebaut, die an unsichere Netzwerke wie zum Beispiel das Internet angeschlossen sind. Jedes zu sendende Datenpaket zwischen den Stationen muss vor der Übertragung verschlüsselt werden, und auf der Gegenseite erfolgt dessen Dechiffrierung. Ein VPN kann entweder zwei Rechner (End-to-End-VPN), zwei Rechnernetze (Site-to-Site-VPN) oder einen Rechner und ein Netzwerk (End-to-Site-VPN) miteinander verbinden. Die bei der Übertragung verwendeten Verfahren sind im IPSec-Protokoll festgelegt. Die nächste Generation des IP-Protokolls IPv6 enthält bereits die Funktionen von IPSec. Viele Netzwerkprodukte wie beispielsweise Firewalls oder Router können mit IPSec umgehen. Für den Aufbau eines eigenen VPN muss jedoch nicht unbedingt teure Software angeschafft werden. In diesem Workshop zeigen wir, wie Sie mittels Linux und der kostenlosen Free-S/WAN-Software Ihr eigenes VPN aufbauen. Free S/WAN beherrscht alle drei Einsatzmöglichkeiten eines VPN und arbeitet dank des IPSec-Protokolls mit Tools anderer Hersteller zusammen.

Für den Workshop dienen zwei Suse-Linux-9.1-Systeme als Basis. Der mit der Distribution mitgelieferte Kernel ist für den Einsatz der VPN-Software bereits vorbereitet. Die Version 2.04 von Free S/WAN gehört ebenfalls zum Standard-Lieferumfang der Suse-Distribution. Für den Einsatz von Free S/WAN wählen Sie mittels Yast das entsprechende Software-Paket aus. Weitere für die Installation und den Betrieb des VPN notwendige Software-Pakete werden automatisch hinzugefügt. Der Einsatz mit anderen Distributionen bereitet ebenfalls keine Probleme. Der Kasten »Free S/WAN im Eigenbau« auf Seite 66 beschreibt, wie Sie Free S/WAN komplett installieren.


Vorbereitungen

VPN unter Linux

Bevor Sie mit der Konfiguration des VPN beginnen, sollten Sie sicher sein, dass die genutzten Gateways ohne VPN-Software eine Verbindung zu anderen Netzen aufbauen können. Versuchen Sie, einen Ping zu senden oder sich mittels SSH auf dem Gateway anzumelden. Stellen weiterhin sicher, dass das Routing hinter den Gateways in das andere Netzwerk funktioniert. Wenn Free S/WAN zusammen mit der Distribution ausgeliefert wird, sollte zunächst ein neues Schlüsselpaar erstellt werden. Der Aufruf hierfür lautet:

ipsec newhostkey ?output /etc/ipsec.secrets ?hostname left.athome.local

Das RSA Key-Paar findet man schließend in der Datei /etc/ipsec.secrets. Achten Sie darauf, dass nur der User root die Berechtigung besitzen darf, diese Datei zu lesen. Führen Sie den Befehl auf beiden Gateways aus und passen sie dabei jeweils den hostname an.


Allgemeine Einstellungen

VPN unter Linux

Bereits während der Installation wurden die Free-S/WAN-Programme und die Dokumentation eingespielt. Die Datei ipsec.conf, die im Verzeichnis /etc liegt, ist für die Konfiguration zuständig. Im Folgenden finden Sie die notwendigen Anpassungen der Dateien für den Aufbau eines Site-to-Site-VPN. Die Datei ipsec.conf besteht aus einem allgemeinen Teil und speziellen Abschnitten für Verbindungen.

Die Debug-Meldungen der IPSec-Kernelfunktionen sowie des Free S/WAN Dämons pluto werden festgelegt mit den beiden Zeilen:

klipsdebug=none
plutodebug=none

Der Standardwert none sollte beibehalten werden, da eine aktive VPN-Verbindung ein erhebliches Log-Volumen erzeugt. Ein Gateway besitzt zu jedem Netzwerk eine Verbindung, an das es angeschlossen ist. Damit die Pakete zwischen den Netzwerken über das Gateway weitergeleitet werden, muss das IP-Forwarding aktiv sein. Free S/WAN startet diese Funktion automatisch mit, wenn dieser Eintrag gesetzt ist:

forwardcontrol=yes

In einem speziellen Verbindungsabschnitt conn %default können Vorgaben für Verbindungsparameter gemacht werden. Der Eintrag für keyringretries bestimmt, wie viele Versuche für einen Verbindungsaufbau durchgeführt werden sollen. Im Test empfiehlt sich hier ein Wert zwischen eins und drei. Im produktiven Einsatz sollte der Wert auf null (für unbegrenzt) gesetzt sein.


Site-to-Site-VPN

VPN unter Linux

Bei einem Site-to-Site-VPN werden zwei Netzwerke über das Internet miteinander verbunden. Free S/WAN sorgt dafür, dass die Daten bei der Übertragung über das Internet verschlüsselt sind. In jedem Netzwerk stellt jeweils ein Gateway eine Verbindung zwischen dem internen Netz und dem Internet her. Bei der Konfiguration unterscheidet Free S/WAN zwischen dem Left- und Right-Gateway beziehungsweise -Subnetz. Damit Sie später nicht durcheinander kommen, sollten Sie sich Ihre Netzstruktur aufzeichnen. Für die Konfiguration genügt es, das File ipsec.conf auf einem der Rechner zu erstellen und es anschließend auf das zweite System zu kopieren. Für den Workshop tragen die beiden Gateways die Namen left.athome.local und right.athome.local. Beide Gateways sind über das Netzwerk 192.168.4.0/24 miteinander verbunden. Die grundlegenden Arbeiten für das Setup der VPN-Verbindung erfolgen zunächst auf dem Gateway right.athome.local.

Beide Gateways sollen für die Authentifizierung die RSA-Signaturen verwenden. Hierfür muss der öffentliche Schlüssel von beiden Systemen vorliegen. Bei der Ermittlung des RSA-Schlüssels hilft Ihnen der folgende Befehl:

ipsec showhostkey ?right

Stellen Sie anschließend eine Verbindung zum zweiten Gateway her und rufen Sie

ipsec showhostkey ?left

auf. Liegen beiden Schlüssel vor, kann die Verbindung erstellt werden. Fügen Sie dazu diese Zeilen am Ende der Datei /etc/ipsec.conf hinzu.

conn ipro2autor
left=192.168.4.2
leftsubnet=192.168.9.0/24
leftid=@left.athome.local
leftrsasigkey=0sAQOm2 ...
right=192.168.4.1
rightsubnet=192.168.1.0/24
rightid=@right.athome.local
rightrsasigkey=0sAQO ... auto=add


Konfigurationsdatei

VPN unter Linux

Jede Verbindung wird in ipsec.conf durch das Schlüsselwort conn gekennzeichnet. Hinweis: Beachten Sie, dass einzelne Einträge für eine Verbindung per Tab eingerückt werden, damit Free S/WAN diese korrekt erkennt. Unsere erste Verbindung soll den Namen ipro2autor tragen. Als Erstes werden alle Angaben für das linke Gateway angegeben. Die IP-Adresse des IPSec-Netzwerk-Interfaces des Gateways enthält der Eintrag left. Das über dieses Ga
teway erreichbare Netzwerk steht im Eintrag leftsubnet. Wie sich der linke Gateway authentifiziert, bestimmt der Eintrag in leftid. Hier kann eine IP-Adresse oder ein Rechnername stehen. Mit einem vorangestellten @ wird ein Name als String behandelt und nicht durch den Nameservice aufgelöst.

Den öffentlichen Schlüssel des Gateways enthält der Eintrag leftrsasigkey. Die rechte Seite des VPNs ist adäquat zu konfigurieren. Nachdem die Datei erstellt wurde, wird sie auf den zweiten (den linken) Gateway kopiert:

scp /etc/ipsec.conf left.athome.local:/etc/ipsec.conf

Starten Sie den IPSec-Dienst auf beiden Gateways:

rcipsec start

Ein Blick in die Datei /var/log/messages verrät, ob die Verbindung korrekt geladen wurde:

added connection description "ipro2autor"

Hinweis: Wenn später die VPN-Verbindung korrekt arbeitet, sollte das Startskript für den entsprechenden Runlevel automatisch geladen werden.


Verbindungsaufbau

VPN unter Linux

Zum Abschluss wird noch die Verbindung zwischen den beiden Gateways aufgebaut:

ipsec auto ?up ipro2autor

Wenn die VPN-Verbindung korrekt hergestellt wurde, sehen sie auf dem Bildschirm die Ausgabe

104 "ipro2autor" #4: STATE_MAIN_I1: initiate
106 "ipro2autor" #4: STATE_MAIN_I2: sent MI2, expecting MR2
108 "ipro2autor" #4: STATE_MAIN_I3: sent MI3, expecting MR3
004 "ipro2autor" #4: STATE_MAIN_I4: ISAKMP SA established
112 "ipro2autor" #5: STATE_QUICK_I1: initiate
004 "ipro2autor" #5: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x1d6d3649 0xfad8b229}

Für den Aufbau der Verbindung genügt es, wenn der Befehl auf einem der beiden Gateways aufgerufen wird. Beachten Sie eventuelle Fehlermeldungen, wenn keine Verbindung aufgebaut werden konnte oder Fehler im Konfigurationsfile vorliegen. Ein Blick in das Logfile /etc/log/messages kann bei der Fehlersuche helfen. Mittels eines Pings kann die Verbindung zwischen den beiden Subnetzen getestet werden. Wer die korrekte Funktion des VPNs testen will, der kann sich mit einem Paket-Sniffer wie ethereal oder tcpdump den Datenstrom zwischen den beiden Gateways beobachten. Ist man mit den Einstellungen für die Site-to-Site-Verbindung zufrieden, so kann der Eintrag

auto=add

durch

auto=start

ersetzt werden. Auf diese Weise wird die VPN-Verbindung automatisch gestartet.


Firewall & Clients

VPN unter Linux

Eine Firewall sollte die internen Daten der Subnetze zusätzlich schützen. Damit ein VPN-Gateway eine Verbindung zu einem anderen Gateway aufnehmen kann, muss die Firewall den UDP-Port 500 und die Protokolle Nummer 50 (ESP) und 51 (AH) des IPSec-Protokolls passieren lassen.

Jedes kommerzielle VPN-Produkt arbeitet mit dem IPSec-Protokoll. In Kombination mit Windows-VPN-Clients können so auch End-to-Site-Verbindungen zwischen einem Free-S/WAN-Gateway und einem Windows-System hergestellt werden.


Ausbaufähig

VPN unter Linux

Dieser Workshop kann nur einen kleinen Einblick in die VPN-Funktionen von Free S/WAN geben. Neben den hier gezeigten Site-to-Site-VPN lassen sich mit Free S/WAN zum Beispiel auch sichere VPN-Verbindungen zu mobilen Linux-Clients aufbauen.

Zusätzlich zu den hier verwendeten RSA-Schlüsseln beherrscht das mit Suse Linux 9.1 ausgeliefert Free-S/WAN-Paket auch die Verwaltung der öffentlichen Schlüssel per DNS-Server und kann diese mittels einer Public Key Infrastruktur (PKI) und digitalen Zertifikaten verwalten. Mehr Informationen hierzu bietet die Free-S/WAN-Homepage www.freeswan.org.

Wenn Sie über das Internet Daten austauschen, sollten Sie in jedem Fall auf sichere VPN-Verbindung setzen und etwaigen Datendieben keine Chance geben. Der Aufwand hierfür ist vergleichsweise gering.