Nftables start: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=Vorüberlegung= *Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten. *Beim Vorgänger gab es diese praktisch schon von Haus aus…“) |
|||
| Zeile 1: | Zeile 1: | ||
=Vorüberlegung= | =Vorüberlegung= | ||
*Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten. | *Sowohl nftables als auch der Vorgänger iptables arbeiten mit Tabellen und Ketten. | ||
| − | * | + | *Bei iptables sind diese standardmäßig vorhanden. |
| − | *Bei nftables müssen | + | *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. | |
| − | *Bei einem frisch installierten Debian oder Ubuntu System sieht die | + | *Wird die Konfiguration geladen, wird implizit die Default Policy accept gesetzt. |
| − | * | ||
| − | |||
| − | * | ||
=Datei= | =Datei= | ||
| Zeile 29: | Zeile 26: | ||
} | } | ||
} | } | ||
| − | |||
</pre> | </pre> | ||
=Laden der Konfigurationsdatei= | =Laden der Konfigurationsdatei= | ||
*nft -f /etc/nftables.conf | *nft -f /etc/nftables.conf | ||
| − | = | + | |
| + | =Aktuelle Konfiguration anzeigen= | ||
*nft list ruleset | *nft list ruleset | ||
<pre> | <pre> | ||
| Zeile 41: | Zeile 38: | ||
type filter hook input priority filter; policy accept; | type filter hook input priority filter; policy accept; | ||
} | } | ||
| − | |||
chain forward { | chain forward { | ||
type filter hook forward priority filter; policy accept; | type filter hook forward priority filter; policy accept; | ||
} | } | ||
| − | |||
chain output { | chain output { | ||
type filter hook output priority filter; policy accept; | type filter hook output priority filter; policy accept; | ||
| Zeile 51: | Zeile 46: | ||
} | } | ||
</pre> | </pre> | ||
| + | |||
=Welchen Zustand haben wir denn nun?= | =Welchen Zustand haben wir denn nun?= | ||
| − | *Ein Paket | + | *Ein Paket durchläuft genau eine dieser Ketten: |
| − | *Ist das Paket für den Rechner | + | *Ist das Paket für den lokalen Rechner bestimmt, geht es durch die input-Kette. |
| − | *Wird | + | *Wird es lokal erzeugt, geht es durch die output-Kette. |
| − | *Kommt es von | + | *Kommt es von außen und soll weitergeleitet werden, geht es durch die forward-Kette. |
{{#drawio:nftables-filter}} | {{#drawio:nftables-filter}} | ||
=Funktionsweise= | =Funktionsweise= | ||
==Regeln== | ==Regeln== | ||
| − | *Jede dieser | + | *Jede dieser Ketten enthält eine Abfolge von Regeln. |
*Diese werden von oben nach unten durchlaufen. | *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 | + | *Am Ende greift die Default Policy. |
| − | ==Ziele der Filter Ketten== | + | ==Ziele der Filter-Ketten== |
| − | *ACCEPT: das Paket | + | *ACCEPT: das Paket wird angenommen |
| − | *REJECT: das Paket wird | + | *REJECT: das Paket wird abgelehnt, es wird ein Fehlerpaket gesendet |
| − | *LOG: | + | *LOG: das Paket wird protokolliert |
| − | *DROP: das Paket wird | + | *DROP: das Paket wird still verworfen |
{| class="wikitable" | {| class="wikitable" | ||
| Zeile 98: | Zeile 94: | ||
type filter hook input priority filter; policy drop; | type filter hook input priority filter; policy drop; | ||
} | } | ||
| − | |||
chain forward { | chain forward { | ||
type filter hook forward priority filter; policy drop; | type filter hook forward priority filter; policy drop; | ||
} | } | ||
| − | |||
chain output { | chain output { | ||
type filter hook output priority filter; policy drop; | type filter hook output priority filter; policy drop; | ||
| Zeile 108: | Zeile 102: | ||
} | } | ||
</pre> | </pre> | ||
| + | |||
=Überlegung= | =Überlegung= | ||
| − | *Es ist momentan keine gute Idee diese | + | *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= | ||
| − | * | + | *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 | *cat /etc/nftables.conf | ||
<pre> | <pre> | ||
| Zeile 141: | Zeile 130: | ||
chain input { | chain input { | ||
type filter hook input priority filter; policy drop; | type filter hook input priority filter; policy drop; | ||
| − | + | ct state established,related accept | |
} | } | ||
| − | |||
chain forward { | chain forward { | ||
type filter hook forward priority filter; policy drop; | type filter hook forward priority filter; policy drop; | ||
| − | + | ct state established,related accept | |
| − | + | } | |
| − | |||
chain output { | chain output { | ||
type filter hook output priority filter; policy drop; | type filter hook output priority filter; policy drop; | ||
| − | + | ct state established,related accept | |
} | } | ||
} | } | ||
</pre> | </pre> | ||
| + | |||
| + | =Regeln dauerhaft aktivieren= | ||
| + | *systemctl enable nftables | ||
| + | *systemctl start nftables | ||
Version vom 12. April 2025, 14:18 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 forward {
type filter hook forward 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
- systemctl enable nftables
- systemctl start nftables
