Ich habe einige Nachforschungen über Netfilter angestellt. Ich habe festgestellt, dass es verschiedene Unterschiede in der Wahrnehmung gibt, also werde ich es aufzeichnen.
Mit CentOS8 (aber nicht beschränkt auf) haben wir Folgendes gefunden. ** iptables sind nftables, keine iptables ** ** Mit firewall-cmd festgelegte Regeln werden in iptables nicht angezeigt ** ** Verwenden Sie nft für alle Regelprüfungen **
netfilter netfilter ist eine Grundregel für die Verarbeitung von Paketen unter Linux Es ist die Art der Verarbeitung der auf der Schnittstelle empfangenen Pakete.
Laut netfilter.org
netfilter ist eine Reihe von Hooks im Linux-Kernel, mit denen Kernelmodule Rückruffunktionen im Netzwerkstapel registrieren können. Die registrierte Rückruffunktion wird für jedes Paket zurückgerufen, das jeden Hook im Netzwerkstapel durchläuft.
Korrekt. Vielen Dank, dass Sie Google Übersetzung!
Mit anderen Worten, wenn ein Paket den Netzwerkstapel passiert, kann eine gewisse Verarbeitung durch einen von netfilter definierten "Hook" eingefügt werden. Bedeutet das?
Eine Reihe von Prozessen, die den Netzwerkstapel durchlaufen, wird als Kette bezeichnet. Die Kette besteht aus:
Name | Bedeutung |
---|---|
hook | In welchem Teil (des Netzwerkstapels) |
priority | In welcher Reihenfolge |
type | Was ist zu tun |
Die Grundfigur ist unten.
Referenz: https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
Ein Hook ist eine Darstellung von "welchem Teil (des Netzwerkstapels)" dessen, was verarbeitet wird. Mit anderen Worten, es drückt den Zeitpunkt des Fangens aus.
Sie können sehen, dass sich die Verarbeitung im Teil "Routing-Entscheidung" nahe der Mitte der obigen Abbildung geändert hat. Der verwendete Hook hängt davon ab, ob das eingehende Paket "lokal adressiert" oder "nicht lokal adressiert (= weitergeleitet)" ist.
Unten ist der Fokus auf den Hakenteil.
Local
process
^ | .-----------.
.-----------. | | | Routing |
| |-----> input / \---> | Decision |----> output \
--> prerouting --->| Routing | .-----------. \
| Decision | --> postrouting
| | /
| |---------------> forward ---------------------------
.-----------.
Referenz: https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks
Mit anderen Worten, je nach Ziel werden folgende Hooks verwendet.
Für Einheimische prerouting -> input -> output -> postrouting
Beim Übertragen prerouting -> forward -> postrouting
(Darüber hinaus scheint es einen Hook für ein Paket zu L2 zu geben, das als Ingress bezeichnet wird.)
Die Priorität drückt das "in welcher Reihenfolge" die Verarbeitung aus. Mit anderen Worten, es drückt die Reihenfolge der Verarbeitung in jedem Haken aus.
Die Priorität wird durch eine positive oder negative Zahl dargestellt, es wird jedoch ein Alias definiert. dstnat und scrnat sind nur zum Vor- und Nachrouten von Hooks verfügbar.
Die Substanz ist jedoch ein numerischer Wert, bis sie müde wird.
Bekannt als | Definition | priority | Verfügbare Haken |
---|---|---|---|
- | NF_IP_PRI_RAW_BEFORE_DEFRAG | -450 | alles |
- | NF_IP_PRI_CONNTRACK_DEFRAG | -400 | alles |
raw | NF_IP_PRI_RAW | -300 | alles |
- | NF_IP_PRI_SELINUX_FIRST | -225 | alles |
- | NF_IP_PRI_CONNTRACK | -200 | alles |
mangle | NF_IP_PRI_MANGLE | -150 | alles |
dstnat | NF_IP_PRI_NAT_DST | -100 | prerouting |
filter | NF_IP_PRI_FILTER | 0 | alles |
security | NF_IP_PRI_SECURITY | 50 | alles |
srcnat | NF_IP_PRI_NAT_SRC | 100 | postrouting |
- | NF_IP_PRI_SELINUX_LAST | 225 | alles |
- | NF_IP_PRI_CONNTRACK_HELPER | 300 | alles |
Referenz: http://git.netfilter.org/nftables/tree/include/linux/netfilter_ipv4.h Referenz: https://manpages.debian.org/testing/nftables/nft.8.en.html
Es ist ähnlich wie bei der sogenannten "Tabelle".
Der Typ drückt aus, welche Art von Verarbeitung durchgeführt werden soll. Mit anderen Worten, es drückt aus, was speziell mit dem Paket zu tun ist.
type | Verfügbare Haken |
---|---|
filter | alles |
nat | prerouting,postrouting,input,output |
route | output |
Das? Dieser ähnelt auch der "Tabelle". Deshalb ist es verwirrend!
Referenz: https://www.netfilter.org/projects/nftables/manpage.html
Ich habe oben erklärt, was Netfilter ausmacht, aber wie arbeiten Sie mit Netfilter? Es geht also um die Software, die sie bedient.
firewalld befindet sich oben und iptables oder nftables werden im Backend ausgeführt. Die im Backend ausgeführten iptables oder nftables betreiben den Netzfilter.
Ältere Versionen von firewalld haben iptables im Backend Die neue Version von firewalld verwendet nftables als Backend.
Sehr leicht zu verstehen. Ich frage mich, ob dies der Titel dieses Artikels ist.
Referenz: https://firewalld.org/documentation/concepts.html
iptables ist ein Tool, mit dem Netfilter betrieben werden kann. Im alten CentOS wurde iptables vor der Einführung von firewalld zu einem Daemon (Dienst?) Mit iptables-service gemacht. Mit anderen Worten, ich habe Filterung oder NAT durchgeführt, indem ich die Regeln von iptables direkt mit dem Befehl iptables geändert oder eine bestimmte Datei geladen habe.
CentOS8 hat auch iptables, aber die Entität läuft auf nftables.
# iptables --version
iptables v1.8.2 (nf_tables)
Iptables ist jedoch nicht länger iptables.
# ll /usr/sbin/iptables
lrwxrwxrwx.1 Wurzel Wurzel 17 November 9 03:40 /usr/sbin/iptables -> xtables-nft-multi
# man xtables-nft
NAME
xtables-nft ― iptables using nftables kernel api
DESCRIPTION
xtables-nft are versions of iptables that use the nftables
API. This is a set of tools to help the system administra‐
tor migrate the ruleset from iptables(8), ip6tables(8),
arptables(8), and ebtables(8) to nftables(8).
Wenn Sie auf iptables klicken, können Sie die Regeln in einem solchen Format anzeigen. In iptables kann ich jedoch die von nftables hinzugefügte Tabelle nicht sehen, die später beschrieben wird. Daher stimmen die von iptables -L -nv -t nat | filter angezeigten Regeln möglicherweise nicht mit dem tatsächlichen Verhalten überein.
Wenn Sie beispielsweise "firewall-cmd --add-masquerade" verwenden, um einen Port von einem Docker-Host auf einen mit einer Brücke verbundenen Container zu übertragen. Wenn Sie die Kette mit nft überprüfen, sehen Sie die folgende Operation.
# nft list chain ip firewalld nat_POST_public_allow
table ip firewalld {
chain nat_POST_public_allow {
oifname != "lo" masquerade
}
}
Aber ich kann die Tabelle mit dem Namen firewalld von iptables nicht sehen.
# iptables -L -t firewalld
iptables v1.8.2 (nf_tables): table 'firewalld' does not exist
Perhaps iptables or your kernel needs to be upgraded.
Wenn Sie sich den Teil TABLES mit "man iptables" ansehen, können Sie die Tabelle nur mit den angegebenen Schlüsselwörtern in iptables überprüfen.
TABLES
There are currently five independent tables (which tables are present at any time depends on the kernel configuration options and which modules are
present).
-t, --table table
The tables are as follows:
filter:
nat:
mangle:
raw:
security:
Mit anderen Worten, wenn nftables auf der Rückseite von firewalld ausgeführt werden, sind die in ** iptables angezeigten Regeln falsch! ** ** ** Verwenden Sie zur Bestätigung der Regeln nft anstelle von ** iptables! ** ** **
nftables ist auch ein alternatives Tool zu iptabes, mit dem Sie netfilter manipulieren können. Es scheint, dass nftables auf die gleiche Weise wie die oben erwähnten iptables zu einem Dienst gemacht werden können, aber ...
# systemctl status nftables
● nftables.service - Netfilter Tables
Loaded: loaded (/usr/lib/systemd/system/nftables.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:nft(8)
In CentOS8 wird firewalld ausgeführt und nftables werden hinter den Kulissen ausgeführt. Es scheint also, dass der Daemon als nftables ruht.
Der Inhalt löscht die Regel und liest die Einstellungsdatei mit dem Befehl nft
, wie unten gezeigt.
Es ist ähnlich wie iptables zu einem Daemon zu machen.
# cat /usr/lib/systemd/system/nftables.service | grep nft
Documentation=man:nft(8)
ExecStart=/sbin/nft -f /etc/sysconfig/nftables.conf
ExecReload=/sbin/nft 'flush ruleset; include "/etc/sysconfig/nftables.conf";'
ExecStop=/sbin/nft flush ruleset
In debian / arch / ubuntu / fedora scheint das Verhalten des nftables-Dämons die Standardeinstellung zu sein.
Referenz: https://wiki.nftables.org/wiki-nftables/index.php/Nftables_from_distributions
nft
nftables werden durch den Befehl nft
bereitgestellt.
Die in nft festgelegten Regeln werden als Kette ausgedrückt, die der Prozess selbst ist, und als Tabelle, die die Ketten kombiniert.
Eine Kette ist eine Sammlung von Prozessen, die von einem bestimmten Typ mit einem bestimmten Hook ausgedrückt werden, und es gibt nur einen "welchen Teil (des Netzwerkstapels)", "in welcher Reihenfolge" und "welche Art von Verarbeitung". Es ist in der Kette von zusammengestellt. Eine Tabelle kann als virtuelle Gruppe mehrerer Ketten betrachtet werden.
Verwenden Sie den Befehl nft list
, um die Einstellungen zu überprüfen.
nft list table(s)
Es werden nur die Namen aller eingestellten Tabellen angezeigt.
# nft list tables
table ip filter
table ip6 filter
(Oder viel)
Zeigt alle konfigurierten Ketten der angegebenen Tabelle an.
# nft list table ip nat
table ip nat {
chain PREROUTING {
type nat hook prerouting priority -100; policy accept;
fib daddr type local counter packets 0 bytes 0 jump DOCKER
}
(Alle in der Tabelle ip nat enthaltenen Ketten werden angezeigt.)
nft list chain(s) Für alle festgelegten Ketten wird angezeigt, in welcher Tabelle jede Kette enthalten ist und in welcher Reihenfolge die Verarbeitung in "welchem Teil (des Netzwerkstapels)" ausgeführt wird, was die Aktivierungsbedingung ist. Getan werden. (Spezifische Verarbeitungsdetails werden nicht angezeigt.)
# nft list chains
table ip filter {
chain INPUT {
type filter hook input priority 0; policy accept;
}
chain FORWARD {
type filter hook forward priority 0; policy drop;
}
(Es wird viel angezeigt)
Zeigen Sie die angegebene Kette an
# nft list chain ip filter FORWARD
table ip filter {
chain FORWARD {
type filter hook forward priority 0; policy drop;
counter packets 0 bytes 0 jump DOCKER-USER
(Es wird viel angezeigt)
Alle festgelegten Regeln werden angezeigt.
# nft list ruleset
table ip filter {
chain INPUT {
type filter hook input priority 0; policy accept;
}
chain FORWARD {
type filter hook forward priority 0; policy drop;
counter packets 0 bytes 0 jump DOCKER-USER
(Viele von ihnen werden angezeigt)
Der Umgang mit Paketen, einschließlich Netzfilter, ist tiefgreifend. Möglicherweise haben Sie immer noch das falsche Verständnis, und selbst wenn Sie es auf Text einstellen, funktioniert es möglicherweise. Ich möchte das richtige Wissen so weit wie möglich einfließen lassen.
Recommended Posts