[LINUX] Beziehung zwischen Netfilter, Firewall, Iptables und Nftables

Einführung

Ich habe einige Nachforschungen über Netfilter angestellt. Ich habe festgestellt, dass es verschiedene Unterschiede in der Wahrnehmung gibt, also werde ich es aufzeichnen.

Unterschied in der Wahrnehmung

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 **

Informationen zum Paketfluss unter Linux

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?

Netzfilterkette

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.

Screenshot from Gyazo

Referenz: https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

Netzfilter Kettenhaken

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.)

Netzfilterkettenpriorität

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".

Netzfilterkettentyp

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

Firewalld, Iptables und Nftables

Ich habe oben erklärt, was Netfilter ausmacht, aber wie arbeiten Sie mit Netfilter? Es geht also um die Software, die sie bedient.

Was ist Firewall?

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.

Screenshot from Gyazo

Sehr leicht zu verstehen. Ich frage mich, ob dies der Titel dieses Artikels ist.

Referenz: https://firewalld.org/documentation/concepts.html

Was sind iptables?

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! ** ** **

Was sind Nftables?

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

Grundlegende Verwendung von nftables

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 Regeln anzeigen

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)

schließlich

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

Beziehung zwischen Netfilter, Firewall, Iptables und Nftables
Die subtile Beziehung zwischen Gentoo und Pip
Über die Beziehung zwischen Git und GitHub
Beziehung zwischen Firestore- und Go-Datentypkonvertierung
Versuchen Sie, die Beziehung zwischen Operatoren und speziellen Methoden aufzurufen, indem Sie eine numerische Methode aufrufen
Untersuchung des Zusammenhangs zwischen Eisausgaben und Temperatur
Untersuchen Sie die Beziehung zwischen TensorFlow und Keras in der Übergangszeit
Zwischen parametrisch und nicht parametrisch
[Statistik] Lassen Sie uns die Beziehung zwischen der Normalverteilung und der Chi-Quadrat-Verteilung visualisieren.
Beziehung zwischen gebunden / ungebunden und Anfangswert von Django2 Form