joe2017
Goto Top

Nftables mehrere tables verwenden

Hallo zusammen,

ich bin aktuell von iptables zu nft umgestiegen und hätte hierzu eine Frage.

Wie kann ich eine separate Table anlegen, welche jedoch in Konflikt zu einer vorherigen steht?
In diesem Fall soll die neue Table erzwungen werden.

Beispiel:
table ip filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state related, established accept
  }
  chain forward {
    type filter hook forward priority 0; policy drop;
  }
    chain output {
    type filter hook output priority 0; policy drop;
    ct state related, established accept
    udp dport 53 ip daddr 192.168.0.254 accept
    tcp dport 443 ip daddr 192.168.0.0/24 accept
  }
}

in diesem Beispiel ist in der ersten table "filter" der Port 443 nur für das interne Subnetz geöffnet. Anschließend möchte ich diesen Port temporär für das Internet öffnen. Jedoch funktionniert das nicht. Wo liegt mein Fehler?
table ip temp {
    chain output {
    type filter hook output priority 0; policy drop;
    ct state related, established accept
    tcp dport 443 accept
  }
}

Content-Key: 425360

Url: https://administrator.de/contentid/425360

Printed on: April 23, 2024 at 17:04 o'clock

Mitglied: 138810
138810 Mar 06, 2019 updated at 19:03:24 (UTC)
Goto Top
Wo liegt mein Fehler?
Öhm du weißt aber hoffentlich schon das die Output Chain nur für den Traffic den die Firewall selbst generiert und nicht des LANs?! Für Traffic der aus dem LAN kommt und über die FW ins Internet soll, ist die FORWARD Chain zuständig und die blockst du vollständig, also kann da nichts fließen.
Member: joe2017
joe2017 Mar 07, 2019 at 08:57:59 (UTC)
Goto Top
Ohhh...

Ich glaube da haben wir uns gerade Missverstanden. Das ist kein Eintrag auf meiner ausgehenden Netzwerk Firewall. Da hättest du natürlich Recht.
Hierbei handelt es sich um eine lokale Firewall am Client selbst und somit sollte OUTPUT dann doch wieder der richtige Eintrag sein.
Mitglied: 138810
138810 Mar 07, 2019 updated at 10:52:55 (UTC)
Goto Top
Öhm ..
in diesem Beispiel ist in der ersten table "filter" der Port 443 nur für das interne Subnetz geöffnet.
Was soll man da bitte anderes denken ??

Deine Fehler liegt darin daß du zwar eine neue Chain anlegst aber von der Output Chain nicht in die neue Chain springst weil dein jump fehlt.

Hier siehst du wie sowas geht:
https://wiki.nftables.org/wiki-nftables/index.php/Classic_perimetral_fir ...
War bisher bei iptables aber auch nicht anders...
Member: joe2017
joe2017 Mar 07, 2019 at 14:33:36 (UTC)
Goto Top
Ich hab noch eine andere Idee.

Ich könnte eine neue Rule anlegen und diese anschließend wieder löschen.
Aber wie kann ich eine zuvor angelegte Rule löschen wenn ich die Nummer der handle nicht kenne?

Das ganze soll automatisiert in einem bash Script abgearbeitet werden.

Beispiel:
sudo nft add rule filter output tcp dport 80 accept
sudo nft add rule filter output tcp dport 443 accept
sudo apt -y update
sudo DEBIAN_FRONTEND=noninteractive apt -y upgrade
hier möchte ich die beiden rules wieder löschen
Mitglied: 138810
Solution 138810 Mar 07, 2019 updated at 14:43:13 (UTC)
Goto Top
Ganz einfach indem du dir die handles anzeigen lässt und mit grep das ganze extrahiert
https://wiki.archlinux.org/index.php/nftables#Deletion
Oder die Regel an bestimmter Position einfügen
https://wiki.nftables.org/wiki-nftables/index.php/Simple_rule_management
Oder noch besser zwei FW Sets erstellen und dann zwischen denen hin und her schalten.
Oder eine neue Chain erstellen und dann nur den Jump zu dieser löschen /erstellen.

Such dir was aus.
Member: joe2017
joe2017 Mar 07, 2019 at 14:53:47 (UTC)
Goto Top
1. Da ich das ganze mit einem Script mache ist das natürlich ein etwas größerer Aufwand. Aber machbar!
2. Du meinst einfach immer vor Pos. 11 eintragen und anschließden Pos. 10 löschen. Daran habe ich auch schon gedacht.
3. Das hatte ich auch schon in betracht gezogen.
4. hierzu müsste ich ja wieder etwas eintragen und löschen. (selbes Problem)

Ich habe gehofft das es vielleicht eine einfachere Methode gibt.

Trotzdem Danke. face-smile
Mitglied: 138810
138810 Mar 07, 2019 updated at 14:58:14 (UTC)
Goto Top
Ich habe gehofft das es vielleicht eine einfachere Methode gibt.
Was ist an all dem so schwer??? Wenn das schon zu viel ist ist Linux nichts für dich.
Les dich ein und mach. Bringt dich weiter als wenn wir dir hier was vorbeten und du dadurch die Lesestunde auslässt 😉.
Die passenden Ansätze hast du jetzt ja.
Member: joe2017
joe2017 Mar 07, 2019 at 15:07:10 (UTC)
Goto Top
Naja, so war das auch wieder nicht gemeint. face-wink
Ich dachte einfach, dass es einen Befehl gibt den ich noch nicht gefunden oder überlesen habe.

Bei iptables kann man das ja relativ einfach anlegen und löschen.
Dann werde ich wohl den insert Befehl verwenden. Das scheint mir der sauberste Weg zu sein.

Dank dir für die Gedankenansätze.
Member: joe2017
joe2017 Mar 07, 2019 at 16:07:14 (UTC)
Goto Top
Ich habe mich jetzt doch für den ersten Weg entschieden und hab ein kleines Problem.
Ich lasse mir mit folgendem Befehl die entsprechende HANDLE anzeigen:
sudo nft list ruleset -nna | grep "tcp dport 443 accept" | cut -d "#" -f2  

Ich schaffe es jedoch nicht das ganze in eine Variable zu packen. Hier bekomme ich immer wieder eine Fehlermeldung
Kommando nicht gefunden
Member: joe2017
joe2017 Mar 07, 2019 at 16:09:23 (UTC)
Goto Top
Ich habs rausbekommen.

variable=$(sudo nft list ruleset -nna | grep "tcp dport 443 accept" | cut -d "#" -f2)  
Mitglied: 138810
138810 Mar 07, 2019 at 17:38:29 (UTC)
Goto Top
Ich sag's ja, Selbsthilfe ist die beste Medizin 🙂.