HowTo: Wechsel von iptables zu nftables
Seit Einführung von Debian Buster wird als Paketfilter auf nftables gesetzt – iptables wird also abgelöst. Die neue Syntax von nftables ist zunächst gewöhnungsbedürftig – allerdings einfacher zu lesen. Mit diesem kleinen HowTo möchte ich euch den Umstieg von iptables auf nftables erleichtern.
Über die Kommandozeile könnt ihr eure bestehenden iptables-Regelsätze zunächst exportieren:
iptables-save > iptables.txt
Anschließend könnt ihr das Regelset für nftables übersetzen lassen:
iptables-restore-translate -f iptables.txt > nftables.txt
Mit dem Ergebnis war ich allerdings nicht zufrieden und ich habe mir ein komplett neues nftables-Regelset für den Desktop geschrieben:
#################### # Purge/Flush # #################### flush ruleset ######################### # Incoming IPv4-Traffic # ######################### table ip filter { chain input { type filter hook input priority 0; policy drop; # Allow packets to established/related connections ct state established,related accept # Drop invalid connections ct state invalid drop # Allow loopback interface iifname lo accept # Allow ICMPv4: Ping requests | Error messages | Router selection messages ip protocol icmp icmp type { echo-request, echo-reply, destination-unreachable, time-exceeded, parameter-problem, router-solicitation, router-advertisement } accept # Reject other packets ip protocol tcp reject with tcp reset } ######################### # Forward IPv4-Traffic # ######################### chain forward { type filter hook forward priority 0; policy drop; } ######################### # Outgoing IPv4-Traffic # ######################### chain output { type filter hook output priority 0; policy accept; # Allow loopback interface oifname lo accept } } #################### # IPv6 # #################### table ip6 filter { chain input { type filter hook input priority 0; policy drop; } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy drop; } }
Das Regelset unterscheidet zwischen IPv4 und IPv6. Aus diversen Gründen habe ich auf meinem Rechner IPv6 komplett deaktiviert (nicht zur Nachahmung empfohlen) – und zusätzlich komplett innerhalb nftables blockiert. Wer IPv4 und IPv6 gleich behandeln möchte, der kann das Regelset wie folgt vereinfachen:
#################### # Purge/Flush # #################### flush ruleset #################### # Incoming Traffic # #################### table inet filter { chain input { type filter hook input priority 0; policy drop; # Allow packets to established/related connections ct state established,related accept # Drop invalid connections ct state invalid drop # Allow loopback interface iifname lo accept # Allow ICMPv4: Ping requests | Error messages | Router selection messages ip protocol icmp icmp type { echo-request, echo-reply, destination-unreachable, time-exceeded, parameter-problem, router-solicitation, router-advertisement } accept # Allow ICMPv6 traffic (https://tools.ietf.org/html/rfc4890#page-18) ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, echo-request, parameter-problem, echo-reply, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, ind-neighbor-solicit, ind-neighbor-advert } accept # Reject other packets ip protocol tcp reject with tcp reset ip6 nexthdr tcp reject with tcp reset } #################### # Forward Traffic # #################### chain forward { type filter hook forward priority 0; policy drop; } #################### # Outgoing Traffic # #################### chain output { type filter hook output priority 0; policy accept; # Allow loopback interface oifname lo accept } }
Anbei noch ein paar ausgewählte Befehle für den Praxiseinsatz.
Regelset aus Datei laden:
nft -f <Dateiname>
Aktives Regelset anzeigen lassen:
nft list ruleset
Einzelnen iptables-Befehl in ntftables-Syntax umwandeln:
iptables-translate -A OUTPUT -o lo -j ACCEPT ip6tables-translate -A OUTPUT -o lo -j ACCEPT
Regelset löschen / zurücksetzen:
nft flush ruleset
Eine schöne Befehlsübersicht findet ihr auch im nftables-Wiki.