Nftables und layer2 Firewall

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Vorab

Bei Virtualisierungen Bridge Ports auf Promisc setzen

Vm-promisc-1.png


Installation der Bridgeutils

  • apt install bridge-utils

/etc/network/interfaces

auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet static
 address 10.0.10.11/24
 gateway 10.0.10.1

auto enp0s8
iface enp0s8 inet manual

auto enp0s9
iface enp0s9 inet manual

auto vmbr0
iface vmbr0 inet manual
    bridge_ports enp0s8 enp0s9
    bridge_fd 5
    bridge_stp no
  • ifup vmbr0


Bridge-Filterung

Arten von Bridge-Ketten

  • Die Bridge-Familie bietet vier Kettenarten:
prerouting
  • Hier können Pakete vor der Forward-Datenbank (FDB) Entscheidung gefiltert werden.
  • Die FDB liefert den Bridge-Port, der für eine bestimmte Ziel-MAC-Adresse verwendet wird.
  • Wenn es noch keinen Eintrag in der FDB für eine gegebene Ziel-MAC gibt, werden die Pakete an alle Bridge-Ports geflutet.
  • Nach der FDB-Entscheidung können Pakete entweder dem Eingangs- oder dem Weiterleitweg folgen.
input
  • Hier können Pakete gefiltert werden, die an den IP-Stack übergeben werden.
  • Wenn Ihre Bridge-Schnittstelle eine IP-Adresse hat und Pakete an diese IP-Adresse gehen (oder diese IP-Adresse als Gateway verwendet wird), folgen die Pakete diesem Pfad (in diesem Fall verlassen die Pakete die Bridge, um in den IP-Stack einzutreten, also werden die Pakete "geroutet").
forward
  • Diese Hook kann verwendet werden, um Pakete zu filtern, die von einem Bridge-Port eingehen und an einen anderen Bridge-Port geliefert werden (dies ist der Bridge-Weiterleitungspfad, in diesem Fall werden die Pakete "gebridged").
output
  • Hier können Pakete gefiltert werden, die vom IP-Stack kommen und deren Ziel der Bridge-Port ist.
postrouting
  • Hier können Pakete gefiltert werden, die entweder vom IP-Stack kommen oder von einem anderen Bridge-Port weitergeleitet werden.

Arp

  • arp ist im Gegensatz zur Layer 3 Firewall nicht automatisch freigeschaltet

Ein weiteres Beispiel zum Akzeptieren von ARP-Paketen

  • nft add rule bridge filter forward ether type arp accept

Zustandsabhängige Filterung

  • Die Bridge-Familie unterstützt die Verbindungsverfolgung.
  • Sie müssen nur auf den Verbindungsstatusinformationen aus Ihrer Regelmenge übereinstimmen, um dies zu aktivieren.

Beispiel: Zustandsabhängige Bridge-Firewall

  • Wir erstellen einen bridgefilter
  • Wir erstellen die Policy drop
  • Connection Tracking wie üblich
  • arp ist generell erlaubt


nftables schnellstart

Bridge Firewall

Regeln

#!/usr/sbin/nft -f

flush ruleset

table bridge filter {

        chain forward {
                type filter hook forward priority 0; policy drop;
                ct state established,related accept
                iif enp0s8 ether type arp accept
                iif enp0s9 ether type arp accept
                oif enp0s9 udp dport 53 ct state new accept
                oif enp0s9 tcp dport 80 ct state new accept
                oif enp0s9 tcp dport 443 ct state new accept
                oif enp0s9 ip protocol icmp ct state new accept
                # Loggen von abgelehnten Paketen
                log prefix " nftables drop: "
        }

}