Strongswan IPSEC Linux SWANCTL PSK XFRM - Security und Firewall Labor
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