====== IPSec ====== [[wpde>IPsec]] ist eine weit verbreitete Lösung für [[security:VPNs]]. IPSec ist ein Framework welches Mechanismen vorschreibt und auf Schicht 3 (Vermittlungsschicht) des [[netzwerke:iso:osi-modell|ISO/OSI-Modells]] läuft. Daher sind viele Einstellungen möglich und Komplexität erhöht bekanntlich die Schwierigkeit der Konfiguration. Zusätzlich kann es zu Problemen aufgrund unterschiedlicher Implementierungsgrade der Hersteller. * **Entscheidung zwischen AH oder ESP:** (Beide zusammen sind möglich aber unüblich) * **[[wpde>Authentication Header Protocol|AH (Authentication Header)]]**: Es identifiziert die Datenquelle und sichert die //Datenintegrität durch Authentifizierung// zu, liefert aber //keine Vertraulichkeit (Verschlüsselung) der Daten//. Es muss immer erst ein Security Agreement (SA) ausgehandelt werden. Der AH-Header wird zwischen dem IP-Datagramm und dem IP-Header eingefügt. //AH ist bei [[netzwerke:NAT (Network Address Translation)|NAT]] nicht möglich//. * **[[wpde>IPsec#Encapsulating_Security_Payload_.28ESP.29|ESP (Encapsulating Security Payload)]]**: Es soll die //Authentizität// der übertragenen Pakete sicherstellen und die //Daten durch Verschlüsselung sichern//. ESP versucht alle möglichen, nicht variablen Felder eines IP-Datagramms zu schützen. Es sind lediglich Felder ausgeschlossen, die sich auf dem Weg eines IP-Pakets durch ein IP-Netz durch die Router verändern können. * **Wahl der [[:Hash-Funktion|Hash]]- und [[security:Verschlüsselungsalgorithmen]]**: hier kann man sich an der aktuellen Situation orientieren, aktuell sind (noch) SHA-1 (MD5 nicht mehr) als [[:Hash-Funktion|Hash]] sinnvoll, für die Verschlüsselung z.B. AES, Blowfish und evtl. 3DES. * **IKE oder vorher ausgetauschte Schlüssel** * **IKE oder ISAKMP** bietet die sichere Schlüsselaushandlung über unsichere Netze und sorgt zusätzlich für eine periodische Änderung des Schlüssels * **vorher ausgetauschte Schlüssel** (Pre-shared-keys) müssen allen Kommunikationspartnern bekannt sein und auch entsprechend gesichert werden. Bei Verlust müssen alle Schlüssel ausgetauscht werden. Daher nur in wenigen Fällen sinnvoll. * **Tunnel- oder Transportmodus:** * **Tunnelmodus**: Im Tunnel Mode wird das ursprüngliche IP–Paket einfach in ein neues Paket eingepackt. Der ursprüngliche (innere) IP-Header wird erst wieder verwendet, wenn das empfangende Security-Gateway (das Tunnelende auf der Empfangsseite) die IP-Kapselung entfernt hat und das Paket dem eigentlichen Empfänger zustellt. Im Tunnelmodus sind //Gateway-zu-Gateway-, Peer-zu-Gateway- oder Peer-zu-Peer-Verbindungen// möglich. Ein Vorteil des Tunnelmodus ist, dass bei der Gateway-zu-Gateway-Verbindung nur in die Gateways (Tunnelenden) IPsec implementiert und konfiguriert werden muss. Angreifer können dadurch nur die Tunnelendpunkte des IPsec-Tunnels feststellen, nicht aber den gesamten Weg der Verbindung. * **Transportmodus**: Der IPsec-Header wird zwischen dem IP-Header und den Nutzdaten eingefügt. Der IP-Header bleibt unverändert und dient weiterhin zum Routing des Pakets vom Sender zum Empfänger. Der Transportmodus wird verwendet, wenn die „kryptographischen Endpunkte“ auch die „Kommunikations-Endpunkte“ sind. Nach dem Empfang des IPsec-Paketes werden die ursprünglichen Nutzdaten (TCP/UDP-Pakete) ausgepackt und an die höherliegende Schicht weitergegeben. Der Transportmodus wird v. A. für //Host-zu-Host//- oder //Host-zu-Router-Verbindungen// verwendet z. B. zu Netz-Management-Zwecken. * **Main oder Quick (Aggressive-)Modus**: * **Main-modus**: Er ist dem Quick oder Aggressive-modus aus Sicherheitserwägungen vorzuziehen. * **Quick- oder (Aggressive-)Modus**: Die Schritte des Main-modus werden auf drei zusammengefasst. Die Übertragung der [[:Hash-Funktion|Hashwerte]] der PSKs werden im Klartext übertragen, die Sicherheit des Verfahrens ist also eng mit der Stärke des pre shared keys und des [[:Hash-Funktion|Hashverfahrens]] gekoppelt. **Wenn hier nicht die maximale Schlüssellänge ausgewählt oder ein unsicher [[:Hash-Funktion|Hash]]-Algorithmus gewählt wurde, hat man keine Sicherheit mehr**. Wenn man hingegen PSK einsetzen will und vorher der Initiator nicht bekannt ist oder die Einstellungen bereits bekannt sind, könnte jedoch der Einsatz des aggressive-modus Sinn machen. :!: Manche Konfigurationen sind anfällig für Angriffe: - ESP im Tunnelmodus mit "confidentiality only" oder mit Integritätsprüfung durch höhere Protokolle. - manche Konfigurationen mit AH. Siehe [[http://marc.info/?l=bugtraq&m=111566201610350&w=2|NISCC Vulnerability Advisory IPSEC - 004033]]. ===== Links ===== * [[http://www.unixwiz.net/techtips/iguide-ipsec.html|An Illustrated Guide to IPsec]] * [[http://www.securityfocus.com/infocus/1821|Penetration Testing IPsec VPNs]] * [[http://www.microsoft.com/germany/technet/sicherheit/newsletter/ipsec.mspx|MSTechnet: Schützen von Netzwerken mit IPSec]] * [[http://www.onlamp.com/pub/a/bsd/2002/12/26/FreeBSD_Basics.html|Cryptosystems: Configuring IPSec]] * [[http://www.onlamp.com/pub/a/bsd/2003/01/09/FreeBSD_Basics.html|Cryptosystems: Debugging IPSec]] * [[http://www.unixwiz.net/techtips/iguide-ipsec.html|An Illustrated Guide to IPse]] * [[http://www.unixwiz.net/techtips/iguide-ipsec.html|IP-Sec-Guide]] * [[http://www.heise.de/netze/artikel/81851|Sichere Verteilung - IP-Sec Geschützte Multicast-Kommunikation]] ===== Clients ===== * [[http://www.shrew.net/software|Shrew Soft VPN Client]] - Opensource-Client für windows ===== strongswan Tunnel ===== # ipsec.conf # PSK -> /etc/ipsec.secrets config setup # strictcrlpolicy=yes # uniqueids = no charondebug="cfg 2, chd 2, esp 2, ike 2, knl 2, lib 2, net 2, tls 2" conn CONNECTION1 auto=start authby=secret #this specifies how the connection is authenticated type=tunnel #the type of connection left=gw1.firma1.tld #This is the public ip address of server A leftsubnet=1.2.3.4/24 #This is the subnet/private ip of server A right=gw2.firma2.tld #This is the public ip address of server B/remote server rightsubnet=5.6.7.8/24 #This is the subnet/private ip of server B keyexchange=ikev2 #Internet key exchange version ike=aes256-sha256-modp2048 #Internet key exchange, type of encryption (modp2048 = group14) ikelifetime=86400s #Time before re-authentication of keys lifetime=3600s esp=aes256-sha256-modp2048 #Encapsulation security suite of protocols # generate PSK: dd if=/dev/urandom count=1 bs=32 2>/dev/null | base64 /etc/ipsec.secrets $left $right : PSK "this_is_the_PSK_change_it!" ==== Routing aktiveren ==== Wenn routing nötig: # cat >> /etc/sysctl.conf << EOF net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 EOF sysctl -p ==== Verwaltungsbefehle ==== sudo ipsec restart sudo ipsec statusall sudo ipsec status