Obsah

IPsec

Teorie

IKEv1

IKEv2

Implementace

Strongswan prakticky

Verze od 5.2.0

swanctl --initiate --child <name> [--ike <name>] [--timeout <s>] [--raw|--pretty]
swanctl --terminate --child <name> | --ike <name | --child-id <id> | --ike-id <id> [--timeout <s>] [--raw|--pretty]

Verze před 5.2.0

Příklad IPsec serveru pro Windows 7

Poznámky, Tipy, FAQ

Ladění

  pubkey:    RSA 2048 bits, has private key

Obnova tunelu

auto=route
dpdaction=restart

Průchod IPsec jádrem

iptables -t filter -I OUTPUT -p esp -j DROP
iptables -t filter -I OUTPUT -p ah -j DROP
iptables -t filter -I OUTPUT -p udp -m multiport --dports 500,4500 -j DROP
iptables -t mangle -I PREROUTING -m policy --pol ipsec --dir in -j DROP
iptables -t mangle -I POSTROUTING -m policy --pol ipsec --dir out -j DROP

Virtuální IP adresy

Při definici tunelu se nastavuje, které IP adresy jsou na left/right straně dostupné. V případěš tunelu host-host je na každé straně dostupná právě jedna IP adresa (uzlů). U tunelu site-site mohou být definovány celé rozsahy, které uzel zpřístupňuje.

Virtuální IP adresa slouží jako dodatečná adresa. Strongswan implementuje přidělování virtuální IP adresy pouze klientům. Klient si zažádá, server přes tunel přidělí.

Pokud je potřeba nastavit virtuální IP na server, lze to provést ručně pomocí nastavení IP adresy na nějaké síťové rozhraní (klidně loopback) a oznámení této adresy v left/rightsubnet.

Virtuální adresy se hodí pro řešení konfliktů IP adres (stejná adresace v místní a vzdálené síti), identifikace klienta podle IP (vždy stejná) nebo třeba implementaci failover serveru (při navázání náhradního tunelu se komunikuje pořád se stejnou remote IP).

Route-based VPN / VTI

Zpracování IPsec je obvykle založeno na policies. Po bežném routování se kontroluje SPD (Secure Policy Database) a pokud se je nalezeno odpovídající SA (Security Association), paket je zpracován přes IPsec. Zkrátka pokud je aktivní IPsec tunel, jeho SA left/right subnety odpovídají paketu, jde paket do tunelu.

Router-based VPN využívá virtuální síťové rozhraní VTI (Virtual Tunnel Interface). Je to ale pouze jakoby obal pro IPsec policies. Pokud paket nasměrujeme na VTI spojené s IPsec tunelem, jehož SA nebude odpovídat src/dst, paket přes tunel stejně nepůjde. Řeší se to nastavením politiky na 0.0.0.0/0 (tedy SA odpovídají všechny zdroje/cíle). Do VTI můžemee paket nasměrovat přes routovací tabulku nebo přes iptables mark. IPsec tunel je s VTI spojen také přes mark.

Router-based VPN se tedy hodí, pokud potrebujeme mít větší kontrolu nad tím, co chodí přes tunel. Například pokud máme třeba dvě IPsec brány a chceme přes routovací tabulku určovat, která se má použít.

Užitečné příkazy

ipsec statusall
Listening IP addresses:
  10.10.10.1
  fd51:7e6d:cb2b:0:250:56ff:fc9e:c233
Connections:
sample-with-ca-cert:  %any...10.10.10.2  IKEv1/2
sample-with-ca-cert:   local:  [C=NL, O=Example Company, CN=john@example.org] uses public key authentication
sample-with-ca-cert:    cert:  "C=NL, O=Example Company, CN=john@example.org"
sample-with-ca-cert:   remote: [C=CZ, O=BARI2, CN=one.bari2.eu] uses public key authentication
sample-with-ca-cert:   child:  10.10.10.1/32 === 10.10.10.2/32 TUNNEL
Security Associations (1 up, 0 connecting):
sample-with-ca-cert[1]: ESTABLISHED 5 minutes ago, 10.10.10.1[C=NL, O=Example Company, CN=john@example.org]...10.10.10.2[C=CZ, O=BARI2, CN=one.bari2.eu]
sample-with-ca-cert[1]: IKEv2 SPIs: 6010310d76aa1385_i* c742b439ee7aec46_r, public key reauthentication in 2 hours
sample-with-ca-cert[1]: IKE proposal: AES_CBC_128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
sample-with-ca-cert{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cea441f5_i cf127dbc_o
sample-with-ca-cert{1}:  AES_CBC_128/HMAC_SHA1_96, 5292 bytes_i (63 pkts, 56s ago), 5376 bytes_o (64 pkts, 56s ago), rekeying in 37 minutes
sample-with-ca-cert{1}:   10.10.10.1/32 === 10.10.10.2/32
ipsec leases
Leases in pool '172.16.123.1', usage: 1/1, 1 online
     172.16.123.1   online   'C=NL, O=Example Company, CN=john@example.org'
ip -s xfrm state
src 10.10.10.1 dst 10.10.10.2
        proto esp spi 0xc99abce3(3382361315) reqid 1(0x00000001) mode tunnel
        replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
        auth-trunc hmac(sha1) 0x438b7318e495b86e5b9ab7058a57398f5efa89f8 (160 bits) 96
        enc cbc(aes) 0x535db872f57ed1b2f1d6665dd1aff4c2 (128 bits)
        encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 2519(sec), hard 3600(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          84(bytes), 1(packets)
          add 2017-02-23 17:03:31 use 2017-02-23 17:09:26
        stats:
          replay-window 0 replay 0 failed 0
src 10.10.10.2 dst 10.10.10.1
        proto esp spi 0xc92e5293(3375256211) reqid 1(0x00000001) mode tunnel
        replay-window 32 seq 0x00000000 flag af-unspec (0x00100000)
        auth-trunc hmac(sha1) 0x12364e3e549e32de4041093899e89b1d1f760c9e (160 bits) 96
        enc cbc(aes) 0xbcc9351746352a5bd5ab257e37fea49f (128 bits)
        encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 3022(sec), hard 3600(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          84(bytes), 1(packets)
          add 2017-02-23 17:03:31 use 2017-02-23 17:09:26
        stats:
          replay-window 0 replay 0 failed 0

Odkazy