Nftables start: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 141: Zeile 141:
  
 
=Regeln dauerhaft aktivieren=
 
=Regeln dauerhaft aktivieren=
 +
'''Noch nichtr machen'''
 
*systemctl enable nftables
 
*systemctl enable nftables
 
*systemctl start nftables
 
*systemctl start nftables

Version vom 16. April 2025, 13:43 Uhr

Vorüberlegung

  • Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten.
  • Bei iptables sind diese standardmäßig vorhanden.
  • Bei nftables müssen sie selbst angelegt und mit einem passenden Hook (z. B. input, forward, output) verbunden werden.
  • Das ist direkt über die Kommandozeile möglich, aber eleganter über eine Konfigurationsdatei.
  • Bei einem frisch installierten Debian- oder Ubuntu-System sieht die Standardkonfiguration so aus:
  • Die Konfiguration entspricht dem klassischen iptables-Modell mit der Tabelle filter und den drei Ketten input, output und forward.
  • Wird die Konfiguration geladen, wird implizit die Default Policy accept gesetzt.

Datei

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

Laden der Konfigurationsdatei

  • nft -f /etc/nftables.conf

Aktuelle Konfiguration anzeigen

  • nft list ruleset
table inet filter {
	chain input {
		type filter hook input priority filter; policy accept;
	}
	chain forward {
		type filter hook forward priority filter; policy accept;
	}
	chain output {
		type filter hook output priority filter; policy accept;
	}
}

Welchen Zustand haben wir denn nun?

  • Ein Paket durchläuft genau eine dieser Ketten:
  • Ist das Paket für den lokalen Rechner bestimmt, geht es durch die input-Kette.
  • Wird es lokal erzeugt, geht es durch die output-Kette.
  • Kommt es von außen und soll weitergeleitet werden, geht es durch die forward-Kette.

Funktionsweise

Regeln

  • Jede dieser Ketten enthält eine Abfolge von Regeln.
  • Diese werden von oben nach unten durchlaufen.
  • Trifft eine Regel zu, wird sie angewandt, und es wird nicht weiter geprüft.
  • Je nach Ziel der Regel gibt es Ausnahmen.
  • Am Ende greift die Default Policy.

Ziele der Filter-Ketten

  • ACCEPT: das Paket wird angenommen
  • REJECT: das Paket wird abgelehnt, es wird ein Fehlerpaket gesendet
  • LOG: das Paket wird protokolliert
  • DROP: das Paket wird still verworfen
filter table
input output forward
rule 1 rule 1 rule 1
rule 2 rule 2 rule 2
rule 3 rule 3
rule 4
DEFAULT POLICY DEFAULT POLICY DEFAULT POLICY

Wir ändern nun die Default Policy auf drop

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset
table inet filter {
	chain input {
		type filter hook input priority filter; policy drop;
	}
	chain forward {
		type filter hook forward priority filter; policy drop;
	}
	chain output {
		type filter hook output priority filter; policy drop;
	}
}

Überlegung

  • Es ist momentan keine gute Idee, diese Konfiguration zu aktivieren, wenn man per SSH eingeloggt ist.
  • Man würde sich sofort selbst aussperren.
  • Die Aktivierung erfolgt erst, wenn alle notwendigen Regeln gesetzt sind.

Connection Tracking

  • Connection Tracking merkt sich, welche Verbindungen gerade bestehen.
  • Ein neu aufgebautes Paket hat den Status new.
  • Pakete, die zu einer bestehenden Verbindung gehören, haben den Status established.
  • Zusätzlich gibt es related für z. B. ICMP- oder FTP-Sekundärverbindungen.
  • Auch UDP wird mit Hilfe von Timern getrackt.
  • Für bestimmte Protokolle wie FTP oder SIP werden ggf. Helper-Module benötigt.

Ziel des Connection Tracking

  • Pakete mit Status established oder related sollen durchgelassen werden.
  • Nur neue Verbindungen werden gezielt erlaubt.
  • So lässt man nur bekannte oder kontrollierte Kommunikation durch.

Einbauen des Connection Tracking Grundgerüsts

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset
table inet filter {
	chain input {
		type filter hook input priority filter; policy drop;
		ct state established,related accept
	}
	
	chain output {
		type filter hook output priority filter; policy drop;
		ct state established,related accept
	}
}

Regeln dauerhaft aktivieren

Noch nichtr machen

  • systemctl enable nftables
  • systemctl start nftables