Relation entre netfilter, firewalld, iptables et nftables

introduction

J'ai fait des recherches sur netfilter. J'ai trouvé qu'il y avait diverses différences de perception, je vais donc l'enregistrer.

Différence de perception

Avec CentOS8 (mais sans s'y limiter), nous avons trouvé ce qui suit. ** iptables sont des nftables, pas des iptables ** ** Les règles définies avec firewall-cmd ne sont pas affichées dans iptables ** ** Utilisez nft pour toutes les vérifications de règles **

À propos du flux de paquets sous Linux

netfilter netfilter est une règle de base pour le traitement des paquets sous Linux C'est le type de traitement que les paquets reçus sur l'interface seront traités.

Selon netfilter.org

netfilter est un ensemble de hooks dans le noyau Linux qui permet aux modules du noyau d'enregistrer des fonctions de rappel dans la pile réseau. La fonction de rappel enregistrée est rappelée pour chaque paquet qui passe par chaque hook dans la pile réseau.

C'est vrai. Merci traduction google!

En d'autres termes, lorsqu'un paquet passe à travers la pile réseau, certains traitements peuvent être insérés par un "hook" défini par netfilter. Cela signifie t-il?

chaîne netfilter

Une série de processus qui passent par la pile réseau est appelée une chaîne. La chaîne se compose des éléments suivants:

Nom sens
hook Dans quelle partie (de la pile réseau)
priority Dans quel ordre
type Que faire

La figure de base est ci-dessous.

Screenshot from Gyazo

Référence: https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

crochet de chaîne netfilter

Un hook est une représentation de «quelle partie (de la pile réseau)» où le traitement est effectué. En d'autres termes, il exprime le moment de la capture.

Vous pouvez voir que le traitement a changé dans la partie décision de routage près du centre de la figure ci-dessus. Le hook utilisé dépend du fait que le paquet entrant soit "adressé localement" ou "non adressé localement (= retransmis)".

Ci-dessous se trouve le focus sur la partie crochet.

                                             Local
                                            process
                                              ^  |      .-----------.
                   .-----------.              |  |      |  Routing  |
                   |           |-----> input /    \---> |  Decision |----> output \
--> prerouting --->|  Routing  |                        .-----------.              \
                   | Decision  |                                                     --> postrouting
                   |           |                                                    /
                   |           |---------------> forward --------------------------- 
                   .-----------.

Référence: https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks

En d'autres termes, selon la destination, les hooks utilisés sont les deux types suivants.

Pour les locaux prerouting -> input -> output -> postrouting

Lors du transfert prerouting -> forward -> postrouting

(En plus de cela, il semble y avoir un crochet pour un paquet vers L2 appelé entrée.)

priorité de la chaîne netfilter

La priorité exprime «dans quel ordre» le traitement est effectué. En d'autres termes, il exprime l'ordre de traitement dans chaque hook.

La priorité est représentée par un nombre positif ou négatif, mais un alias est défini. dstnat et scrnat ne sont disponibles que pour les hooks de pré-routage et de post-routage, respectivement.

Cependant, la substance est une valeur numérique jusqu'à ce qu'elle se fatigue.

Connu comme Définition priority Crochets disponibles
- NF_IP_PRI_RAW_BEFORE_DEFRAG -450 tout
- NF_IP_PRI_CONNTRACK_DEFRAG -400 tout
raw NF_IP_PRI_RAW -300 tout
- NF_IP_PRI_SELINUX_FIRST -225 tout
- NF_IP_PRI_CONNTRACK -200 tout
mangle NF_IP_PRI_MANGLE -150 tout
dstnat NF_IP_PRI_NAT_DST -100 prerouting
filter NF_IP_PRI_FILTER 0 tout
security NF_IP_PRI_SECURITY 50 tout
srcnat NF_IP_PRI_NAT_SRC 100 postrouting
- NF_IP_PRI_SELINUX_LAST 225 tout
- NF_IP_PRI_CONNTRACK_HELPER 300 tout

Référence: http://git.netfilter.org/nftables/tree/include/linux/netfilter_ipv4.h Référence: https://manpages.debian.org/testing/nftables/nft.8.en.html

C'est similaire à la soi-disant «table».

type de chaîne netfilter

Le type exprime le type de traitement à effectuer. En d'autres termes, il exprime spécifiquement ce qu'il faut faire avec le paquet.

type Crochets disponibles
filter tout
nat prerouting,postrouting,input,output
route output

cette? Celui-ci est également similaire à la "table". C'est pourquoi c'est déroutant!

Référence: https://www.netfilter.org/projects/nftables/manpage.html

firewalld, iptables et nftables

J'ai expliqué ci-dessus ce qui constitue netfilter, mais comment utilisez-vous netfilter? Il s'agit donc du logiciel qui les exploite.

Qu'est-ce que firewalld?

firewalld est en haut et iptables ou nftables sont en cours d'exécution sur le backend. Les iptables ou nftables exécutés sur le backend font fonctionner le netfilter.

Les anciennes versions de firewalld ont iptables sur le backend La nouvelle version de firewalld utilise nftables comme backend.

Screenshot from Gyazo

Très facile à comprendre. Je me demande si celui-ci est le titre de cet article.

Référence: https://firewalld.org/documentation/concepts.html

Que sont les iptables?

iptables est un outil qui peut faire fonctionner netfilter. Dans l'ancien CentOS avant l'introduction de firewalld, iptables a été transformé en un démon (service?) Avec iptables-service. En d'autres termes, je faisais du filtrage ou du NAT en modifiant directement les règles d'iptables avec la commande iptables ou en chargeant un fichier spécifique.

CentOS8 a également iptables, mais l'entité fonctionne sur nftables.

# iptables --version
iptables v1.8.2 (nf_tables)

Cependant, iptables n'est plus iptables.

# ll /usr/sbin/iptables
lrwxrwxrwx.1 racine racine 17 novembre 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).

Lorsque vous appuyez sur iptables, vous pouvez voir les règles dans un format comme celui-là. Cependant, à partir d'iptables, je ne peux pas voir le tableau ajouté par nftables décrit plus tard. Par conséquent, les règles affichées par iptables -L -nv -t nat | filter peuvent ne pas correspondre au comportement réel.

Par exemple, lorsque vous utilisez firewall-cmd --add-masquerade pour transférer un port d'un hôte Docker vers un conteneur connecté au pont. Si vous vérifiez la chaîne avec nft, vous pouvez voir l'opération suivante.

# nft list chain ip firewalld nat_POST_public_allow
table ip firewalld {
        chain nat_POST_public_allow {
                oifname != "lo" masquerade
        }
}

Mais je ne peux pas voir le tableau appelé firewalld de iptables.

# iptables -L -t firewalld
iptables v1.8.2 (nf_tables): table 'firewalld' does not exist
Perhaps iptables or your kernel needs to be upgraded.

Si vous regardez la partie TABLES avec man iptables, vous ne pouvez vérifier la table qu'avec les mots-clés spécifiés dans iptables.

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:

En d'autres termes, si nftables s'exécute à l'arrière de firewalld, les règles affichées dans ** iptables sont incorrectes! ** ** Donc, pour la confirmation des règles, utilisez nft au lieu de ** iptables! ** **

Que sont les nftables?

nftables est également un outil alternatif à iptabes qui vous permet de manipuler netfilter. Il semble que nftables puisse être transformé en service de la même manière que iptables mentionné ci-dessus, mais ...

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

Dans CentOS8, firewalld est en cours d'exécution et nftables s'exécute dans les coulisses, il semble donc que le démon en tant que nftables se repose.

Le contenu vide la règle et lit le fichier de paramètres avec la commande nft comme indiqué ci-dessous. C'est similaire à faire d'iptables un démon.

# 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

Dans debian / arch / ubuntu / fedora, le comportement du démon nftables semble être le comportement par défaut.

Référence: https://wiki.nftables.org/wiki-nftables/index.php/Nftables_from_distributions

Utilisation de base de nftables

nft

nftables sont fournis par la commande «nft». Les règles définies dans nft sont exprimées sous la forme d'une chaîne, qui est le processus lui-même, et d'une table qui combine les chaînes.

Une chaîne est une collection de processus exprimés par un type spécifique avec un hook spécifique, et il n'y a qu'un seul "quelle partie (de la pile réseau)", "dans quel ordre" et "quel type de traitement". Il est mis en place dans la chaîne de. Une table peut être considérée comme un groupe virtuel de plusieurs chaînes.

Utilisez la commande nft list pour vérifier les paramètres.

nft list table(s)

Seuls les noms de toutes les tables qui ont été définies sont affichés.

# nft list tables
table ip filter
table ip6 filter
(Ou beaucoup)

Affiche toutes les chaînes configurées de la table spécifiée.

# 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
        }
(Toutes les chaînes incluses dans la table ip nat sont affichées)

nft list chain(s) Pour toutes les chaînes d'ensemble, il est affiché dans quelle table chaque chaîne est incluse, et dans quel ordre le traitement est effectué dans «quelle partie (de la pile de réseau)» qui est la condition d'activation. Sera fait. (Les détails de traitement spécifiques ne sont pas affichés)

# 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;
        }
(Beaucoup est affiché)

Afficher la chaîne spécifiée

# 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
(Beaucoup est affiché)

Voir toutes les règles

Toutes les règles définies s'affichent.

# 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

(Beaucoup d'entre eux sont affichés)

à la fin

La gestion des paquets, y compris netfilter, est profonde. Vous pouvez toujours avoir une mauvaise compréhension, et même si vous le définissez sur texto, cela peut fonctionner. Je souhaite intégrer autant que possible les connaissances correctes.

Recommended Posts

Relation entre netfilter, firewalld, iptables et nftables
La relation subtile entre Gentoo et pip
À propos de la relation entre Git et GitHub
Relation entre la conversion des types de données Firestore et Go
Relation entre les opérateurs et les méthodes spéciales, essayez d'appeler une méthode numérique
Étudier la relation entre les dépenses de crème glacée et la température
Examiner la relation entre TensorFlow et Keras pendant la période de transition
Entre paramétrique et non paramétrique
[Statistiques] Visualisons la relation entre la distribution normale et la distribution du chi carré.
Relation entre Bound / Unbound et la valeur initiale du formulaire Django2