IPSec ist eine Erweiterung für IPv4 (in IPv6 fest implementiert), um Authentifizierung und sichere (verschlüsselte) Übertragung auf Netzwerkprotokoll-Ebene zu realisieren. IPSec stellt aber nur ein Framework für eine verschlüsselte Verbindung bereit, es bietet eine solche nicht an.
IPSec ist auf der IP-Ebene (Network Layer) implementiert. Somit wirkt es auch auf der Transport-Ebene: TCP, UDP.
Insbesondere wird dies für VPNs und für LinuxWireless benötigt.
IPSec ist im Kernel 2.6.x implementiert. Man muss es also nicht patchen.
IPSec mit FreeSwan
Es folgt eine kleine Anleitung wie man einen externen Rechner mit fester IP bzw ein Subnet hinter einem solchen an sein Heimnetz mit dynamischer IP per IPSec koppelt. So habe ich es gemacht... bitte nach belieben kommentieren, korrigieren usw:)
Kernel patchen und FreeSwan Tools installieren
IPSec-Unterstützung gibt es im Linux kernel durch "Freeswan".. das muss allerdings erst hineingepatched werden. also: Konfigurierte Kernelquellen bereithalten
Patch und FreeSwan Tools herunterladen
- Patch ausfuehren
- Kernel konfigurieren (neue Optionen unter "networking options" ganz unten; von den Entwicklern wird empfohlen, ipsec fest in den Kernel zu kompilieren)
- Kernel kompilieren, installieren, neu starten (...)
Tips für Debian-Benutzer
apt-get install kernel-patch-freeswan freeswan) installiert die Programme zur Konfiguration von FreeSWAN und einen von Debian um X509-Unterstützung erweiterten FreeSWAN Patch. Unter Debian baut man daraus wie folgt ein Kernel-Packet, das nachher mit dpkg -i installiert werden kann:
Aktuelle Kernel-Quellen besorgen (von mir mit 2.4.21 getestet) und in das Verzeichnis /usr/src entpacken
- In das Verzeichnis wechseln
export PATCH_THE_KERNEL=YES ausführen
make-kpkg --config=menuconfig --added-patches=freeswan kernel_image aufrufen. (make-kpkg befindet sich in dem Paket kernel-package.) Dies patched die Sourcen und ruft danach make menuconfig auf. Wenn man seine Einstellungen abspeichert wird automatisch der Kernel kompiliert und es findet sich in /usr/src ein deb-Paket mit dem Kernel, das per dpkg -i installiert werden kann.
Tips für SuSE-Benutzer
Der SuSE-Standard-Kernel enthält schon Unterstützung für FreeSWAN. Es muß lediglich das entsprechende Modul geladen werden. Dies geschieht per: modprobe ipsec (root-Reche erforderlich). Zusätzlich muß natürlich auch das Paket installiert werden, das die Programme zur Konfiguration von FreeSWAN enthält.
Forwarding muss auf beiden Gateway-Rechnern aktiviert sein. Masquerading muss für das jeweilige Zielnetz deaktiviert sein (s.u.)
FreeSwan konfigurieren
Ich beschreibe die Konfiguration am Beispiel eines Netzes hinter einem Rechner mit statischer IP (hier: 217.170.168.136 (aus der Luft gegriffene IP), das per IPSec an das Heimnetz hinter einem Rechner mit dynamischer IP gekoppelt werden soll.
Das Netz hinter dem Rechner mit der statischen IP ist 10.0.2.0/24, das Heimnetz ist 10.0.0.0/24.
Erstmal brauchen beide Rechner ein Schlüsselpaar. Dieses wird in /etc/ipsec.secrets gespeichert. Wir führen auf beiden Rechnern aus:
ipsec newhostkey --output /etc/ipsec.secrets
Dann brauchen beide ein "Shared Secret" mit dem die Daten verschlüsselt werden, dazu fügen wir oben in die ipsec.secrets auf beiden Rechnern ein:
217.170.168.136 0.0.0.0: PSK "Shared secret Deiner Wahl in Anfuehrungszeichen"
statt "0.0.0.0" kann man auch "%any" schreiben.
Danach erstellen wir die ipsec.conf für beide Rechner:
Für den Rechner mit der dynamischen IP: (hier: left)
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file # basic configuration config setup interfaces=%defaultroute klipsdebug=none plutodebug=none plutoload=%search plutostart=%search uniqueids=yes # defaults for subsequent connection descriptions # (mostly to fix internal defaults which, in retrospect, were badly chosen) conn %default keyingtries=0 disablearrivalcheck=no authby=rsasig compress=yes auto=add # sample VPN connection conn isis-osiris # Left security gateway, subnet behind it left=%defaultroute leftsubnet=10.0.0.0/24 leftid=@isis.osiris.net leftrsasigkey=# hier den public key aus der ipsec.secrets von left einfuegen # # Right security gateway, subnet behind it, next hop toward left. right=217.170.168.136 rightsubnet=10.0.2.0/24 rightnexthop=217.170.168.1 rightid=@osiris.net rightrsasigkey=# hier den public key aus der ipsec.secrets von right einfuegen # auto=start
diese ipsec.conf kopieren wir auf den Rechner mit der statischen IP und ändern folgendes:
in conn isis-osiris:
left=%any auto=add keyingtries=1
... fertig.
IPSec auf beiden Rechnern (neu)starten:
/etc/init.d/ipsec restart
Status bewundern.
ipsec whack --status
Die Maschine mit der dynamischen IP sollte die IPSec Verbindung automatisch initiieren (wegen auto=start).
Firewall/Routing Einstellungen
Damit man jetzt zwischen den beiden Netzen 10.0.0.0 und 10.0.2.0 kommunizieren kann, müssen natürlich noch entsprechende Routen gelegt werden:
auf Heimnetz-router:
route add -net 10.0.2.0 netmask 255.255.255.0 dev ipsec0
auf dem anderen Router:
route add -net 10.0.0.0 netmask 255.255.255.0 dev ipsec0
Ausserdem sollten Verbindungen zwischen diesen beiden Netzen nicht masqueraded werden.
Damit die beiden Gateways eine IPSec Verbindung aufbauen können, muss auf beiden Seiten UDP port 500 offen sein, sowie das IP Protokoll ESP (50) erlaubt sein.
Test
Es ist zu beachten, dass die beiden Gateways selbst nicht über den IPSec tunnel kommunizieren können. Das geht zwar, aber dazu ist wohl ein zusätzlicher Tunnel nötig (dazu lesen wir in der offiziellen FreeSwan Doku nach;). Wenn die Verbindung steht, sollte man einfach aus dem Heimnetz eine IP in dem Netz hinter dem anderen Router pingen können.
Links
How to setup IPsec interoperable for Linux, OpenBSD and Kame/*BSD
Roadwarrior mit Raccoon Konfiguration eines Roadwarrior clients mit raccon, racoonctl und ipsec.conf (2006-11-10 en)