IPv6/Verschlüsselung und Authentifizierung: Unterschied zwischen den Versionen
K Textersetzung - „\{\|.*\n\|\n\|\}“ durch „“ |
Keine Bearbeitungszusammenfassung |
||
Zeile 96: | Zeile 96: | ||
[[Kategorie:IPv6]] | [[index.php?title=Kategorie:IPv6]] | ||
[[Kategorie:IPv6/Sicherheit]] |
Version vom 26. Juli 2023, 02:28 Uhr
Verschlüsselung und Authentifizierung
Zum Unterschied zu IPv4 ist die Verschlüsselung und die Authentifizierung ein zwingendes Feature bei IPv6. Diese Features werden normalerweise mit IPsec implementiert (das auch von IPv4 verwendet wird).
Nutzungsarten von Verschlüsselung und Authentifizierung
Zwei Arten von Verschlüsselung und Authentifzierung einer Verbindung sind möglich:
Transport-Modus
Der Transport-Modus ist ein Modus nur für Ende-zu-Ende-Verbindungen. Hier wird nur die Nutzlast (üblicherweise ICMP, TCP oder UDP) mit deren entsprechenden Headern verschlüsselt, wogegen der IP-Header nicht verschlüsselt wird (aber üblicherweise in die Authentifizierung eingebunden wird).
Bei Nutzung von AES-128 für Verschlüsselung und SHA1 für Authentifizierung reduziert dieser Modus die MTU um 42 Oktetts.
Tunnel-Modus
Der Tunnel-Modus kann einerseits für eine Ende-zu-Ende wie auch für eine Gatewas-zu-Gateway-Verbindung genutzt werden. Hier wird das komplette IP-Paket verschlüsselt und ein neuer IP-Header vorangestellt .
Dieser Modus reduziert die MTU um weitere 40 Oktetts (bei IPv6), ausgehend von der MTU des Transport-Modus.
Unterstützung im Kernel (ESP und AH)
Unterstützung im vanilla Linux Kernel 2.4.x
Fehlt in vanilla 2.4. In der Vergangenheit gab es einen Grund, die Linux Kernel Quellen frei von Export/Import-Kontrollgesetzen bzgl. Verschlüsselungs-Techniken zu halten. Dies ist auch ein Grund, wieso FreeS/WAN project nicht in die vanilla Quellen miteingebunden wurde.
Unterstützung im vanilla Linux kernel 2.6.x
Aktuelle Versionen (zum Zeitpunkt des Schreibens 2.6.9 und neuer) unterstützt IPsec für IPv4 und IPv6.
Die Implementierung wurde u.a. vom USAGI project unterstützt.
Automatischer Schlüssel-Austausch (IKE)
IPsec benötigt einen Schlüsselaustausch mit einem ”Geheimnis”. Dieser Vorgang wird meistens automatisch durch sogenannte IKE-Daemons durchgeführt. Diese führen ebenso die Authentifizierung der Partner durch, entweder durch ein gemeinsam bekanntes Geheimnis (auch ”pre-shared secret” genannt) oder bei RSA-Schlüssel (z.B. aus X.509 Zertifikaten).
Momentan stehen (für Linux) zwei verschiedene IKE-Daemons zur Verfügung, die aber sich ziemlich in Konfiguration und Benutzung unterscheiden.
Ich präferiere ”pluto” von der *S/WAN Implementierung, wei dieser eine überschaubare (und nur eine) Konfiguration.
IKE-Daemon ”racoon”
Der IKE-Daemon ”racoon” ist vom KAME-Project und auf Linux portiert worden. Aktuelle Linux-Distributionen beinhalten diesen Daemon im Paket ”ipsec-tools”. Zwei Programme sind für ein funktionierendes IPsec-Setup notwendig. Siehe dazu auch das Linux Advanced Routing & Traffic Control HOWTO / IPSEC.
Manipulation der IPsec SA/SP Datenbank mit dem Werkzeug ”setkey”
”setkey” ist für die Definition der Security Policy (SP) im Kernel wichtig.
Datei: /etc/racoon/setkey.sh
- Beispiel für eine Ende-zu-Ende verschlüsselte Verbindung im Transport-Modus
- Beispiel für eine Ende-zu-Ende verschlüsselte Verbindung im Tunnel-Modus
Beim anderen Partner ist ”in” mit ”out” zu vertauschen.
Konfiguration des IKE-Daemon ”racoon”
”racoon” benötigt eine Konfigurationsdatei zur Ausführung. Es beinhaltet zu der Security Policy entprechenden Einstellungen, welche vorher mit ”setkey” definiert wurde.
Datei: /etc/racoon/racoon.conf
Zudem muss das gemeinsame Geheimnis definiert werden:
Datei: /etc/racoon/psk.txt
IPsec mit IKE-Daemon ”racoon” starten
Zum Schluss muss der Daemon gestartet werden. Beim ersten Mal sollte Debug- & Vordergrund-Modus aktiviert werden. Das folgende Beispiel zeigt eine erfolgreiche Aushandlung von IKE-Phase 1 (ISAKMP-SA) und 2 (IPsec-SA):
Jede Richtung bekommt einen eigenen SPI (wie im IPsec-Standard definiert). Mit ”tcpdump” kann an der entprechenden Schnittstelle dann das Ergebnis eines IPv6-pings gesehen werden:
Wie erwartet, werden die ausgehandelten SPIs angezeigt.
Mit ”setkey” werden die aktiven Parameter angezeigt:
IKE-Daemon ”pluto”
Der IKE-Daemon ”pluto” ist in den Paketen der *S/WAN-Projekte beinhaltet. Das *S/WAN-Projekt startete zu Anfags als FreeS/WAN. Leider wurde die Weiterentwicklung von FreeS/WAN in 2004 eingestellt. Aufgrund der langsamen Entwicklungsgeschwindigkeit in der Vergangenheit entstanden zwei Spin-Offs: strongSwan und Openswan. Heutzutage stehen installationsfertige Pakete bereit, u.a. von Openswan (in Fedora Core 3 beinhaltet).
Ein großer Unterschied zu ”racoon” ist, dass nur eine Konfigurationsdatei notwendig ist. Zudem steht ein initscript für automatisches Starten beim Booten zur Verfügung.
Konfiguration des IKE-Daemon ”pluto”
Die Konfiguration ist der zu IPv4 sehr ähnlich, nur eine wichtige Option ist notwendig.
Datei: /etc/ipsec.conf
Zudem muss das gemeinsame Geheimnis definiert werden:
Datei: /etc/ipsec.secrets
IPsec mit IKE daemon ”pluto” starten
Wenn die Installation von Openswan erfolgreich war, sollte ein initscript zum Starten von IPsec zur Verfügung stehen. Dann einfach auf jedem Partner folgendes ausführen:
Danach kann die Verbindung auf einem Partner gestartet werden. Wenn im folgenden die Zeile ”IPsec SA established” erscheint, hat die Aushandlung funktioniert.
Weil *S/WAN und setkey/racoon die gleiche IPsec-Implementation im Linux kernel 2.6.x benutzen, zeigt ”setkey” auch hier die aktiven Parameter:
Anmerkungen:
Bei Linux Kernel 2.6.x kann der IPsec-Status und die Policy auch mit ”ip” angezeigt werden: