Turris Omnia: netfilter

Seit Turris OS 7.1.0 wird nftables anstatt iptables verwendet

MAC filter mit einem set

Set anlegen

nft add set inet fw4 blackhole_mac { type ether_addr\; comment \"drop all packets from these hosts\" \; }

Oder, damit es dauerhaft bei jedem Start angelegt wird:

/etc/nftables.d/10-custom-filter-chains.nft
set blackhole_mac { type ether_addr elements = { 12:34:56:78:9a:bc } }

fw4 fügt das Set in the table inet fw4 ein

Elemente hinzufügen

nft add element inet fw4 blackhole_mac { 12:34:56:78:9a:bc }

Elemente entfernen

nft delete element inet fw4 blackhole_mac { 12:34:56:78:9a:bc }

Elemente des Sets auflisten

nft list set inet fw4 blackhole_mac

Test, ob Element im Set enthalten

nft get element ip filter blackhole_mac { 12:34:56:78:9a:bc } echo $? # returns 0 if found, 1 if not found

Passende Filterregel einfügen

Eine passende Regel kann man anscheinend leider nicht in /etc/nftables.d/*.nft unterbringen, da die Syntax mit @blackhole_mac nicht akzeptiert wird (oder ich habe noch nicht herausgefunden wie). Aber man kann die notwendige Regel durch ändern der Datei /etc/hotplug.d/iface/20-firewall bei jedem Neustart automatisch aktivieren (wichtig ist, dass man die neue Regel direkt nach dem Befehl "fw4 -q reload" einfügt:

/etc/hotplug.d/iface/20-firewall
... fw4 -q reload # Folgende Regel nach dem reload neu hinzufügen: nft insert rule inet fw4 forward ether saddr @blackhole_mac drop # Oder, falls Element *NICHT* in dem Set enthalten ist so: nft insert rule inet fw4 forward ether saddr != @allowed_mac_list drop

Auch in Turris OS 9.0.1 funktioniert die Syntax in /etc/nftables.d/*.nft mit dem Set nicht :-|

Die Regel irgendwie wie z.B. /etc/rc.local unterzubringen ist nutzlos, da sie durch das Hotplugsystem mit "fw4 -q reload" ja wieder entfernt wird.