netzwerke:ipsec

IPSec

IPsec ist eine weit verbreitete Lösung für VPNs. IPSec ist ein Framework welches Mechanismen vorschreibt und auf Schicht 3 (Vermittlungsschicht) des 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)
    • 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 NAT nicht möglich.
    • 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- und Verschlüsselungsalgorithmen: hier kann man sich an der aktuellen Situation orientieren, aktuell sind (noch) SHA-1 (MD5 nicht mehr) als 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 Hashwerte der PSKs werden im Klartext übertragen, die Sicherheit des Verfahrens ist also eng mit der Stärke des pre shared keys und des Hashverfahrens gekoppelt. Wenn hier nicht die maximale Schlüssellänge ausgewählt oder ein unsicher 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:

  1. ESP im Tunnelmodus mit „confidentiality only“ oder mit Integritätsprüfung durch höhere Protokolle.
  2. manche Konfigurationen mit AH.

Siehe NISCC Vulnerability Advisory IPSEC - 004033.

# 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!"

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

sudo ipsec restart

sudo ipsec statusall

sudo ipsec status