Strongswan IPSEC Linux SWANCTL PSK XFRM - Security und Firewall Labor

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Installation

  • apt update
  • apt install strongswan strongswan-swanctl

Bekannte Einschränkung unter Debian 13

strongSwan 6.0.1 (Debian 13) gibt beim Aufruf von swanctl zahlreiche Plugin-Warnmeldungen auf stderr aus, z. B.:

plugin 'aes': failed to load - aes_plugin_create not found and no plugin file available

Dies ist ein bekannter Upstream-Bug: swanctl 6.0.1 versucht alle Build-Plugins zu laden, obwohl diese in strongSwan 6 durch OpenSSL ersetzt wurden. Der Bug wurde in strongSwan 6.0.2 behoben. Die Funktion des VPN-Tunnels ist nicht beeinträchtigt. Zur Unterdrückung der Warnmeldungen:

  • vim /etc/bash.bashrc
alias swanctl='swanctl 2>/dev/null'
  • source /etc/bash.bashrc

Voraussetzungen

  • Beide Systeme: Linux mit strongSwan und swanctl
  • Es wird ausschließlich VICI (swanctl) verwendet, keine ipsec.conf
  • XX eigene Seite, gegenüberliegende Seite YY

Szenario

Einstellung fw.it2XX.int fw.it2YY.int
IP Address 192.168.hs.2XX 192.168.hs.2YY
Internes Netz 172.26.2XX.0/24, 10.2XX.1.0/24 172.26.2YY.0/24, 10.2YY.1.0/24
Tunnel-IP (ipsec0) 169.254.100.1 169.254.100.2
Pre-Shared Key (PSK) 123Start$
Phase 1 AES256 – SHA256 – DH16
Phase 2 AES256 – SHA256 – DH16

Konfiguration

  • Diese Datei ist auf beiden Seiten identisch aufgebaut – nur die Adressen unterscheiden sich.
  • vim /etc/swanctl/conf.d/it2XX-it2YY.conf
connections {
  gw-gw {
    local_addrs  = 192.168.hs.2XX
    remote_addrs = 192.168.hs.2YY
    local {
      auth = psk
      id = 192.168.hs.2XX
    }
    remote {
      auth = psk
      id = 192.168.hs.2YY
    }
    children {
      net-net {
        local_ts  = 0.0.0.0/0
        remote_ts = 0.0.0.0/0
        if_id_out = 10
        if_id_in  = 10
        start_action = start
        esp_proposals = aes256-sha256-modp4096
      }
    }
    version = 2
    proposals = aes256-sha256-modp4096
  }
}
secrets {
  ike-1 {
    id-1 = 192.168.hs.2XX
    id-2 = 192.168.hs.2YY
    secret = "123Start$"
  }
}

XFRM-Interface erstellen

Manuell zum Testen

Eigene Seite XX
  • ip link add ipsec0 type xfrm if_id 10
  • ip link set ipsec0 up
  • ip addr add 169.254.100.1/30 dev ipsec0
  • ip route add 172.26.2YY.0/24 dev ipsec0
  • ip route add 10.2YY.1.0/24 dev ipsec0

Statisch und rebootfähig

  • vim /etc/network/interfaces
auto ipsec0
iface ipsec0 inet static
 address 169.254.100.1/30
 pre-up ip link add ipsec0 type xfrm if_id 10
 post-up ip route add 172.26.2YY.0/24 dev ipsec0
 post-up ip route add 10.2YY.1.0/24 dev ipsec0

Dienst starten

  • systemctl enable strongswan
  • systemctl start strongswan
  • swanctl --load-all

Verbindung prüfen

Geladene Verbindungen anzeigen
  • swanctl -L
Aktive IKE- und CHILD-SAs anzeigen
  • swanctl -l
XFRM Security Associations (Kernel)
  • ip xfrm state
XFRM Policies (Kernel)
  • ip xfrm policy
Interface-Statistiken
  • ip -s link show ipsec0
Traffic auf dem Tunnel-Interface
  • tcpdump -i ipsec0 -n
ESP-Pakete auf dem physischen Interface
  • tcpdump -i eth0 -n esp

Fehlerbehandlung

Journalctl
  • journalctl -u strongswan
Tunnel bereits aktiv

not establishing CHILD_SA ... due to existing duplicate → Prüfen mit swanctl -l, Neuaufbau erzwingen:

  • swanctl --terminate --child net-net
  • swanctl --initiate --child net-net
XFRM-Interface neu erstellen
  • ip link del ipsec0
  • ip link add ipsec0 type xfrm if_id 10
  • ip link set ipsec0 up

Tabula Rasa

  • systemctl stop strongswan
  • apt purge strongswan strongswan-swanctl libstrongswan libstrongswan-standard-plugins
  • rm -rf /etc/strongswan* /etc/swanctl
  • ip link del ipsec0