www.wbglinks.net

Firewall-Regeln unter Linux: Von ipchains über iptables zu nftables

Ein Paketfilter entscheidet für jedes Netzwerkpaket, ob es passieren darf. Unter Linux hieß das Werkzeug dafür Ende der 1990er ipchains, ab Kernel 2.4 (2001) iptables und seit Kernel 3.13 (2014) nftables. Viele alte Anleitungen im Netz stammen aus der ipchains-Zeit; ihre Logik gilt noch, die Befehle nicht mehr.

Die drei Generationen

ipchains kannte drei Ketten (input, forward, output), durch die jedes Paket lief, und war zustandslos: Es wusste nicht, ob ein ankommendes Paket zu einer bestehenden Verbindung gehört. iptables brachte Zustandsverfolgung (conntrack), getrennte Tabellen für Filterung, NAT und Manipulation und eine klare Trennung der Ketten. nftables ersetzt die vielen iptables-Werkzeuge (iptables, ip6tables, arptables, ebtables) durch ein einziges Programm nft mit einer eigenen Regelsprache, erlaubt Mengen und Tabellen in Regeln und ändert Regelsätze atomar. Seit 2020 verwenden Debian, Ubuntu, Fedora und RHEL nftables als Standard; das Paket iptables ist dort nur noch eine Übersetzungsschicht.

Eine Regel heute

Ein minimaler nftables-Regelsatz für einen Server erlaubt bestehende Verbindungen, das Loopback-Gerät, SSH und Web und verwirft alles andere:

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif lo accept
    tcp dport { 22, 80, 443 } accept
    icmp type echo-request accept
  }
}

Die Datei liegt üblicherweise unter /etc/nftables.conf und wird mit nft -f geladen. Wer Docker oder Kubernetes betreibt, sollte wissen, dass diese Werkzeuge eigene Regeln einfügen und die Reihenfolge damit durcheinanderbringen können.

Grundregeln, die sich nicht ändern

Erstens: Standardregel verwerfen, Ausnahmen erlauben, nie umgekehrt. Zweitens: Zustandsverfolgung nutzen, damit Antwortpakete nicht einzeln erlaubt werden müssen. Drittens: Verwaltungszugänge wie SSH auf bekannte Adressen oder ein VPN beschränken. Viertens: Regeln testen, bevor man sie auf einem entfernten Server aktiviert, am besten mit einem zeitgesteuerten Rücksetzen, sonst sperrt man sich aus. Fünftens: Eine Firewall ersetzt keine Aktualisierungen; sie verkleinert nur die Angriffsfläche der Dienste, die ohnehin erreichbar sein müssen.