Nftables Erweiterungen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Erweiterte Funktionen in nftables

ipsec-policy

  • nftables kann prüfen, ob ein Paket durch IPsec gesichert ist.
  • Die Prüfung erfolgt mit dem Ausdruck ipsec in bzw. ipsec out.
  • Beispiele:
    • ipsec in reqid 1 accept
    • ipsec in spi 0x12345678 drop

policy-routing

  • Routing-Entscheidungen können mit meta mark oder fib beeinflusst werden.
  • Beispielsweise für differenziertes Routing je nach Paketmarkierung.
  • Beispiele:
    • meta mark set 0x10
    • fib daddr type local accept

mss-reduction

  • Um Probleme mit MTU und TCP über VPNs zu vermeiden, kann die MSS angepasst werden.
  • Dies wird mit dem tcp option parser in nftables realisiert.
  • Beispiel:
    • tcp flags syn tcp option maxseg size set 1300

Portforwarding mit sauberer Kontrolle

  • Bei klassischem Portforwarding wird nur nach der DNAT-Umsetzung geprüft.
  • Wenn man bereits den ursprünglichen Verbindungsaufbau zur öffentlichen Adresse prüfen will, muss vor DNAT markiert werden.

nftables-Beispiel für sauberes Portforwarding

vim /etc/nftables.conf

#!/usr/sbin/nft -f

flush ruleset

define wanif = ens18
define lanif = ens20
define wanip = 10.82.232.11
define webserver = 192.168.4.12

table inet mangle {
  chain prerouting {
    type filter hook prerouting priority mangle; policy accept;
    iifname $wanif ip daddr $wanip tcp dport 80 mark set 0x8
  }
}

table ip nat {
  chain prerouting {
    type nat hook prerouting priority dstnat; policy accept;
    iifname $wanif ip daddr $wanip tcp dport 80 dnat to $webserver:80
  }

  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;
    oifname $wanif ip saddr 192.168.4.0/24 snat to $wanip
  }
}

table inet filter {
  chain forward {
    type filter hook forward priority filter; policy drop;
    ct state established,related accept
    mark 0x8 accept
    # Optional: Übergabe an Suricata
    # mark 0x8 queue num 0
    log prefix "--nftables-drop-forward--"
  }

  chain input {
    type filter hook input priority filter; policy drop;
    iif "lo" accept
    ct state established,related accept
    log prefix "--nftables-drop-input--"
  }

  chain output {
    type filter hook output priority filter; policy drop;
    ct state established,related accept
    log prefix "--nftables-drop-output--"
  }
}

Weiterleitung an eine Queue (z. B. Suricata)

  • Statt accept in der FORWARD-Kette kann auch eine Queue verwendet werden:

mark 0x8 queue num 0

  • Suricata muss mit --nfqueue und Queue-Nummer 0 gestartet werden.
  • Beispiel-Aufruf:

suricata -c /etc/suricata/suricata.yaml -q 0