Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
fortgeschrittene:nftables [2022/09/14 13:46] ingo_wichmann [interaktiv] |
fortgeschrittene:nftables [2023/12/27 11:31] (aktuell) ingo_wichmann [interaktiv] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== nftables beobachten ====== | ====== nftables beobachten ====== | ||
watch -d nft -a list ruleset | watch -d nft -a list ruleset | ||
+ | (( oder, wenn nur die filter-Regel von Interesse sind: | ||
+ | watch -d nft -a list table inet filter | ||
+ | )) | ||
====== nftables Regeln zurücksetzen/löschen ====== | ====== nftables Regeln zurücksetzen/löschen ====== | ||
nft flush ruleset | nft flush ruleset | ||
- | ===== counter zurücksetzen ===== | + | |
- | auf die harte Tour: alle aktuellen Regeln löschen und neu einlesen: | + | |
- | (echo 'flush ruleset'; nft -s list ruleset) | nft -f - | + | |
====== erste nftables Regeln ===== | ====== erste nftables Regeln ===== | ||
===== iptables-ähnliche Tabellen und Chains anlegen ===== | ===== iptables-ähnliche Tabellen und Chains anlegen ===== | ||
==== interaktiv ==== | ==== interaktiv ==== | ||
- | (( TODO: kann ich das inet weglassen? Oder kriege ich dann ip?)) | ||
nft -ia | nft -ia | ||
add table inet filter | add table inet filter | ||
Zeile 17: | Zeile 16: | ||
add chain inet filter output { type filter hook output priority filter; } | add chain inet filter output { type filter hook output priority filter; } | ||
(( Since Linux kernel 5.2, there is support for performing stateful NAT in inet family chains: http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_(NAT) )) | (( Since Linux kernel 5.2, there is support for performing stateful NAT in inet family chains: http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_(NAT) )) | ||
- | add table ip nat | + | add table inet nat |
- | add chain ip nat prerouting { type nat hook prerouting priority dstnat; } | + | add chain inet nat prerouting { type nat hook prerouting priority dstnat; } |
- | add chain ip nat postrouting { type nat hook postrouting priority srcnat; } | + | add chain inet nat postrouting { type nat hook postrouting priority srcnat; } |
==== mit Konfigurationsdatei ==== | ==== mit Konfigurationsdatei ==== | ||
- | Erste Zeile ''flush ruleset'' beachten, sonst werden die Regeln hinzugefügt. | ||
<file txt nftables.conf> | <file txt nftables.conf> | ||
flush ruleset | flush ruleset | ||
Zeile 47: | Zeile 45: | ||
nft -f nftables.conf | nft -f nftables.conf | ||
+ | ===== erste tcp-Ports schließen ===== | ||
+ | nft -ia | ||
+ | insert rule inet filter input tcp dport { 80, 3128 } drop | ||
+ | |||
+ | Alternativ, mit named sets: | ||
+ | nft -ia | ||
+ | add set inet filter port_blacklist { type inet_service; } | ||
+ | add element inet filter port_blacklist { 80, 3128 } | ||
+ | replace rule inet filter input handle 7 tcp dport @port_blacklist drop | ||
+ | |||
+ | ===== einzelne Regel löschen ===== | ||
+ | nft -ia | ||
+ | delete rule inet filter input handle 7 | ||
====== nftables Regeln debuggen ====== | ====== nftables Regeln debuggen ====== | ||
===== counter nutzen ===== | ===== counter nutzen ===== | ||
- | ''accept'', ''drop'' oder ''reject'' jeweils ''counter'' voran stellen: ''counter accept'', ''counter drop'' oder ''counter reject'' und Regeln wie oben beschrieben mit ''watch -d nft -a list ruleset'' beobachten. | + | ''accept'', ''drop'' oder ''reject'' jeweils ''counter'' voran stellen: ''counter accept'', ''counter drop'' oder ''counter reject'' |
+ | |||
+ | Beispiel: | ||
+ | nft -ia | ||
+ | replace rule inet filter input handle 7 tcp dport { 80, 3128 } counter reject with tcp reset | ||
+ | |||
+ | alle counter beobachten: | ||
+ | watch -d nft -a list ruleset | ||
+ | gezielter nur die counter einer Chain beobachten: | ||
+ | watch -d nft -a list chain inet filter input | ||
+ | |||
+ | ==== counter zurücksetzen ==== | ||
+ | auf die harte Tour: alle aktuellen Regeln löschen und neu einlesen: | ||
+ | (echo 'flush ruleset'; nft -s list ruleset) | nft -f - | ||
+ | ===== Pakete loggen ===== | ||
+ | nft -ia | ||
+ | add rule inet filter input log prefix "input accept" | ||
+ | |||
+ | geloggte Pakete anzeigen: | ||
+ | dmesg -Tw | ||
===== Lauf von Paketen nachverfolgen/tracen ===== | ===== Lauf von Paketen nachverfolgen/tracen ===== | ||
Zeile 59: | Zeile 89: | ||
====== aktuelle nftables Regeln speichern ====== | ====== aktuelle nftables Regeln speichern ====== | ||
- | nft -s flush ruleset > /etc/nftables.conf | + | nft -s list ruleset > /etc/nftables.conf |
====== nftables Regeln aus Datei laden ====== | ====== nftables Regeln aus Datei laden ====== | ||
Zeile 70: | Zeile 100: | ||
| delete | chain(s) | ip6 | | | delete | chain(s) | ip6 | | ||
| rename | rule | | | rename | rule | | ||
- | | list | | + | | list | set | |
| flush | | | flush | | ||
| insert | | | insert | |