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.