nftables

Aus wiki.archlinux.de


Linux besaß bereits mehrere Paketfilter-Implementierungen: von ipfwadm zu ipchains und iptables zu nftables. Letzteres ist seit Version 3.13 Bestandteil des Linux-Kernels und löst das bis dahin bevorzugte iptables ab. Es enthält die meisten iptables-Funktionen sowie einige zusätzliche Eigenschaften und ersetzt die Kommandos des Vorgängers durch das Werkzeug nft. Dank der Kompatibilitätsschicht von nftables lassen sich die alten Kommandos und Einstellungen zunächst weiterverwenden.

Erste Schritte

Prüfen, ob das Kernel-Modul nf_tables vom aktuellen Kernel verwendet werden kann

modinfo nf_tables

Wenn erfolgreich, dann entsprechend Wiki Kernelmodule das Modul beim Systemstart automatisch laden

Bei Verwendung von Tools wie ferm diese beenden und deren Autostart deaktivieren

systemctl disable --now ferm.service

In dem Fall ferm kann dies auch gleich deinstalliert werden, da ferm nftables nicht unterstützt

pacman -Rcsn ferm

Wer stattdessen die Dienste iptables.service und ip6tables.service verwendet - diese beenden und deren Autostart deaktivieren

systemctl disable --now iptables.service
systemctl disable --now ip6tables.service

Zum Schluß alle bestehenden Firewall-Regeln löschen

iptables -F
ip6tables -F

Hinweis: Aktuell sollte man das Kernel-Modul ip_tables nicht in die blacklist eintragen und auch das Paket iptables lässt sich nicht ohne weiteres deinstallieren.

Installation

Das Programm ist als nftables in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S nftables

Das Packet enthält die Datei /etc/nftables.conf mit einer Beispielkonfiguration.

systemctl enable --now nftables.service # Für den automatischen Start vormerken und direkt starten

Konfiguration

# systemctl stop nftables.service
# nano /etc/nftables.conf # Syntaxhighlight vorhanden
# systemctl start nftables.service
# systemctl status nftables.service

nft

# nft list tables
table inet firewall # Siehe Bsp.
# nft list table inet firewall
# nft list table inet firewall -n -a
# nft list ruleset

Beispiel

#!/usr/bin/nft -f
flush ruleset
table inet firewall {
	chain incoming {
		type filter hook input priority 0; policy drop;

		ct state established,related accept
		ct state invalid drop

		iifname lo accept

		ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept
		ip6 nexthdr icmpv6 icmpv6 type echo-request counter drop

		ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept

		ip protocol icmp icmp type echo-request limit rate 10/second accept
		ip protocol icmp icmp type echo-request counter drop
	}

	chain forwarding {
		type filter hook forward priority 0; policy drop;
	}

	chain outgoing {
		type filter hook output priority 0; policy accept;
	}
}

Weblinks