<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=Nft_monitor_trace</id>
	<title>Nft monitor trace - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=Nft_monitor_trace"/>
	<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=Nft_monitor_trace&amp;action=history"/>
	<updated>2026-08-24T01:57:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://xinux.net/index.php?title=Nft_monitor_trace&amp;diff=72725&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= nft monitor trace =  Mit &lt;code&gt;nft monitor trace&lt;/code&gt; lässt sich der Weg eines Pakets durch das nftables-Regelwerk verfolgen. Für jede durchlaufene Regel…“</title>
		<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=Nft_monitor_trace&amp;diff=72725&amp;oldid=prev"/>
		<updated>2026-08-16T19:34:01Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= nft monitor trace =  Mit &amp;lt;code&amp;gt;nft monitor trace&amp;lt;/code&amp;gt; lässt sich der Weg eines Pakets durch das nftables-Regelwerk verfolgen. Für jede durchlaufene Regel…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= nft monitor trace =&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;nft monitor trace&amp;lt;/code&amp;gt; lässt sich der Weg eines Pakets durch das&lt;br /&gt;
nftables-Regelwerk verfolgen. Für jede durchlaufene Regel wird ein Ereignis&lt;br /&gt;
ausgegeben. Damit lässt sich feststellen, an welcher Stelle ein Paket verworfen&lt;br /&gt;
wird oder warum eine erwartete Regel nicht greift.&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe entsteht nicht automatisch. Ein Paket wird nur dann verfolgt, wenn&lt;br /&gt;
es zuvor durch eine Regel markiert wurde.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
;Kernel-Modul für Trace-Ereignisse laden&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;modprobe nfnetlink_log&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Version prüfen (Trace-Unterstützung ab nftables 0.9)&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft --version&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prinzip ==&lt;br /&gt;
&lt;br /&gt;
Das Verfolgen von Paketen erfolgt in zwei Schritten:&lt;br /&gt;
&lt;br /&gt;
# Eine Regel setzt für die gewünschten Pakete das Trace-Flag.&lt;br /&gt;
# &amp;lt;code&amp;gt;nft monitor trace&amp;lt;/code&amp;gt; gibt die dabei entstehenden Ereignisse aus.&lt;br /&gt;
&lt;br /&gt;
Das Flag wird mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;meta nftrace set 1&amp;lt;/syntaxhighlight&amp;gt; gesetzt.&lt;br /&gt;
&lt;br /&gt;
== Trace-Tabelle anlegen ==&lt;br /&gt;
&lt;br /&gt;
Die Trace-Regeln werden in einer eigenen Tabelle abgelegt. So bleibt das&lt;br /&gt;
produktive Regelwerk unverändert und die Trace-Tabelle kann anschliessend&lt;br /&gt;
vollständig entfernt werden.&lt;br /&gt;
&lt;br /&gt;
;Tabelle anlegen&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add table inet trace&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Chain mit hoher Priorität anlegen (läuft vor dem eigentlichen Regelwerk)&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add chain inet trace prerouting '{ type filter hook prerouting priority -300; }'&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Priorität &amp;lt;code&amp;gt;-300&amp;lt;/code&amp;gt; sorgt dafür, dass das Flag gesetzt wird, bevor&lt;br /&gt;
das Paket die Filter-Chains erreicht. Andernfalls werden die vorher&lt;br /&gt;
durchlaufenen Regeln nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
== Trace aktivieren ==&lt;br /&gt;
&lt;br /&gt;
Das Trace-Flag sollte immer möglichst eng eingegrenzt werden. Ein Trace ohne&lt;br /&gt;
Filter erzeugt auf einem produktiven System sofort unbrauchbare Datenmengen.&lt;br /&gt;
&lt;br /&gt;
;Einzelnen Host verfolgen&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add rule inet trace prerouting ip saddr 192.168.2XX.10 meta nftrace set 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Einzelnen Dienst verfolgen&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add rule inet trace prerouting tcp dport 443 meta nftrace set 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Kombination aus Quelle und Ziel&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add rule inet trace prerouting ip saddr 192.168.2XX.10 ip daddr 192.168.2XX.20 meta nftrace set 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;ICMP verfolgen (für Tests mit ping)&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft add rule inet trace prerouting ip protocol icmp meta nftrace set 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ausgabe anzeigen ==&lt;br /&gt;
&lt;br /&gt;
;Trace-Ereignisse anzeigen&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft monitor trace&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Ausgabe im JSON-Format&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft -j monitor trace&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Kommando läuft im Vordergrund und wird mit &amp;lt;code&amp;gt;Strg+C&amp;lt;/code&amp;gt; beendet.&lt;br /&gt;
&lt;br /&gt;
== Ausgabe lesen ==&lt;br /&gt;
&lt;br /&gt;
Eine typische Zeile sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trace id 3f2a1b8c inet filter input packet: iif &amp;quot;ens18&amp;quot; ether saddr 52:54:00:1a:2b:3c ip saddr 192.168.2XX.10 ip daddr 192.168.2XX.20 ip protocol tcp tcp dport 22&lt;br /&gt;
trace id 3f2a1b8c inet filter input rule ct state established,related accept (verdict accept)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;trace id&lt;br /&gt;
*Eindeutige Kennung eines Pakets. Alle Zeilen mit derselben ID gehören zum selben Paket.&lt;br /&gt;
&lt;br /&gt;
;inet filter input&lt;br /&gt;
*Family, Tabelle und Chain, in der das Ereignis auftritt.&lt;br /&gt;
&lt;br /&gt;
;packet:&lt;br /&gt;
*Die Kopfdaten des Pakets. Diese Zeile erscheint einmal pro Chain.&lt;br /&gt;
&lt;br /&gt;
;rule ...&lt;br /&gt;
*Die Regel, auf die das Paket zutrifft, gefolgt vom Verdict.&lt;br /&gt;
&lt;br /&gt;
;verdict&lt;br /&gt;
*Das Ergebnis: &amp;lt;code&amp;gt;accept&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;drop&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt; oder ein Sprung in eine andere Chain.&lt;br /&gt;
&lt;br /&gt;
Wird ein Paket verworfen, endet die Kette der Ereignisse mit&lt;br /&gt;
&amp;lt;code&amp;gt;(verdict drop)&amp;lt;/code&amp;gt;. Fehlt die erwartete Regel in der Ausgabe&lt;br /&gt;
vollständig, wurde das Paket vorher bereits von einer anderen Regel behandelt.&lt;br /&gt;
&lt;br /&gt;
== Trace beenden ==&lt;br /&gt;
&lt;br /&gt;
Die Trace-Tabelle wird vollständig entfernt. Das produktive Regelwerk bleibt&lt;br /&gt;
dabei unberührt.&lt;br /&gt;
&lt;br /&gt;
;Trace-Tabelle löschen&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft delete table inet trace&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Prüfen, ob keine Trace-Regeln mehr aktiv sind&lt;br /&gt;
*&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;nft list ruleset | grep nftrace&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Übung ==&lt;br /&gt;
&lt;br /&gt;
# Auf it2XX eine Trace-Tabelle nach obigem Muster anlegen.&lt;br /&gt;
# Das Trace-Flag für ICMP von der Adresse eines Nachbarsystems setzen.&lt;br /&gt;
# &amp;lt;code&amp;gt;nft monitor trace&amp;lt;/code&amp;gt; starten und vom Nachbarsystem aus einen Ping absetzen.&lt;br /&gt;
# Die durchlaufenen Chains und das Verdict notieren.&lt;br /&gt;
# Eine Drop-Regel für ICMP in die Filter-Chain einfügen und den Ping wiederholen.&lt;br /&gt;
# Die Ausgabe mit dem vorherigen Durchlauf vergleichen.&lt;br /&gt;
# Die Trace-Tabelle entfernen.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Trace-Ereignisse werden über nfnetlink an den Userspace gesendet. Bei hohem Paketaufkommen können Ereignisse verloren gehen.&lt;br /&gt;
* Auf produktiven Systemen ist das Trace-Flag immer auf eine einzelne Adresse oder einen einzelnen Port einzugrenzen.&lt;br /&gt;
* Die Trace-Tabelle nach der Fehlersuche entfernen. Ein vergessenes Trace-Flag erzeugt dauerhaft Last.&lt;br /&gt;
* Für dauerhafte Protokollierung ist &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; in der jeweiligen Regel geeigneter als ein Trace.&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>