J'ai fait des recherches sur netfilter. J'ai trouvé qu'il y avait diverses différences de perception, je vais donc l'enregistrer.
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 **
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?
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.
Référence: https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
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.)
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».
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
J'ai expliqué ci-dessus ce qui constitue netfilter, mais comment utilisez-vous netfilter? Il s'agit donc du logiciel qui les exploite.
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.
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
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! ** **
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
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é)
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 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