Nftables in Raspian Bullseye für Wireguard
Hallo,
ich habe gestern Raspian Bullseye auf meinem RPi4 installiert und wollte eigentlich meine Wireguard iptables-Regeln in nftables anwenden.
Die Übersetzung lautet:
inet = ip&ip6 gleichzeitig
für PostDown entsprechend nft delete ...
Damit lässt sich Wireguard nicht starten und meldet einen Fehler bei nft.
Also iptables installiert und die alten Regeln wieder genommen -> läuft.
Wenn ich jetzt:
aufrufe, werden die iptables scheinbar korrekt in nftables umgewandelt.
Mir ist auch noch aufgefallen, dass der Dienst gar nicht läuft:
Aber scheinbar braucht es den doch nicht.
Über Hilfe würde ich mich freuen.
MfG
ich habe gestern Raspian Bullseye auf meinem RPi4 installiert und wollte eigentlich meine Wireguard iptables-Regeln in nftables anwenden.
[Interface]
Address = 192.168.99.1/24, fd08::1/64
ListenPort = 51820
PrivateKey = ###=
MTU = 1412
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -D FORWARD -o %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
...
Die Übersetzung lautet:
nft add rule inet filter FORWARD iifname "%i" counter accept
nft add rule inet filter FORWARD oifname "%i" counter accept
nft add rule inet nat POSTROUTING oifname "eth0" counter masquerade
für PostDown entsprechend nft delete ...
Damit lässt sich Wireguard nicht starten und meldet einen Fehler bei nft.
Also iptables installiert und die alten Regeln wieder genommen -> läuft.
Wenn ich jetzt:
pi@raspberrypi:~ $ sudo nft list ruleset
table ip filter {
chain FORWARD {
type filter hook forward priority filter; policy accept;
iifname "wg0" counter packets 153997 bytes 496055433 accept
oifname "wg0" counter packets 96761 bytes 8636643 accept
}
}
table ip nat {
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oifname "eth0" counter packets 10118 bytes 1107027 masquerade
}
}
table ip6 filter {
chain FORWARD {
type filter hook forward priority filter; policy accept;
iifname "wg0" counter packets 0 bytes 0 accept
oifname "wg0" counter packets 0 bytes 0 accept
}
}
table ip6 nat {
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oifname "eth0" counter packets 962 bytes 92770 masquerade
}
}
Mir ist auch noch aufgefallen, dass der Dienst gar nicht läuft:
pi@raspberrypi:~ $ sudo systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:nft(8)
http://wiki.nftables.org
Aber scheinbar braucht es den doch nicht.
Über Hilfe würde ich mich freuen.
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1518358068
Url: https://administrator.de/contentid/1518358068
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
aufrufe, werden die iptables scheinbar korrekt in nftables umgewandelt.
Mir ist auch noch aufgefallen, dass der Dienst gar nicht läuft:
Normal weil die Userland automatisch im Hintergrund das ganze nach nftables konvertieren, einfach mal lesen ....Mir ist auch noch aufgefallen, dass der Dienst gar nicht läuft:
https://sanjuroe.dev/iptables-vs-nftables
Zitat von @Avenga:
P.S. die Fehlermeldung von Wireguard:
Error: Could not process rule: No such file or directory
Ist ja auch logisch, denn inet ist nicht gleich ip und in deinem Regelwerk gibt es nur eine Tabelle filter im Bereich ip und nicht in inet, somit ist klar daß er diese nicht findet.P.S. die Fehlermeldung von Wireguard:
Error: Could not process rule: No such file or directory
ich habe keine Ahnung wie man das in die wg0 config einbauen könnte.
Gar nicht weil wenn man komplett mit nftables arbeitet hat man diese natürlich schon vorher im Regelwerk fest angelegt. Wie man das macht ist ja allseits bekannt:https://wiki.nftables.org/wiki-nftables/index.php/Main_Page#Examples
Zitat von @Avenga:
Danke, mit nur "ip" statt "inet" kam die gleiche Fehlermeldung.
Kannst du mir sagen wie und vorallem was ich wo genau vorher im Regelwerk fest anlegen muss ?
Will ungern experimentieren.
DU willst also allen ernstes die Verantwortung deiner Firewall in UNSERE Hände legen?? DU musst dafür hinterher die Verantwortung tragen nicht wir!Danke, mit nur "ip" statt "inet" kam die gleiche Fehlermeldung.
Kannst du mir sagen wie und vorallem was ich wo genau vorher im Regelwerk fest anlegen muss ?
Will ungern experimentieren.
Also lies die Links oben ganz aufmerksam vor allem die Beispiele für SERVER und CLIENTS dann passt du deine Default Regeln an deine Bedürfnisse an (die benötigten Dienste die auf deinem Gerät laufen kennen wir ja nicht), kopierst das ganze in die Konfigurationsdatei nach /etc/nftables.conf und aktivierst den nftables Dienst mit sudo systemctl enable nftables.
Dann machst du folgendes in deiner wireguard config für die postup und postdowns, hier nur das Beispiel für die Forwarding-Rules (Namen der Tables und chains nat. anpassen), das Masquerading darfst du dann als Hausaufgabe selbst machen.
PostUp = nft add rule inet filter forward iifname "%i" counter accept; nft add rule inet filter forward oifname "%i" counter accept
PostDown = nft --handle list chain inet filter forward | grep -P 'iifname "%i"|oifname "%i"' | grep -Po '\d+$' | xargs -I{} nft delete rule inet filter forward handle {}
Das wäre jetzt plain Rules hinzufügen, effektiver würde es werden du legst ein set in nftables an und fügst nur das Interface zu dieser Liste hinzu dann musst du keine Regeln hinzufügen oder löschen sondern änderst nur das set.
Das sähe dann mit der Nutzung von set's bspw. so aus
nftables.conf
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state invalid drop
ct state established,related accept
iif "lo" accept
ip protocol icmp accept
ip6 nexthdr ipv6-icmp accept
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
iifname @wg_interfaces accept
oifname @wg_interfaces accept
}
chain output {
type filter hook output priority filter; policy accept;
}
set wg_interfaces {
type ifname
}
}
table inet nat {
chain PREROUTING {
type nat hook prerouting priority dstnat; policy accept;
}
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
oifname eth0 masquerade
}
}
Das Wireguard PostUpDown reduziert sich dann auf das Hinzufügen und Entfernen des Interface zum/aus dem set
PostUp = nft add element inet filter wg_interfaces {%i}
PostDown = nft delete element inet filter wg_interfaces {%i}
Fertig
Never trust anyone, always verify what you are doing!
Wieso Krücke?? Iptables ist genauso wie nftables eine Firewall die ebenso gut ihre Arbeit auf zig Millionen von Routern verrichtet, die Vorteile von nftables wirst du bei deinem derzeitigen Wissensstand eh nicht nutzen können, erst recht nicht auf der Hardware.