Japanische Übersetzung des von man nftables
angezeigten Handbuchs.
nft-Nftables Framework Management Tool zur Paketfilterung und -klassifizierung
nft [ -nNscae ] [ -I directory ] [ -f filename | -i | cmd ...]
nft -h
nft -v
nft ist ein Befehlszeilenprogramm, das vom Linux-Kernel des nftables-Frameworks zum Festlegen, Verwalten und Überprüfen von Regeln für die Paketfilterung und -klassifizierung verwendet wird.
Das Linux-Kernel-Subsystem ist als nf_tables bekannt, wobei nf
für Netfilter
steht.
Führen Sie nft --help
aus, um eine vollständige Zusammenfassung der Optionen anzuzeigen.
-
ist, lesen Sie von der Standardeingabe.
Das nft-Skript muss mit #! / Usr / sbin / nft -f
beginnen.Die Eingabe wird zeilenweise analysiert.
Wenn das letzte Zeichen in einer Zeile (unmittelbar vor dem Zeilenvorschubzeichen) ein nicht zitierter Backslash (\
) ist, wird die nächste Zeile als Fortsetzung behandelt.
Mehrere Befehle in derselben Zeile können mit einem Semikolon (;
) getrennt werden.
Das Hash-Symbol (#
) startet den Kommentar.
Alle nachfolgenden Zeichen in derselben Zeile werden ignoriert.
Bezeichner beginnen mit einem alphabetischen Zeichen (az, AZ), mit null oder mehr alphanumerischen Zeichen (az, AZ, 0-9), einem Schrägstrich (/
), einem Backslash (\
) und einem Unterstrich () Es folgen die Zeichen `` _``) und Punkte (`` .``). Bezeichner, die unterschiedliche Zeichen verwenden oder mit Schlüsselwörtern in Konflikt stehen, müssen in doppelte Anführungszeichen gesetzt werden (`` "
`).
Mit der include-Anweisung können Sie andere Dateien lesen.
Das Verzeichnis, in dem nach Include-Dateien gesucht werden soll, kann mit der Option -I / --includepath
angegeben werden.
Um dieses Verhalten zu überschreiben, stellen Sie dem Pfad entweder ". /" Vor, um die Aufnahme der Dateien im aktuellen Arbeitsverzeichnis (dh der relativen Pfade) zu erzwingen, oder verwenden Sie den absoluten Pfad "/". Gibt den Speicherort der dargestellten Datei an.
Wenn -I / --includepath
nicht angegeben ist, verwendet nft das zur Kompilierungszeit angegebene Standardverzeichnis.
Dieses Standardverzeichnis kann mit der Option -h / --help
abgerufen werden.
Die include-Anweisung unterstützt die üblichen Shell-Platzhaltersymbole (*
, ?
, []
).
Wenn in der include-Anweisung ein Platzhaltersymbol verwendet wird, tritt kein Fehler auf, auch wenn die include-Anweisung nicht übereinstimmt.
Auf diese Weise können Sie ein möglicherweise leeres Include-Verzeichnis angeben, z. B. "include / etc / firewall / rules / *".
Platzhalterübereinstimmungen werden alphabetisch gelesen.
Dateien, die mit einem Punkt ( .
) beginnen, stimmen in der include-Anweisung nicht überein.
$variable
Variablensymbole können mit der Anweisung define
definiert werden.
Variablenreferenzen sind Ausdrücke, mit denen andere Variablen initialisiert werden können.
Der Umfang der Definition ist der aktuelle Block und alle darin enthaltenen Blöcke.
Beispiel für die Verwendung von Variablen
define int_if1 = eth0
define int_if2 = eth1
define int_ifs = { $int_if1, $int_if2 }
filter input iif $int_ifs accept
Die Adressfamilie bestimmt den Typ des verarbeiteten Pakets. Für jede Adressfamilie enthält der Kernel Hooks, die bestimmte Phasen des Paketverarbeitungsprozesses darstellen. Diese Hooks rufen nftables auf, wenn die Regeln des Hooks existieren.
Alle Bezeichner enthalten eine Adressfamilie, da sich alle nftables-Objekte in einem adressfamilienspezifischen Namespace befinden. Wenn Sie einen Bezeichner ohne Adressfamilie angeben, wird standardmäßig die IP-Familie verwendet.
Die IPv4 / IPv6 / Inet-Adressfamilie verarbeitet IPv4, IPv6 oder beide Pakettypen. Sie enthalten fünf Hooks in verschiedenen Paketverarbeitungsstufen des Netzwerkstapels.
Haken | Erläuterung |
---|---|
prerouting | Alle in das System eintretenden Pakete werden vom Prerouting-Hook verarbeitet. Es wird vor dem Routing-Prozess aufgerufen und zum frühen Filtern oder Ändern von Paketattributen verwendet, die sich auf das Routing auswirken. |
input | An das lokale System gelieferte Pakete werden vom Eingabehaken verarbeitet. |
forward | An einen anderen Host weitergeleitete Pakete werden vom Forward-Hook verarbeitet. |
output | Von lokalen Prozessen gesendete Pakete werden vom Ausgabehaken verarbeitet. |
postrouting | Alle Pakete, die das System verlassen, werden vom Postrouting-Hook verarbeitet. |
Die ARP-Adressfamilie verarbeitet vom System gesendete und empfangene ARP-Pakete. Dies wird normalerweise verwendet, um ARP-Pakete für das Clustering zu entstellen.
Haken | Erläuterung |
---|---|
input | An das lokale System gelieferte Pakete werden vom Eingabehaken verarbeitet. |
output | Vom lokalen System gesendete Pakete werden vom Ausgabehaken verarbeitet. |
Die Bridge-Adressfamilie verarbeitet Ethernet-Pakete, die das Bridge-Gerät passieren.
Die Liste der unterstützten Hooks entspricht der obigen IPv4 / IPv6 / Inet-Adressfamilie.
Die Netdev-Adressfamilie verarbeitet Pakete vom Eingang.
Haken | Erläuterung |
---|---|
ingress | Alle in das System eintretenden Pakete werden von diesem Hook verarbeitet. Wird vor dem Layer 3-Protokollhandler aufgerufen und kann zum frühen Filtern und Überwachen verwendet werden. |
{list | flush} ruleset [family]
export [ruleset] format
Das Schlüsselwort ruleset
wird verwendet, um den gesamten Satz von Tabellen, Ketten usw. zu identifizieren, die sich derzeit im Kernel befinden.
Die folgenden Regelsatzbefehle sind vorhanden.
Es ist möglich, die Liste einzuschränken und nur bestimmte Adressfamilien zu löschen. Eine Liste der gültigen Familiennamen finden Sie oben unter Adressfamilie (#Adressfamilie).
Beachten Sie, dass die durch den Export erzeugte Ausgabe entgegen den Erwartungen nicht mit "nft -f" analysiert werden kann. Stattdessen dient die Ausgabe des Befehls list diesem Zweck.
{add | create} table [family] table [ { flags flags } ]
{delete | list | flush} table [family] table
delete table [family] handle handle
Tabellen sind Container für Ketten, Mengen und zustandsbehaftete Objekte.
Sie werden durch Adressfamilie und Namen identifiziert.
Die Adressfamilie muss IP, IP6, Inet, Arp, Bridge, Netdev sein.
Die Inet-Adressfamilie ist eine Dummy-Familie, mit der hybride IPv4 / IPv6-Tabellen erstellt werden.
Sie können das Schlüsselwort meta expression
`nfproto`` verwenden, um den Familienkontext (IPv4 oder IPv6) zu testen, in dem das Paket verarbeitet wird.
Wenn keine Adressfamilie angegeben ist, wird standardmäßig IP verwendet.
Der einzige Unterschied zwischen add und create besteht darin, dass create einen Fehler zurückgibt, während add keinen Fehler zurückgibt, wenn die angegebene Tabelle bereits vorhanden ist.
Flagge | Erläuterung |
---|---|
dormant | Tabelle wird nicht ausgewertet(Basiskette ist nicht registriert) |
Beispiel für das Hinzufügen, Ändern oder Löschen einer Tabelle
#Starten Sie nft im interaktiven Modus
nft --interactive
#Erstellen Sie eine neue Tabelle.
create table inet mytable
#Neue Basiskette hinzufügen:Holen Sie sich das Eingabepaket
add chain inet mytable myin { type filter hook input priority 0; }
#Fügen Sie der Kette einen einzelnen Zähler hinzu
add rule inet mytable myin counter
#Deaktivieren Sie die Tabelle vorübergehend(Regeln werden nicht ausgewertet)
add table inet mytable { flags dormant; }
#Reaktivieren Sie den Tisch:
add table inet mytable
{add | create} chain [family] table chain [ { type type hook hook [device device] priority priority ; [policy policy ;] } ]
{delete | list | flush} chain [family] table chain
delete chain [family] table handle handle
rename chain [family] table chain newname
Eine Kette ist ein Container mit Regeln. Es gibt zwei Arten von Ketten, Basisketten und reguläre Ketten. Die Basiskette ist der Einstiegspunkt für Pakete aus dem Netzwerkstapel. Regelmäßige Ketten können als Sprungziele verwendet werden und dienen zur besseren Regelbildung.
Für die Basiskette sind Parameter für Typ, Hook und Priorität erforderlich.
Art | Familie | Haken | Erläuterung |
---|---|---|---|
filter | all | all | Standardkettentyp, der ohne zu zögern verwendet werden kann. |
nat | ip, ip6 | prerouting, input, output, postrouting | Diese Art von Kette führt eine Netzwerkadressübersetzung basierend auf dem Conntrack-Eintrag durch. Nur das erste Paket der Verbindung durchläuft tatsächlich diese Kette. Die Regel ist normalerweise ein Conntrack-Eintrag, der erstellt wird(Zum Beispiel NAT-Anweisung)Definieren Sie die Details von. |
route | ip, ip6 | output | Wenn ein Paket diese Art von Kette durchläuft und akzeptiert werden soll, wird eine neue Routensuche durchgeführt, wenn sich der relevante Teil des IP-Headers geändert hat. Dies implementiert einen Richtlinienrouting-Selektor, beispielsweise in nftables. |
Abgesehen von den oben genannten Sonderfällen (z. B. unterstützt der Nat-Typ keine Forward-Hooks oder der Route-Typ unterstützt nur Output-Hooks) gibt es zwei weitere bemerkenswerte Macken.
Die netdev-Familie unterstützt nur eine einzige Kombination: den Filtertyp und den Eingabe-Hook. Die Basiskette für diese Familie ist für jede empfangende Schnittstelle vorhanden, daher müssen auch Geräteparameter vorhanden sein.
Die Arp-Familie ist eine Filtertypkette, die nur Eingabe- und Ausgabe-Hooks unterstützt.
Der Parameter priority
akzeptiert einen vorzeichenbehafteten ganzzahligen Wert, der die Reihenfolge angibt, in der Ketten mit demselben Hook-Wert durchlaufen werden.
Die Reihenfolge ist aufsteigend. Das heißt, Werte mit niedriger Priorität haben Vorrang vor Werten mit hoher Priorität.
In der Basiskette können Sie auch Kettenrichtlinien festlegen. Die Richtlinie legt fest, was mit Paketen geschieht, die von den vordefinierten Regeln nicht explizit akzeptiert oder abgelehnt werden. Die unterstützten Richtlinienwerte sind "Akzeptieren" (Standard) oder "Löschen".
[add | insert] rule [family] table chain [ {handle | position} handle | index index] statement...
replace rule [family] table chain handle handle statement...
delete rule [family] table chain handle handle
Die Regel wird der Kette der angegebenen Tabelle hinzugefügt. Wenn keine Familie angegeben ist, wird die IP-Familie verwendet. Eine Regel besteht aus zwei Arten von Komponenten gemäß einer Reihe von grammatikalischen Regeln. Ausdrücke und Aussagen.
Die Befehle zum Hinzufügen und Einfügen unterstützen beliebige Positionsbezeichner. Dies ist entweder ein Handle oder ein Index (beginnend mit Null) einer vorhandenen Regel. Intern wird der Speicherort der Regel immer durch das Handle identifiziert, und die Konvertierung aus dem Index erfolgt im Benutzerbereich. Wenn nach der Konvertierung gleichzeitig Regelsatzänderungen auftreten, hat dies zwei mögliche Auswirkungen. Wenn eine Regel vor der referenzierten Regel eingefügt oder gelöscht wird, kann sich der gültige Regelindex ändern. Wenn die referenzierte Regel gelöscht wird, wird der Befehl vom Kernel zurückgewiesen, als ob ein ungültiges Handle angegeben worden wäre.
Beispiel für das Hinzufügen einer Regel zur Eingabekette der IP-Tabelle
# 'ip filter'Es wird erwartet
nft add rule filter output ip daddr 192.168.0.0/24 accept
#Gleicher Befehl, etwas detaillierter
nft add rule ip filter output ip daddr 192.168.0.0/24 accept
Beispiel für das Löschen einer Regel aus der Inet-Tabelle
nft -a list ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
ct state established,related accept # handle 4
ip saddr 10.1.1.1 tcp dport ssh accept # handle 5
...
#Löschen Sie die Regel von Handle 5.
nft delete rule inet filter input handle 5
nftables bietet zwei Arten von Mengenkonzepten. Anonyme Mengen sind Mengen, die keinen bestimmten Namen haben. Die Elemente der Gruppe sind in geschweiften Klammern eingeschlossen, und die Elemente werden beim Erstellen von Regeln, die die Gruppe verwenden, durch Kommas getrennt. Wenn die Regel gelöscht wird, wird auch die Menge gelöscht. Sie können sie nicht aktualisieren. Das heißt, sobald ein anonymer Satz deklariert ist, kann er nur aktualisiert werden, wenn die Regeln, die den anonymen Satz verwenden, gelöscht oder geändert wurden.
Ein Beispiel für das Akzeptieren eines bestimmten Subnetzes und Ports mithilfe eines anonymen Satzes
nft add rule filter input ip saddr { 10.0.0.0/8, 192.168.0.0/16 } tcp dport { 22, 443 } accept
Benannte Mengen sind die ersten Mengen, die definiert werden müssen, bevor sie in einer Regel referenziert werden können.
Im Gegensatz zu anonymen Sets können Elemente jederzeit zu benannten Sets hinzugefügt oder daraus entfernt werden.
Auf die Menge wird durch die Regel verwiesen, wobei der Satzname vor @
steht.
Ein Beispiel für das Akzeptieren einer Adresse und eines Ports mithilfe eines benannten Satzes
nft add rule filter input ip saddr @allowed_hosts tcp dport @allowed_ports accept
Sie müssen zuerst die Sets allow_hosts
und allow_ports
erstellen.
Im nächsten Abschnitt wird die Syntax von nft set beschrieben.
add set [family] table set { type type ; [flags flags ;] [timeout timeout ;] [gc-interval gc-interval ;] [elements = { element[,...] } ;] [size size ;] [policy policy ;] [auto-merge auto-merge ;] }
{delete | list | flush} set [family] table set
delete set [family] table handle handle
{add | delete} element [family] table set { element[,...] }
Ein Satz ist ein Elementcontainer eines benutzerdefinierten Datentyps, der durch einen benutzerdefinierten Namen eindeutig identifiziert und an eine Tabelle angehängt wird.
Stichwort | Erläuterung | Art |
---|---|---|
type | Elementdatentyp festlegen | String: ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark |
flags | Setzen Sie die Flagge | String: constant, interval, timeout |
timeout | Die Zeit, die ein Element in der Menge verbleibt. Set ist der Paketpfad(Regelsatz)Erforderlich, wenn hinzugefügt von. | String:Einheit nach Dezimalzahl(d, h, m, s)Hinzugefügt. |
gc-interval | Speicherbereinigungsintervall. Nur verfügbar, wenn Timeout oder Flag Timeout aktiv ist | String:Einheit nach Dezimalzahl(d, h, m, s)Hinzugefügt. |
elements | Elemente im Set enthalten | Stellen Sie den Datentyp ein. |
size | Maximale Anzahl von Elementen im Satz. Set ist der Paketpfad(Regelsatz)Erforderlich, wenn hinzugefügt von. | Ganzzahl ohne Vorzeichen(64-Bit) |
policy | Legen Sie die Richtlinie fest. | String: performance [default], memory |
auto-merge | benachbart/Automatisches Zusammenführen doppelter Set-Elemente(Nur Intervall eingestellt) |
add map [family] table map { type type [flags flags ;] [elements = { element[,...] };] [size size ;] [policy policy ;] }
{delete | list | flush} map [family] table map
{add | delete} element [family] table map { elements = { element[,...] } ; }
Karten speichern Daten basierend auf einem bestimmten Schlüssel, der als Eingabe verwendet wird, werden durch einen benutzerdefinierten Namen eindeutig identifiziert und an eine Tabelle angehängt.
Stichwort | Erläuterung | Art |
---|---|---|
type | Datentyp des Kartenelements | key_name:value Geben Sie das Format an. Typen, die als Werte verwendet werden können: ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark, counter, quota。 couter Wannquota Kann nicht als Schlüsselname verwendet werden. |
flags | Kartenflagge | String: constant, interval |
elements | In der Karte enthaltene Elemente | Kartendatentyp |
size | Maximale Anzahl von Elementen in der Karte | Ganzzahl ohne Vorzeichen(64-Bit) |
policy | Kartenrichtlinie | String: performance [default], memory |
{add | create} flowtable [family] table flowtable { hook hook priority priority ; devices = { device[,...] } ; }
{delete | list} flowtable [family] table flowtable
Flusstabellen können verwendet werden, um die Paketweiterleitung in der Software zu beschleunigen. Flow-Tabelleneinträge werden durch ein Tupel dargestellt, das aus einer Eingangsschnittstelle, Quell- und Zieladressen, Quell- und Zielports sowie dem Layer 3/4-Protokoll besteht. Jeder Eintrag speichert die Zielschnittstelle und die Gateway-Adresse zwischen, aktualisiert die Adresse der Zielverbindungsschicht und leitet das Paket weiter. Die ttl- und hoplimit-Felder werden ebenfalls reduziert. Die Flusstabelle bietet daher einen alternativen Pfad, mit dem das Paket den herkömmlichen Weiterleitungspfad umgehen kann. Der Flusstisch befindet sich am Eingangshaken vor dem Vorhaken. Flows aus der Forward-Kette Mit dem Offload-Ausdruck können Sie den zu entladenden Flow auswählen. Flusstabellen werden durch Adressfamilie und Namen identifiziert. Die Adressfamilie muss ip, ip6 oder inet sein. Die Inet-Adressfamilie ist eine Dummy-Familie, mit der hybride IPv4 / IPv6-Tabellen erstellt werden. Wenn keine Adressfamilie angegeben ist, wird standardmäßig IP verwendet.
{add | delete | list | reset} type [family] table object
delete type [family] table handle handle
Stateful-Objekte werden an die Tabelle angehängt und durch einen eindeutigen Namen gekennzeichnet.
Sie gruppieren statusbehaftete Informationen aus der Regel, und das Schlüsselwort "Typname" wird verwendet, um in der Regel auf sie zu verweisen.
Beispiel: Zählername
.
CT
ct helper helper { type type protocol protocol ; [l3proto family ;] }
Mit ct helper wird ein Verbindungsverfolgungshelfer definiert, der in Kombination mit der Anweisung ct helper set
verwendet werden kann.
Typ und Protokoll sind erforderlich.
l3proto
wird standardmäßig aus der Tabellenfamilie abgeleitet.
Das heißt, wenn der Kernel dies unterstützt, versucht der Kernel, sowohl IPv4- als auch IPv6-Helfer-Backends in die Inet-Tabelle zu laden.
Stichwort | Erläuterung | Art |
---|---|---|
type | Name des Hilfstyps | Zitierte Zeichenfolge(Beispiel: "ftp") |
protocol | Helper Layer 4-Protokoll | String(Beispiel: tcp) |
l3proto | Helper Layer 3-Protokoll | Adresse Familie(Beispiel: ip) |
Definition und Zuweisung von FTP-Hilfsmitteln
Im Gegensatz zu iptables sollten Helferzuweisungen beispielsweise mit der Standard-Hook-Priorität 0 durchgeführt werden, nachdem die Conntrack-Suche abgeschlossen ist.
table inet myhelpers {
ct helper ftp-standard {
type "ftp" protocol tcp
}
chain prerouting {
type filter hook prerouting priority 0;
tcp dport 21 ct helper set "ftp-standard"
}
}
counter [packets bytes]
Stichwort | Erläuterung | Art |
---|---|---|
packets | Anfangsanzahl der Pakete | Ganzzahl ohne Vorzeichen(64-Bit) |
bytes | Anfangsanzahl von Bytes | Ganzzahl ohne Vorzeichen(64-Bit) |
quota [over | until] [used]
Stichwort | Erläuterung | Art |
---|---|---|
quota | Kontingentlimit. Wird als Kontingentname verwendet. | Ganzzahl ohne Vorzeichen(64-Bit)Und die Schnur(bytes, kbytes, mbytes)Geben Sie die beiden Argumente von an.over Wannuntil Ist vor diesen Argumenten |
used | Anfangswert des verwendeten Kontingents | Ganzzahl ohne Vorzeichen(64-Bit)Und die Schnur(bytes, kbytes, mbytes)Geben Sie die beiden Argumente von an. |
Der Ausdruck repräsentiert entweder den Wert einer Konstanten wie einer Netzwerkadresse oder einer Portnummer oder die Daten, die während der Regelsatzauswertung aus dem Paket gesammelt wurden. Sie können Ausdrücke mit binären, logischen, relationalen und anderen Arten von Ausdrücken kombinieren, um komplexe oder relationale (übereinstimmende) Ausdrücke zu bilden. Sie werden auch als Argumente für bestimmte Arten von Vorgängen verwendet, z. B. NAT und Paketmarkierung.
Jeder Ausdruck hat einen Datentyp, der die Größe, Analyse, Darstellung und Typkompatibilität des Symbolwerts mit anderen Ausdrücken bestimmt.
describe expression
Der Befehl description
zeigt Informationen über den Ausdruckstyp und dessen Datentyp an.
$ nft describe tcp flags
payload expression, datatype tcp_flag (TCP flag) (basetype bitmask, integer), 8 bits
predefined symbolic constants:
fin 0x01
syn 0x02
rst 0x04
psh 0x08
ack 0x10
urg 0x20
ecn 0x40
cwr 0x80
Der Datentyp bestimmt die Kompatibilität von Größe, Analyse, Darstellung und Ausdruckstyp symbolischer Werte. Es gibt mehrere globale Datentypen, und einige Ausdruckstypen definieren zusätzliche Datentypen, die für diesen Ausdruckstyp spezifisch sind. Die meisten Datentypen haben eine feste Größe, einige jedoch eine dynamische Größe. (Beispiel: String-Typ)
Typen können von Typen niedrigerer Ordnung abgeleitet werden. Der IPv4-Adresstyp wird vom Integer-Typ abgeleitet. Das heißt, Sie können die IPv4-Adresse auch als ganzzahligen Wert angeben.
In bestimmten Kontexten (Mengen- und Kartendefinitionen) müssen Sie den Datentyp explizit angeben. Jeder Typ hat einen Namen, der dafür verwendet wird.
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
Integer | integer | Variable | - |
Der Integer-Typ wird für Zahlen verwendet. Sie können es in Dezimal, Hexadezimal oder Oktal angeben. Der Integer-Typ ist keine feste Größe, seine Größe wird durch den verwendeten Ausdruck bestimmt.
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
Bitmask | bitmask | Variable | integer |
Der Bitmaskentyp (Bitmaske) wird für die Bitmaske verwendet.
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
String | string | Variable | - |
Der Zeichenfolgentyp wird für Zeichenfolgen verwendet.
Die Zeichenfolge beginnt mit einem alphabetischen Zeichen (a-zA-Z), gefolgt von null oder mehr alphanumerischen Zeichen oder Zeichen und Symbolen (/
, -
, _
, .
. ) Folgt.
Außerdem wird alles, was in doppelte Anführungszeichen (") eingeschlossen ist, als Zeichenfolge erkannt.
Spezifikation des Zeichenkettentyps
#Name der Schnittstelle
filter input iifname eth0
#Seltsamer Schnittstellenname
filter input iifname "(eth0)"
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
Link layer address | lladdr | Variable | integer |
Der Adressentyp der Verbindungsschicht wird für die Adresse der Verbindungsschicht verwendet. Link-Layer-Adressen werden als variable Gruppe von zweistelligen Hexadezimalzahlen angegeben, die durch einen Doppelpunkt (:) getrennt sind.
Adressierung der Verbindungsschicht
#MAC-Adresse des Ethernet-Ziels
filter input ether daddr 20:c9:d0:43:12:d9
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
IPv4 address | ipv4_addr | 32 Bit | integer |
Der IPv4-Adresstyp wird für IPv4-Adressen verwendet. Die Adresse kann als gepunkteter Dezimal-, gepunkteter Hexadezimal-, gepunkteter Achteck-, Dezimal-, Hexadezimal-, Oktal- oder Hostname angegeben werden. Hostnamen werden mit einem Standardsystem-Resolver aufgelöst.
IPv4-Adressspezifikation
#Punkt-Dezimalschreibweise
filter output ip daddr 127.0.0.1
#Hostname
filter output ip daddr localhost
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
IPv6 address | ipv6_addr | 128 Bit | integer |
Der IPv6-Adresstyp wird für IPv6-Adressen verwendet.
Die Adresse wird als Hostname oder als durch Doppelpunkte getrenntes hexadezimales Halbwort angegeben.
Adressen können in eckige Klammern ([]
) eingeschlossen werden, um sie von Portnummern zu unterscheiden.
Angabe einer IPv6-Adresse
#Loopback-Adresse weggelassen
filter output ip6 daddr ::1
#Angeben einer IPv6-Adresse in eckiger Klammer
# []Keine Portnummer(22)Wird als Teil der IPv6-Adresse analysiert.
ip6 nat prerouting tcp dport 2222 dnat to [1ce::d0]:22
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
Boolean | boolean | 1 Bit | integer |
Boolesche Typen sind Syntax-Hilfstypen im Benutzerbereich. Dies ist die rechte Seite des (normalerweise impliziten) relationalen Ausdrucks und wird verwendet, um den Ausdruck auf der linken Seite in eine Boolesche Prüfung zu ändern (normalerweise "existiert").
Die folgenden Schlüsselwörter werden automatisch in einen Booleschen Typ mit dem angegebenen Wert aufgelöst.
Stichwort | Wert |
---|---|
exists | 1 |
missing | 0 |
Die folgende Formel unterstützt boolesche Vergleiche.
Formel | Bewegung |
---|---|
fib | Überprüfen Sie, ob die Route vorhanden ist. |
exthdr | Überprüfen Sie, ob IPv6-Erweiterungsheader vorhanden sind. |
tcp option | Überprüfen Sie, ob TCP-Optionsheader vorhanden sind. |
#Übereinstimmung, wenn Route vorhanden ist
filter input fib daddr . iif oif exists
#Entspricht nur nicht fragmentierten IPv6-Verkehrspaketen
filter input exthdr frag missing
#Übereinstimmung, wenn die TCP-Zeitstempeloption vorhanden ist
filter input tcp option timestamp exists
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
ICMP Type | icmp_type | 8 Bits | integer |
Der ICMP-Typ wird verwendet, um das Typfeld im ICMP-Header einfach anzugeben.
Sie können die folgenden Schlüsselwörter verwenden, wenn Sie den ICMP-Typ angeben:
Stichwort | Wert |
---|---|
echo-reply | 0 |
destination-unreachable | 3 |
source-quench | 4 |
redirect | 5 |
echo-request | 8 |
router-advertisement | 9 |
router-solicitation | 10 |
time-exceeded | 11 |
parameter-problem | 12 |
timestamp-request | 13 |
timestamp-reply | 14 |
info-request | 15 |
info-reply | 16 |
address-mask-request | 17 |
address-mask-reply | 18 |
Angabe des ICMP-Typs
#Ping-Paket abgleichen
filter output icmp type { echo-request, echo-reply }
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
ICMP Code | icmp_code | 8 Bits | integer |
Der ICMP-Codetyp wird verwendet, um das Codefeld im ICMP-Header einfach anzugeben.
Sie können die folgenden Schlüsselwörter verwenden, wenn Sie den ICMP-Code angeben:
Stichwort | Wert |
---|---|
net-unreachable | 0 |
host-unreachable | 1 |
prot-unreachable | 2 |
port-unreachable | 3 |
net-prohibited | 9 |
host-prohibited | 10 |
admin-prohibited | 13 |
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
ICMPv6 Type | icmpv6_type | 8 Bits | integer |
Der Typ ICMPv6 wird verwendet, um das Typfeld im ICMPv6-Header einfach anzugeben.
Sie können die folgenden Schlüsselwörter verwenden, wenn Sie den ICMPv6-Typ angeben:
Stichwort | Wert |
---|---|
destination-unreachable | 1 |
packet-too-big | 2 |
time-exceeded | 3 |
parameter-problem | 4 |
echo-request | 128 |
echo-reply | 129 |
mld-listener-query | 130 |
mld-listener-report | 131 |
mld-listener-done | 132 |
mld-listener-reduction | 132 |
nd-router-solicit | 133 |
nd-router-advert | 134 |
nd-neighbor-solicit | 135 |
nd-neighbor-advert | 136 |
nd-redirect | 137 |
router-renumbering | 138 |
ind-neighbor-solicit | 141 |
ind-neighbor-advert | 142 |
mld2-listener-report | 143 |
Angabe des ICMPv6-Typs
#Match ICMPv6 Ping-Paket
filter output icmpv6 type { echo-request, echo-reply }
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
ICMPv6 Code | icmpv6_code | 8 Bits | integer |
Der ICMPv6-Codetyp wird verwendet, um die Codefelder im ICMPv6-Header einfach anzugeben.
Sie können die folgenden Schlüsselwörter verwenden, wenn Sie den ICMPv6-Code angeben:
Stichwort | Wert |
---|---|
no-route | 0 |
admin-prohibited | 1 |
addr-unreachable | 3 |
port-unreachable | 4 |
policy-fail | 5 |
reject-route | 6 |
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
ICMPvX Code | icmpx_code | 8 Bits | integer |
Die ICMPvX-Codetypabstraktion ist eine Reihe von doppelten Werten zwischen den ICMP- und ICMPv6-Codetypen, die aus der inet-Familie verwendet werden.
Sie können die folgenden Schlüsselwörter verwenden, wenn Sie den ICMPvX-Code angeben:
Stichwort | Wert |
---|---|
no-route | 0 |
port-unreachable | 1 |
host-unreachable | 2 |
admin-prohibited | 3 |
Dies ist eine Übersicht über die in ct-Ausdrücken und -Anweisungen verwendeten Typen.
Name | Stichwort | Größe | Basistyp |
---|---|---|---|
conntrack state | ct_state | 4 Bytes | bitmask |
conntrack direction | ct_dir | 8 Bits | integer |
conntrack status | ct_status | 4 Bytes | bitmask |
conntrack event bits | ct_event | 4 Bytes | bitmask |
conntrack label | ct_label | 128 Bit | bitmask |
Sie können Schlüsselwörter zur Vereinfachung für jeden der oben genannten Typen verwenden.
conntrack state(ct_state)
Stichwort | Wert |
---|---|
invalid | 1 |
established | 2 |
related | 4 |
new | 8 |
untracked | 64 |
conntrack direction(ct_dir)
Stichwort | Wert |
---|---|
original | 0 |
reply | 1 |
conntrack status(ct_status)
Stichwort | Wert |
---|---|
expected | 1 |
seen-reply | 2 |
assured | 4 |
confirmed | 8 |
snat | 16 |
dnat | 32 |
dying | 512 |
conntrack event bits(ct_event)
Stichwort | Wert |
---|---|
new | 1 |
related | 2 |
destroy | 4 |
reply | 8 |
assured | 16 |
protoinfo | 32 |
helper | 64 |
mark | 128 |
seqadj | 256 |
secmark | 512 |
label | 1024 |
Die Schlüsselwörter, die für den Conntrack-Label-Typ (ct_label) angegeben werden können, werden zur Laufzeit aus / etc / connlabel.conf
gelesen.
Der Ausdruck der untersten Ebene ist ein linearer Ausdruck, der eine Paketnutzlast, Metadaten oder konstante oder einzelne Daten aus einem Stateful-Modul darstellt.
meta {length | nfproto | l4proto | protocol | priority}
[meta] {mark | iif | iifname | iiftype | oif | oifname | oiftype | skuid | skgid | nftrace | rtclassid | ibrname | obrname | pkttype | cpu | iifgroup | oifgroup | cgroup | random | secpath}
Ein Metaausdruck sind die Metadaten, die einem Paket zugeordnet sind.
Es gibt zwei Arten von Metaausdrücken: nicht modifizierte Metaausdrücke und modifizierte Metaausdrücke.
Ein qualifizierter Metaausdruck erfordert das Schlüsselwort meta
vor dem Metakey.
Mit nicht qualifizierten Metaausdrücken können Sie die Metakey direkt oder als qualifizierten Metaausdruck angeben.
meta l4proto
hilft dabei, bestimmte Transportprotokolle abzugleichen, die Teil von IPv4- oder IPv6-Paketen sind.
Außerdem werden die in IPv6-Paketen vorhandenen IPv6-Erweiterungsheader übersprungen.
Stichwort | Erläuterung | Art |
---|---|---|
length | Paketlänge(Teilzeitstelle) | integer(32 Bit) |
nfproto | Die eigentliche Hook-Protokollfamilie. Nur nützlich für Inet-Tabellen | integer(32 Bit) |
l4proto | Schicht 4-Protokoll. Überspringen Sie den IPv6-Erweiterungsheader | integer(8 Bits) |
protocol | EtherType-Protokollwert | ether_type |
priority | TC-Paketpriorität | tc_handle |
mark | Paketmarke | mark |
iif | Eingabeschnittstellenindex | iface_index |
iifname | Name der Eingabeschnittstelle | ifname |
iiftype | Typ der Eingabeschnittstelle | iface_type |
oif | Index der Ausgabeschnittstelle | iface_index |
oifname | Name der Ausgabeschnittstelle | ifname |
oiftype | Hardwaretyp der Ausgabeschnittstelle | iface_type |
skuid | UID, die dem ursprünglichen Socket zugeordnet ist | uid |
skgid | GID, die der Originalbuchse zugeordnet ist | gid |
rtclassid | Routing-Bereich | realm |
ibrname | Name der Bridge-Schnittstelle eingeben | ifname |
obrname | Name der Ausgangsbrückenschnittstelle | ifname |
pkttype | Pakettyp | pkt_type |
cpu | CPU-Nummer zur Verarbeitung des Pakets | integer(32 Bit) |
iifgroup | Gerätegruppe empfangen | devgroup |
oifgroup | Gerätegruppe senden | devgroup |
cgroup | Kontrollgruppen-ID | integer(32 Bit) |
random | Pseudozufallszahl | integer(32 Bit) |
secpath | Boolescher Wert | boolean(1 Bit) |
Art | Erläuterung |
---|---|
iface_index | Schnittstellenindex(32-Bit-Nummer).. Dies kann eine Nummer oder der Name einer vorhandenen Schnittstelle sein. |
ifname | Name der Schnittstelle(16-Byte-Zeichenfolge).. Nicht benötigt. |
iface_type | Oberflächentyp(16-Bit-Nummer)。 |
uid | BENUTZERIDENTIFIKATION(32-Bit-Nummer).. Es kann als Nummer oder Benutzername angegeben werden. |
gid | Gruppen-ID(32-Bit-Nummer).. Kann als Nummer oder Gruppenname angegeben werden. |
realm | Routing-Bereich(32-Bit-Nummer).. Numerischer Wert oder/etc/iproute2/rt_realms Es kann als der in definierte Symbolname angegeben werden. |
devgroup_type | Gerätegruppe(32-Bit-Nummer).. Zahlenwert oder/etc/iproute2/group Es kann als Symbolname angegeben werden, der in definiert ist. |
pkt_type | Pakettyp:Unicast(An den lokalen Host),Übertragung(An alle), Multiplizieren(Zur Gruppe)。 |
Beispiel für die Verwendung eines Metaausdrucks
#Modifizierter Meta-Ausdruck
filter output meta oif eth0
#Nicht qualifizierter Metaausdruck
filter output oif eth0
#Pack, das das Ziel der IPSec-Verarbeitung war
raw prerouting meta secpath exists accept
fib {saddr | daddr | {mark | iif | oif}} {oif | oifname | type}
Der fib-Ausdruck fragt fib (Weiterleitungsinformationsbasis) ab, um Informationen wie den von einer bestimmten Adresse verwendeten Ausgangsschnittstellenindex abzurufen. Die Eingabe ist ein Tupel von Elementen, die als Eingabe für die Fib-Suchfunktion verwendet werden.
Stichwort | Erläuterung | Art |
---|---|---|
oif | Index der Ausgabeschnittstelle | integer(32 Bit) |
oifname | Name der Ausgabeschnittstelle | string |
type | Adresstyp | fib_addrtype |
Beispiel für die Verwendung von FIB-Ausdrücken
#Pakete ohne umgekehrten Pfad verwerfen
filter prerouting fib saddr . iif oif missing drop
#Verwerfen Sie Pakete an Adressen, die nicht auf der Schnittstelle konfiguriert sind
filter prerouting fib daddr . iif type != { local, broadcast, multicast } drop
#Spezifisch'blackhole'Führen Sie eine Suche in der Tabelle durch( 0xdead,Erfordert die richtigen IP-Regeln)
filter prerouting meta mark set 0xdead fib daddr . mark type vmap { blackhole : drop, prohibit : jump prohibited, unreachable : drop }
rt {classid | nexthop}
Ein Routing-Ausdruck bezieht sich auf die Routing-Daten, die einem Paket zugeordnet sind.
Stichwort | Erläuterung | Art |
---|---|---|
classid | Routing-Bereich | realm |
nexthop | Routing nächsten Hop | ipv4_addr / ipv6_addr |
mtu | Maximale Segmentgröße des Root-TCP | integer(16 Bit) |
Art | Erläuterung |
---|---|
realm | Routing-Bereich(32-Bit-Nummer).. Numerisch oder/etc/iproute2/rt_realms Es kann als der in definierte Symbolname angegeben werden. |
Beispiel für die Verwendung von Routing-Ausdrücken
#IP-Familienunabhängiger RT-Ausdruck
filter output rt classid 10
#IP-familienabhängiger RT-Ausdruck
ip filter output rt nexthop 192.168.0.1
ip6 filter output rt nexthop fd00::1
inet filter output rt ip nexthop 192.168.0.1
inet filter output rt ip6 nexthop fd00::1
Der Payload-Ausdruck bezieht sich auf die Daten aus der Payload des Pakets.
ether [Ethernet header field]
Stichwort | Erläuterung | Art |
---|---|---|
daddr | Ziel-MAC-Adresse | ether_addr |
saddr | Quell-MAC-Adresse | ether_addr |
type | EtherType | ether_type |
vlan [VLAN header field]
Stichwort | Erläuterung | Art |
---|---|---|
id | VLAN ID(VID) | integer(12 Bits) |
cfi | Canonical Format Indicator | integer(1 Bit) |
pcp | Priority code point | integer(3 Bits) |
type | EtherType | ether_type |
arp [ARP header field]
Stichwort | Erläuterung | Art |
---|---|---|
htype | ARP-Hardwaretyp | integer(16 Bit) |
ptype | EtherType | ether_type |
hlen | Länge der Hardwareadresse | integer(8 Bits) |
plen | Protokolladressenlänge | integer(8 Bits) |
operation | Operation | arp_op |
ip [IPv4 header field]
Stichwort | Erläuterung | Art |
---|---|---|
version | IP-Header-Version(4) | integer(4 Bits) |
hdrlength | IP-Header-Länge einschließlich Optionen | integer(4 Bits)FIXME-Skalierung |
dscp | Differentiated Services Code Point | dscp |
ecn | Explizite Überlastungsbenachrichtigung(Explicit Congestion Notification) | ecn |
length | Gesamtpaketlänge | integer(16 Bit) |
id | IP ID | integer(16 Bit) |
frag-off | Fragmentversatz | integer(16 Bit) |
ttl | Überlebenszeit(Time to live) | integer(8 Bits) |
protocol | Protokoll der oberen Schicht | inet_proto |
checksum | IP-Header-Prüfsumme | integer(16 Bit) |
saddr | Quelladresse | ipv4_addr |
daddr | Zieladresse | ipv4_addr |
icmp [ICMP header field]
Stichwort | Erläuterung | Art |
---|---|---|
type | ICMP-Typfeld | icmp_type |
code | ICMP-Codefeld | integer(8 Bits) |
checksum | ICMP-Prüfsummenfeld | integer(16 Bit) |
id | Echoanforderung/Antwort-ID | integer(16 Bit) |
sequence | Echoanforderung/Antwortsequenznummer | integer(16 Bit) |
gateway | Gateway umleiten | integer(32 Bit) |
mtu | MTU Pfaderkundung MTU | integer(16 Bit) |
ip6 [IPv6 header field]
Dieser Ausdruck verweist auf das IPv6-Headerfeld.
Eine Einschränkung bei der Verwendung von "ip6 nexthdr". Der Wert bezieht sich nur auf den nächsten Header.
Das heißt, ip6 nexthdr tcp
stimmt nur überein, wenn das ipv6-Paket keinen Erweiterungsheader enthält.
Es wird nicht abgeglichen, wenn es fragmentierte Pakete oder Routing-Erweiterungsheader enthält.
Verwenden Sie meta l4proto
, wenn Sie mit dem tatsächlichen Transportheader übereinstimmen möchten, und ignorieren Sie stattdessen den zusätzlichen Erweiterungsheader.
Stichwort | Erläuterung | Art |
---|---|---|
version | IP-Header-Version(6) | integer(4 Bits) |
dscp | Differentiated Services Code Point | dscp |
ecn | Explizite Überlastungsbenachrichtigung(Explicit Congestion Notification) | ecn |
flowlabel | Durchflussetikett | integer(20 Bits) |
length | Nutzlastlänge | integer(16 Bit) |
nexthdr | nexthdr Protokoll | inet_proto |
hoplimit | Hop Limit | integer(8 Bits) |
saddr | Quelladresse | ipv6_addr |
daddr | Zieladresse | ipv6_addr |
Übereinstimmung, wenn der erste Erweiterungsheader auf ein Fragment zeigt
ip6 nexthdr ipv6-frag counter
icmpv6 [ICMPv6 header field]
Stichwort | Erläuterung | Art |
---|---|---|
type | ICMPv6-Typfeld | icmpv6_type |
code | ICMPv6-Codefeld | integer(8 Bits) |
checksum | ICMPv6-Prüfsummenfeld | integer(16 Bit) |
parameter-problem | Zeiger auf das Problem | integer(32 Bit) |
packet-too-big | Übergroße MTU | integer(32 Bit) |
id | Echoanforderung/Antwort-ID | ganze Zahl(16 Bit) |
sequence | Echoanforderung/Antwortsequenznummer | integer(16 Bit) |
max-delay | Maximale Antwortverzögerung für MLD-Abfragen | integer(16 Bit) |
tcp [TCP header field]
Stichwort | Erläuterung | Art |
---|---|---|
sport | Quellport | inet_service |
dport | Zielhafen | inet_service |
sequence | Sequenznummer | integer(32 Bit) |
ackseq | Zulassungsnummer | integer(32 Bit) |
doff | Datenoffset | integer(4 Bits)FIXME-Skalierung |
reserved | Reservierungsbereich | integer(4 Bits) |
flags | TCP-Flag | tcp_flag |
window | Fenster | integer(16 Bit) |
checksum | Prüfsumme | integer(16 Bit) |
urgptr | Notfallzeiger | integer(16 Bit) |
udp [UDP header field]
Stichwort | Erläuterung | Art |
---|---|---|
sport | Quellport | inet_service |
dport | Zielhafen | inet_service |
length | Gesamtpaketlänge | integer(16 Bit) |
checksum | Prüfsumme | integer(16 Bit) |
udplite [UDP-Lite header field]
Stichwort | Erläuterung | Art |
---|---|---|
sport | Quellport | inet_service |
dport | Zielhafen | inet_service |
checksum | Prüfsumme | integer(16 Bit) |
sctp [SCTP header field]
Stichwort | Erläuterung | Art |
---|---|---|
sport | Quellport | inet_service |
dport | Zielhafen | inet_service |
vtag | Validierungs-Tag | integer(32 Bit) |
checksum | Prüfsumme | integer(32 Bit) |
dccp [DCCP header field]
Stichwort | Erläuterung | Art |
---|---|---|
sport | Quellport | inet_service |
dport | Zielhafen | inet_service |
ah [AH header field]
Stichwort | Erläuterung | Art |
---|---|---|
nexthdr | Das folgende Header-Protokoll | inet_proto |
hdrlength | AH Header Länge | integer(8 Bits) |
reserved | Reservierungsbereich | integer(16 Bit) |
spi | Sicherheitsparameterindex | integer(32 Bit) |
sequence | Sequenznummer | integer(32 Bit) |
esp [ESP header field]
Stichwort | Erläuterung | Art |
---|---|---|
spi | Sicherheitsparameterindex | integer(32 Bit) |
sequence | Sequenznummer | integer(32 Bit) |
comp [IPComp header field]
Stichwort | Erläuterung | Art |
---|---|---|
nexthdr | Das folgende Header-Protokoll | inet_proto |
flags | Flagge | bitmask |
cpi | Komprimierungsparameterindex | integer(16 Bit) |
@ [base,offset,length]
Der Raw-Payload-Ausdruck weist Sie an, Längenbits zu laden, die mit Offsetbits beginnen. Bit 0 zeigt auf das erste Bit. In der Programmiersprache C entspricht dies dem höchstwertigen Bit oder "0x80" für Oktette. Diese sind nützlich, um Header abzugleichen, die noch keinen für Menschen lesbaren Vorlagenausdruck haben. Beachten Sie, dass nft keine Abhängigkeiten von unformatierten Nutzdatenausdrücken hinzufügt. Um beispielsweise das Protokollfeld im Transportheader mit Protokollnummer 5 abzugleichen, müssen Sie Pakete mit unterschiedlichen Transportheadern manuell ausschließen. Verwenden Sie beispielsweise "meta l4proto 5" vor dem Raw-Ausdruck.
Base | Erläuterung |
---|---|
ll | Verbindungsschicht wie Ethernet-Header |
nh | Netzwerk-Header wie IPv4 oder IPv6 |
th | Transport-Header wie TCP |
python
#Zielport, der sowohl UDP als auch TCP entspricht
inet filter input meta l4proto {tcp, udp} @th,16,16 { dns, http }
#Wenn die Zielprotokolladresse mit der angegebenen Adresse übereinstimmt
#Schreiben Sie die Zielhardwareadresse des Arp-Pakets neu.
input meta iifname enp2s0 arp ptype 0x0800 arp htype 1 arp hlen 6 arp plen 4 @nh,192,32 0xc0a88f10 @nh,144,48 set 0x112233445566 accept
Erweiterte Header-Ausdrücke beziehen sich auf Daten aus Protokoll-Headern variabler Größe, z. B. erweiterte IPv6-Header und TCP-Optionen.
nftables unterstützt derzeit das Abgleichen (Suchen) bestimmter IPv6-Erweiterungsheader oder TCP-Optionen.
hbh {nexthdr | hdrlength}
frag {nexthdr | frag-off | more-fragments | id}
rt {nexthdr | hdrlength | type | seg-left}
dst {nexthdr | hdrlength}
mh {nexthdr | hdrlength | checksum | type}
srh {flags | tag | sid | seg-left}
tcp option {eol | noop | maxseg | window | sack-permitted | sack | sack0 | sack1 | sack2 | sack3 | timestamp} tcp_option_field
Die folgende Syntax gilt nur für relationale Ausdrücke, die auf der rechten Seite einen Booleschen Typ haben und nur prüfen, ob ein Header vorhanden ist.
exthdr {hbh | frag | rt | dst | mh}
tcp option {eol | noop | maxseg | window | sack-permitted | sack | sack0 | sack1 | sack2 | sack3 | timestamp}
Stichwort | Erläuterung |
---|---|
hbh | Hop für Hop |
rt | Routing-Header |
Fragment | Fragmentierungsheader |
dst | dst Option |
mh | Mobilitätsheader |
srh | Segment-Routing-Header |
Stichwort | Erläuterung | TCP-Optionsfeld |
---|---|---|
eol | Ende der Optionsliste | kind |
noop | 1 Byte TCP-Nr-op Option | kind |
maxseg | Maximale TCP-Segmentgröße | kind, length, size |
window | TCP-Fensterskalierung | kind, length, count |
sack-permitted | Zulässiger TCP-SACK | kind, length |
sack | TCP-selektive Bestätigung(TCP Selective Acknowledgement)(Alias für Block 0) | kind, length, left, right |
sack0 | TCP-selektive Bestätigung(block 0) | kind, length, left, right |
sack1 | TCP-selektive Bestätigung(block 1) | kind, length, left, right |
sack2 | TCP-selektive Bestätigung(block 2) | kind, length, left, right |
sack3 | TCP-selektive Bestätigung(block 3) | kind, length, left, right |
timestamp | TCP-Zeitstempel | kind, length, tsval, tsecr |
#Suchen Sie nach TCP-Optionen
filter input tcp option sack-permitted kind 1 counter
#Suchen Sie nach IPv6 exthdr
ip6 filter input frag more-fragments 1 counter
Der Conntrack-Ausdruck verweist auf die Metadaten des Verbindungsverfolgungseintrags, der dem Paket zugeordnet ist.
Es gibt drei Arten von Conntrack-Ausdrücken.
Einige Conntrack-Ausdrücke erfordern die Flussrichtung vor der Taste "Conntrack", während andere richtungsunabhängig sind und direkt verwendet werden müssen.
Die Schlüsselwörter Pakete
, Bytes
und avgkt
können mit oder ohne Orientierung verwendet werden.
Wenn Sie die Richtung weglassen, wird die Summe aus der ursprünglichen Richtung und der Antwortrichtung zurückgegeben.
Gleiches gilt für Zonen.
Wenn eine Richtung angegeben ist, stimmen die Zonen nur überein, wenn die Zonen-ID der angegebenen Richtung zugeordnet ist.
ct {state | direction | status | mark | expiration | helper | label | l3proto | protocol | bytes | packets | avgpkt | zone}
ct {original | reply} {l3proto | protocol | proto-src | proto-dst | bytes | packets | avgpkt | zone}
ct {original | reply} {ip | ip6} {saddr | daddr}
Stichwort | Erläuterung | Art |
---|---|---|
state | Verbindungsstatus | ct_state |
direction | Richtung des Pakets zur Verbindung | ct_dir |
status | Verbindungsstatus | ct_status |
mark | Verbindungsmarke | mark |
expiration | Ablaufdatum der Verbindung | time |
helper | Helfer mit der Verbindung verbunden | string |
label | nftables enthalten Pfadconnlabel.conf Verbindungsverfolgungsetikettenbit oder symbolischer Name definiert in |
ct_label |
l3proto | Verbindungsprotokoll der Schicht 3 | nf_proto |
saddr | Quelladresse der Verbindung in der angegebenen Richtung | ipv4_addr / ipv6_addr |
daddr | Zieladresse der Verbindung in der angegebenen Richtung | ipv4_addr / ipv6_addr |
protocol | Layer 4-Protokoll für Verbindungen in der angegebenen Richtung | inet_proto |
proto-src | Layer 4-Quellprotokoll in der angegebenen Richtung | integer(16 Bit) |
proto-dst | Layer 4-Zielprotokoll in der angegebenen Richtung | integer(16 Bit) |
packets | Die Anzahl der in der angegebenen Richtung erkannten Pakete oder die Summe des Originals und der Antwort | integer(64-Bit) |
bytes | Anzahl der erkannten Bytes,packets Siehe Keyword-Beschreibung |
integer(64-Bit) |
avgpkt | Durchschnittliche Bytes pro Paket,packets Siehe Keyword-Beschreibung |
integer(64-Bit) |
zone | Verbindungszone | integer(16 Bit) |
Eine Beschreibung der oben genannten conntrack-spezifischen Typen finden Sie im Unterabschnitt CONNTRACK TYPES oben.
Die Anweisung stellt die auszuführende Aktion dar. Sie können den Kontrollfluss ändern (zurückgeben, zu einer anderen Kette springen, Pakete akzeptieren oder verwerfen) und Aktionen wie das Protokollieren und Ablehnen von Paketen ausführen.
Es gibt zwei Arten von Anweisungen. Die end-Anweisung beendet bedingungslos die Auswertung der aktuellen Regel. Nicht terminierende Anweisungen beenden die Auswertung der aktuellen Regel nur bedingt oder nie. Das heißt, sie sind in Bezug auf die Regelsatzbewertung passiv. Die Regel kann eine beliebige Anzahl nicht abschließender Anweisungen enthalten, es kann jedoch nur eine einzige abschließende Anweisung als endgültige Anweisung verwendet werden.
Die Entscheidungsanweisung ändert den Regelsatzsteuerungsfluss und gibt eine Richtlinienentscheidung für das Paket aus.
{accept | drop | queue | continue | return}
{jump | goto} chain
jump
, aber die aktuelle Position wird nicht in den Call Stack verschoben. Das heißt, nach dem Auswerten einer neuen Kette wird mit der letzten Kette fortgefahren, nicht mit der Kette, die die Anweisung goto
enthält.#Pakete von eth0 und internes Netzwerk von_Prozess mit LAN.
filter input iif eth0 ip saddr 192.168.0.0/24 jump from_lan
#Löschen Sie alle Pakete aus der Kette eth0 mit unterschiedlichen Quelladressen.
filter input iif eth0 drop
Die Payload-Anweisung ändert den Inhalt des Pakets. Beispielsweise kann es verwendet werden, um das IP-DSCP-Headerfeld (differv) oder das IPv6-Flow-Label festzulegen.
Leiten Sie einige Pakete weiter, anstatt sie zu überbrücken.
# tcp:http 192.160.0.0/Leiten Sie von 16 auf Ihren lokalen Computer um und leiten Sie ihn weiter, anstatt ihn zu überbrücken
# 00:11:22:33:44:Es wird angenommen, dass 55 die lokale MAC-Adresse ist.
bridge input meta iif eth0 ip saddr 192.168.0.0/16 tcp dport 80 meta pkttype set unicast ether daddr set 00:11:22:33:44:55
#Festlegen von IPv4-DSCP-Headerfeldern
ip forward ip dscp set 42
Die erweiterte Header-Anweisung ändert den Paketinhalt von Headern variabler Größe. Dies kann jetzt verwendet werden, um die maximale TCP-Segmentgröße eines Pakets zu ändern, ähnlich wie bei TCPMSS.
#Ändern Sie tcp mss
tcp flags syn tcp option maxseg size set 1360
#Stellen Sie die Größe basierend auf den Routeninformationen ein
tcp flags syn tcp option maxseg size set rt mtu
log [prefix quoted_string] [level syslog-level] [flags log-flags]
log group nflog_group [prefix quoted_string] [queue-threshold value] [snaplen size]
Die log-Anweisung ermöglicht die Protokollierung übereinstimmender Pakete.
Unter Verwendung dieser Anweisung aus einer Regel druckt der Linux-Kernel Informationen über alle übereinstimmenden Pakete, einschließlich Header-Felder, über das Kernel-Protokoll (das von dmesg (1) oder syslog gelesen werden kann).
Wenn eine Gruppennummer angegeben wird, übergibt der Linux-Kernel das Paket an nfnetlink_log
und sendet das Paket über den netlink
-Socket an die angegebene Multicast-Gruppe.
Ein oder mehrere Userspace-Prozesse können in einer Gruppe registriert sein und Pakete empfangen.
Weitere Informationen finden Sie in der Dokumentation zu libnetfilter_queue.
Da dies eine nicht terminierende Anweisung ist, wird die Regelauswertung fortgesetzt, nachdem das Paket protokolliert wurde.
Stichwort | Erläuterung | Art |
---|---|---|
prefix | Präfix der Protokollnachricht | Zeichenfolge in Anführungszeichen |
level | Syslog-Protokollierungsstufe | string: emerg, alert, crit, err, warn [default], notice, info, debug |
group | NFLOG-Gruppe, um eine Nachricht zu senden | Ganzzahl ohne Vorzeichen(16 Bit) |
snaplen | Länge der Paketnutzlast, die in die Netlink-Nachricht aufgenommen werden soll | Ganzzahl ohne Vorzeichen(32 Bit) |
que-threshold | Anzahl der Pakete, die im Kernel in die Warteschlange gestellt werden sollen, bevor sie an den Benutzerbereich gesendet werden | Ganzzahl ohne Vorzeichen(32 Bit) |
Flagge | Erläuterung |
---|---|
tcp sequence | Protokollieren Sie die TCP-Sequenznummer. |
tcp options | Protokolloptionen für TCP-Paket-Header. |
ip options | IP /Protokolloptionen für IPv6-Paket-Header. |
skuid | Protokollieren Sie die Benutzer-ID des Prozesses, der das Paket generiert hat. |
ether | Dekodieren Sie die MAC-Adresse und das Protokoll. |
all | Aktivieren Sie alle oben genannten Protokollflags. |
Verwendungsbeispiel für Protokollanweisungen
#Protokollieren Sie die UID, die die Paket- und IP-Optionen generiert hat
ip filter output log flags skuid flags ip options
#Protokollieren Sie TCP-Sequenznummern und TCP-Optionen aus TCP-Paketen
ip filter output log flags tcp sequence,options
#Aktivieren Sie alle unterstützten Protokollflags
ip6 filter output log flags all
reject [ with {icmp | icmpv6 | icmpx} type {icmp_code | icmpv6_code | icmpx_code} ]
reject [ with tcp reset ]
Die Anweisung "Zurückweisen" wird verwendet, um ein Fehlerpaket als Antwort auf ein übereinstimmendes Paket zurückzusenden.
Ansonsten ist es dasselbe wie drop
, also ist es eine end-Anweisung, die das Durchlaufen von Regeln beendet.
Diese Anweisung gilt nur für Eingabeketten, Vorwärtsketten, Ausgabeketten und benutzerdefinierte Ketten, die nur von diesen Ketten aufgerufen werden.
Die verschiedenen ICMP-Verweigerungsvariablen sind für die Verwendung mit verschiedenen Tabellenfamilien vorgesehen.
Variable | Familie | Art |
---|---|---|
icmp | ip | icmp_code |
icmpv6 | ip6 | icmpv6_code |
icmpx | inet | icmpx_code |
Im Abschnitt Datentypen (#Datentypen) oben finden Sie eine Beschreibung der Typen und eine Liste der unterstützten Schlüsselwörter. Im Allgemeinen ist der Standardwert für die Verweigerung "Port nicht erreichbar".
Beachten Sie, dass in der Bridge-Familie Reject
-Anweisungen nur in Basechains zulässig sind, die sich in Eingaben oder Prerouting einbinden.
Die counter
-Anweisung legt die Anzahl der Treffer in einem Paket zusammen mit der Anzahl der Bytes fest.
counter [ packets number bytes number ]
Mit der Anweisung conntrack können Sie die Markierung conntrack und die Bezeichnung conntrack festlegen.
ct {mark | event | label | zone} set value
Die Anweisung ct
legt die der Verbindung zugeordneten Metadaten fest.
Die Zonen-ID muss zugewiesen werden, bevor eine Conntrack-Suche durchgeführt werden kann.
Das heißt, dies sollte mit Prerouting und Ausgabe erfolgen (wenn lokal generierte Pakete in separaten Zonen platziert werden müssen) und die Hook-Priorität "-300" ist.
Stichwort | Erläuterung | Wert |
---|---|---|
event | Conntrack-Ereignisbit | bitmask, integer(32 Bit) |
helper | Der Name des der Verbindung zugewiesenen ct-Hilfsobjekts | Zitierte Zeichenfolge |
mark | Verbindungsverfolgungsmarkierung | mark |
label | Verbindungsverfolgungsetikett | label |
zone | Verbindungszone | integer(16 Bit) |
#Speichern Sie das Paket nfmark, um es zu verfolgen
ct mark set meta mark
#Richten Sie zugeordnete Zonen über die Schnittstelle ein
table inet raw {
chain prerouting {
type filter hook prerouting priority -300;
ct zone set iif map { "eth1" : 1, "veth1" : 2 }
}
chain output {
type filter hook output priority -300;
ct zone set oif map { "eth1" : 1, "veth1" : 2 }
}
}
#Begrenzen Sie die von ctnetlink gemeldeten Ereignisse
ct event set new,related,destroy
Die Anweisung meta
legt den Wert des Metaausdrucks fest.
Die vorhandenen Metafelder sind "Priorität", "Marke", "Pkt-Typ", "Nftrace".
meta {mark | priority | pkttype | nftrace} set value
Die Metaanweisung legt die dem Paket zugeordneten Metadaten fest.
Stichwort | Erläuterung | Wert |
---|---|---|
priority | TC-Paketpriorität | tc_handle |
mark | Paketmarke | mark |
pkttype | Pakettyp | pkt_type |
nftrace | Regelsatz-Paketverfolgung auf/aus. So überwachen Sie die Ablaufverfolgungmonitor trace Verwenden Sie den Befehl. |
0, 1 |
limit rate [over] packet_number / {second | minute | hour | day} [burst packet_number packets]
limit rate [over] byte_number {bytes | kbytes | mbytes} / {second | minute | hour | day | week} [burst byte_number bytes]
Die Anweisung limit
stimmt mit dem Token-Bucket-Filter mit einer begrenzten Rate überein.
Regeln, die diese Anweisung verwenden, stimmen überein, bis dieses Limit erreicht ist.
Sie können dies in Kombination mit einer Protokollanweisung verwenden, um die Protokollierung einzuschränken.
Das optionale Schlüsselwort "über" stimmt mit der angegebenen Rate überein.
Wert | Erläuterung | Art |
---|---|---|
packet_number | Anzahl der Pakete | Ganzzahl ohne Vorzeichen(32 Bit) |
byte_number | Anzahl der Bytes | Ganzzahl ohne Vorzeichen(32 Bit) |
snat to address [:port] [persistent, random, fully-random]
snat to address - address [:port - port] [persistent, random, fully-random]
dnat to address [:port] [persistent, random, fully-random]
dnat to address [:port - port] [persistent, random, fully-random]
masquerade to [:port] [persistent, random, fully-random]
masquerade to [:port - port] [persistent, random, fully-random]
redirect to [:port] [persistent, random, fully-random]
redirect to [:port - port] [persistent, random, fully-random]
Die nat
Anweisung ist nur ab dem nat
Kettentyp gültig.
Die Anweisungen snat
und masquerade
geben an, dass die Quelladresse des Pakets geändert werden sollte.
snat gilt nur für Postrouting und Eingabeketten, Maskerade jedoch nur für Postrouting.
Die Anweisungen dnat und redirect sind nur in der Vorroutierungs- und Ausgabekette gültig und geben an, dass die Zieladresse des Pakets geändert werden soll.
Sie können auch Nicht-Basisketten verwenden, die von Basisketten vom Typ nat chain aufgerufen werden.
Alle zukünftigen Pakete auf dieser Verbindung werden verworfen und die Regelauswertung wird abgebrochen.
Die masquerade
-Anweisung ist eine spezielle Form von snat
und verwendet immer die IP-Adresse der Zielsende-Schnittstelle.
Dies ist besonders nützlich für Gateways mit dynamischen (öffentlichen) IP-Adressen.
Die redirect
-Anweisung ist eine spezielle Form von dnat
, die die Zieladresse immer in die Adresse des lokalen Hosts übersetzt.
Dies ist nützlich, wenn Sie nur den Zielport für eingehenden Datenverkehr auf verschiedenen Schnittstellen ändern möchten.
Beachten Sie, dass jede nat-Anweisung sowohl Prerouting- als auch Postrouting-Basisketten enthalten muss. Andernfalls werden die Pakete auf der Rückroute vom Netzfilter nicht erkannt und die umgekehrte Konvertierung findet nicht statt.
Formel | Erläuterung | Art |
---|---|---|
address | Paketquelle/Gibt an, dass die Zieladresse geändert werden muss. Sie können eine Zuordnung angeben, um eine Liste von Tupeln, die aus einem beliebigen Ausdrucksschlüssel bestehen, einem Adresswert zuzuordnen. | ipv4_addr, ipv6_addr,Zum Beispielabcd::1234 Oder Sie können Mapping verwenden. Meta Mark Map{ 10:192.168.1.2, 20:192.168.1.3 } |
port | Paketquelle/Gibt an, dass die Zieladresse geändert werden muss. | Port-Nummer(16 Bit) |
Flagge | Erläuterung |
---|---|
persistent | Gleiche Quelle für jede Verbindung/Geben Sie dem Client die Zieladresse. |
random | Bei Verwendung wird die Portzuordnung unter Verwendung von Quell- und Zieladressen zufällig ausgewählt, und eine MD5-Hash-Mischung wird zufällig unter Verwendung des Zielports ausgesät. |
fully-random | Bei Verwendung werden Portzuordnungen basierend auf einem 32-Bit-Pseudozufallsalgorithmus generiert. |
Verwendung von NAT-Anweisungen
#Eine Tabelle, die für alle anderen Beispiele geeignet ist/Erstellen Sie eine Ketteneinstellung
add table nat
add chain nat prerouting { type nat hook prerouting priority 0; }
add chain nat postrouting { type nat hook postrouting priority 100; }
#Adresse 1 Die Quelladresse aller über eth0 gesendeten Pakete.2.3.In 4 konvertieren
add rule nat postrouting oif eth0 snat to 1.2.3.4
#Zieladresse 192 für den gesamten über eth0 eingehenden Datenverkehr.168.1.Auf 120 umleiten
add rule nat prerouting iif eth0 dnat to 192.168.1.120
#Übersetzen Sie die Quelladresse aller über eth0 gesendeten Pakete in irgendetwas
#Lokal generierte Pakete werden als Quelle verwendet, um dasselbe Ziel zu erreichen
add rule nat postrouting oif eth0 masquerade
#Direkter eingehender TCP-Verkehr auf Port 22 zu Port 2222
add rule nat prerouting tcp dport 22 redirect to :2222
Mit der Flow Offload-Anweisung können Sie einen Flow auswählen, der die Übertragung über einen Layer 3-Netzwerkstapel-Bypass beschleunigt. Sie müssen den Namen der Flusstabelle angeben, um diesen Flow auszulagern.
flow offload @flowtable
Diese Anweisung verwendet den Handler nfnetlink_queue
, um das Paket an den Benutzerbereich zu übergeben.
Das Paket wird in eine Warteschlange gestellt, die durch eine 16-Bit-Warteschlangennummer gekennzeichnet ist.
Userspace kann Pakete nach Bedarf überprüfen und ändern.
Userspace muss dann das Paket aus dem Kernel löschen oder erneut einwerfen.
Weitere Informationen finden Sie in der Dokumentation zu libnetfilter_queue.
queue [num queue_number] [bypass]
queue [num queue_number_from - queue_number_to] [bypass,fanout]
Wert | Erläuterung | Art |
---|---|---|
queue_number | Stellen Sie die Warteschlangennummer ein. Der Standardwert ist 0. | Ganzzahl ohne Vorzeichen(16 Bit) |
queue_number_from | Wenn Fanout verwendet wird, stellen Sie die anfängliche Warteschlange innerhalb des Bereichs ein. | Ganzzahl ohne Vorzeichen(16 Bit) |
queue_number_to | Wenn Fanout verwendet wird, stellen Sie die Endwarteschlange innerhalb des Bereichs ein. | Ganzzahl ohne Vorzeichen(16 Bit) |
Flagge | Erläuterung |
---|---|
bypass | Wenn die User Space-Anwendung nicht zurückgesetzt werden kann, übergeben Sie das Paket. Bevor Sie dieses Flag verwendenlibnetfilter_queue In der Dokumentation unter finden Sie Empfehlungen zur Leistungsoptimierung. |
fanout | Verteilen Sie Pakete auf mehrere Warteschlangen. |
Die dup-Anweisung wird verwendet, um ein Paket zu duplizieren und eine Kopie an ein anderes Ziel zu senden.
dup to device
dup to address device device
Formel | Erläuterung | Art |
---|---|---|
address | Gibt an, dass eine Kopie des Pakets an das neue Gateway gesendet werden soll. | ipv4_addr, ipv6_addr. Zum Beispielabcd::1234 .. Oder Sie können Mapping verwenden.ip saddr map {192.168.1.2:10.1.1.1} |
device | Gibt an, dass eine Kopie über das Gerät gesendet werden soll. | string |
Beispiel für die Verwendung der Anweisung dup
#IP-Adresse 10 mit eth0.2.3.An 4 Maschinen senden
ip filter forward dup to 10.2.3.4 device "eth0"
#Kopieren Sie den Rohrahmen auf eine andere Schnittstelle
netdetv ingress dup to "eth0"
dup to "eth0"
#Map to Gateway Mit dst addr kombinieren
dup to ip daddr map { 192.168.7.1 : "eth0", 192.168.7.2 : "eth1" }
Die fwd-Anweisung wird verwendet, um Rohpakete an eine andere Schnittstelle umzuleiten. Es kann nur mit dem Ingress-Hook der netdev-Familie verwendet werden. Ähnlich einer dup-Anweisung, nur dass keine Kopie erstellt wird.
fwd to device
Die set
-Anweisung wird verwendet, um Elemente in der Menge aus dem Paketpfad dynamisch hinzuzufügen oder zu aktualisieren.
set setname
muss bereits in der angegebenen Tabelle vorhanden sein.
Darüber hinaus müssen Sätze, die dynamisch aus dem Regelsatz nftables aktualisiert werden, sowohl eine maximale Satzgröße (um zu verhindern, dass der Speicher knapp wird) als auch eine Zeitüberschreitung (um zu verhindern, dass die Anzahl der Einträge im Satz auf unbestimmte Zeit wächst) angeben. ..
Die set-Anweisung erstellt beispielsweise eine dynamische Blacklist.
{add | update} @setname {expression [timeout timeout] [comment string]}
Einfaches Beispiel für eine schwarze Liste
#Familie"ip"Tabelle"filter"Deklarieren Sie das gebundene Set. Zeitüberschreitung und Größe sind erforderlich, um Elemente aus dem Paketpfad hinzuzufügen.
nft add set ip filter blackhole "{type ipv4_addr; flags timeout; size 65536;}"
#Whitelist der internen Schnittstelle.
nft add rule ip filter input meta iifname "internal" accept
#Verwerfen Sie Pakete von IP-Adressen auf der schwarzen Liste.
nft add rule ip filter input ip saddr @blackhole counter drop
#Wenn mehr als 10 TCP-Verbindungsanforderungen pro Sekunde vorliegen, geben Sie die Quell-IP-Adresse auf die schwarze Liste.
#Die Eingabe läuft nach 1 Minute ab. Wenn der eingeschränkte Status danach weiterhin besteht, kann der Eintrag erneut hinzugefügt werden.
nft add rule ip filter input tcp flags syn tcp dport ssh meter flood size 128000 {ip saddr timeout 10s limit rate over 10 / second} add @blackhole {ip saddr timeout 1m} drop
#Überprüfen Sie den Status des Ratenbegrenzungsmessers.
nft list meter ip filter flood
#Überprüfen Sie den Inhalt des Schwarzen Lochs:
nft list set ip filter blackhole
#Fügen Sie die beiden Adressen manuell zum Set hinzu:
nft add element filter blackhole { 10.2.3.4, 10.23.1.42 }
Dies sind einige der zusätzlichen Befehle, die in nft enthalten sind.
Mit dem Befehl monitor
können Sie auf Netlink-Ereignisse warten, die vom Subsystem nf_tables im Zusammenhang mit dem Erstellen und Löschen von Objekten generiert wurden.
Wenn ein Ereignis auftritt, druckt nft das überwachte Ereignis als Standardausgabe im XML-, JSON- oder nativen nft-Format.
Um Ereignisse zu filtern, die sich auf konkrete Objekte beziehen, eines der Schlüsselwörter "Tabellen", "Ketten", "Mengen", "Regeln", "Elemente", "Regelsatz" Benutzen.
Verwenden Sie die Schlüsselwörter "new" oder "destroy", um Ereignisse zu filtern, die sich auf eine bestimmte Aktion beziehen.
Drücken Sie ^ C
, um den Überwachungsvorgang zu beenden.
#Hört auf alle Ereignisse und gibt einen Bericht im nativen nft-Format aus
% nft monitor
#Hört die hinzugefügte Tabelle und gibt einen Bericht im XML-Format aus
% nft monitor new tables xml
#Lauscht auf gelöschte Regeln und gibt einen Bericht im JSON-Format aus
% nft monitor destroy rules json
#Wartet auf neue und zerstörte Ketten im nativen nft-Format
% nft monitor chains
#Lauscht auf Regelsatzereignisse wie Tabellen, Ketten, Regeln, Mengen, Zähler und Kontingente im nativen nft-Format
% nft monitor ruleset
Wenn ein Fehler erkannt wird, gibt nft
die Zeile an, die den Fehler enthält, gibt die Position des fehlerhaften Teils im Eingabestream an und markiert den fehlerhaften Teil mit dem Übertrag (^
). Ich werde es hochladen.
Wenn der Fehler auf eine Kombination von zwei Ausdrücken oder Anweisungen zurückzuführen ist, wird der Teil, der die verletzende Einschränkung auferlegt, mit einem Tilder (~
) markiert.
Für vom Kernel zurückgegebene Fehler kann nft nicht erkennen, welcher Teil der Eingabe den Fehler verursacht, und der gesamte Befehl wird markiert.
Fehler aufgrund eines falschen Ausdrucks
<cmdline>:1:19-22: Error: Interface does not exist
filter output oif eth0
^^^^
Fehler durch eine ungültige Kombination zweier Ausdrücke
<cmdline>:1:28-36: Error: Right hand side of relational expression (==) must be constant
filter output tcp dport == tcp dport
~~ ^^^^^^^^^
Vom Kernel zurückgegebener Fehler
<cmdline>:0:0-23: Error: Could not process rule: Operation not permitted
filter output oif wlan0
^^^^^^^^^^^^^^^^^^^^^^^
Bei Erfolg wird nft mit dem Status 0 beendet. Wenn ein nicht angegebener Fehler auftritt, wird er mit Status 1 beendet, Status 2 ist Status 3, wenn es sich um einen Speicherzuordnungsfehler handelt und der Netlink-Socket nicht geöffnet werden kann.
Es gibt ein offizielles Wiki unter https://wiki.nftables.org.
Recommended Posts