Nftables und ipsec

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Verbindungsaufbau

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:46:55.688317 IP 10.82.227.22.500 > 10.82.227.12.500: isakmp: parent_sa ikev2_init[I]
10:46:55.789900 IP 10.82.227.12.500 > 10.82.227.22.500: isakmp: parent_sa ikev2_init[R]
10:46:55.846630 IP 10.82.227.22.500 > 10.82.227.12.500: isakmp: child_sa  ikev2_auth[I]
10:46:55.850998 IP 10.82.227.12.500 > 10.82.227.22.500: isakmp: child_sa  ikev2_auth[R]

Verschlüsselter Verkehr

10:47:28.011055 IP 10.82.227.22 > 10.82.227.12: ESP(spi=0xc25a59e4,seq=0x1), length 136
10:47:28.011282 IP 10.82.227.12 > 10.82.227.22: ESP(spi=0xc13ff7cb,seq=0x1), length 136
10:47:29.012067 IP 10.82.227.22 > 10.82.227.12: ESP(spi=0xc25a59e4,seq=0x2), length 136
10:47:29.012211 IP 10.82.227.12 > 10.82.227.22: ESP(spi=0xc13ff7cb,seq=0x2), length 136

Firewall Regeln

VPN Traffic

Eingehendes IKE erlauben
  • nft add rule inet filter input iifname "$WANDEV" udp dport 500 ct state new accept
Ausgehendes IKE erlauben
  • nft add rule inet filter output oifname "$WANDEV" udp dport 500 ct state new accept
Eingehendes NAT-TRAVERSAL erlauben
  • nft add rule inet filter input iifname "$WANDEV" udp dport 4500 ct state new accept
Ausgehendes NAT-TRAVERSAL erlauben
  • nft add rule inet filter output oifname "$WANDEV" udp dport 4500 ct state new accept
Eingehendes ESP erlauben
  • nft add rule inet filter input iifname "$WANDEV" proto esp ct state new accept
Ausgehendes ESP erlauben
  • nft add rule inet filter output oifname "$WANDEV" proto esp ct state new accept

Realer Traffic

Verwenden von ipsec in und ipsec out
Funktion
Beim Entpacken des VPN Traffic wird das Paket im Kernel als IPsec markiert.
Dies kann später in der forward-Kette mit ipsec geprüft werden.
Eingehender Traffic von dem anderen Netz ins eigene erlauben
  • nft add rule inet filter forward iifname "$WANDEV" oifname "$LANDEV" ip saddr $DIENEN ip daddr $LAN ipsec in ct state new accept
Ausgehender Traffic vom eigenen Netz ins andere erlauben
  • nft add rule inet filter forward iifname "$LANDEV" oifname "$WANDEV" ip saddr $LAN ip daddr $DIENET ipsec out ct state new accept

Zu Bedenken

Verkehr, der in den VPN-Tunnel soll, muss vom SNAT ausgenommen werden
  • nft add rule ip nat postrouting oifname "$WANDEV" ip saddr $LAN ip daddr $DIENET return