web-dev-qa-db-fra.com

Quelle est la différence entre -m conntrack --ctstate et -m state --state

Je lis this howto, et il y a quelque chose comme ça:

Nous pouvons permettre aux sessions établies de recevoir du trafic:

$ Sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

La règle ci-dessus ne comporte aucun espace de part et d'autre de la virgule dans ESTABLISHED, RELATED

Si la ligne ci-dessus ne fonctionne pas, vous pouvez être sur un VPS castré dont le fournisseur n'a pas rendu l'extension disponible, auquel cas une version inférieure peut être utilisée en dernier recours:

$ Sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Y a-t-il une différence significative dans le travail entre -m conntrack --ctstate et -m state --state? Ils disent que l'on peut ne pas fonctionner, mais ils ne disent pas pourquoi. Pourquoi devrais-je préférer l'un à l'autre?

91
Mikhail Morfikov

Je ne prétends pas être un expert avec les règles iptables mais la première commande utilise l'extension de suivi de connexion (conntrack) tandis que la seconde utilise les state extension.

Point de données n ° 1

Selon ce document l'extension conntrack a remplacé state.

 Obsolete extensions:
  • -m state: replaced by -m conntrack

Point de données n ° 2

Malgré cela, j'ai trouvé cette Q&R SF intitulée: Questions du pare-feu sur l'état et la politique? où l'OP prétendait avoir posé cette question sur IRC dans # iptables @ freenode. Après en discutant là, il est arrivé à la conclusion que:

Techniquement, le match conntrack remplace - et donc obsolète - le match d'état. Mais pratiquement le match étatique n'est en aucune façon obsolète.

Point de données # 3

Enfin, j'ai trouvé ce Q&A SF intitulé: Iptables, quelle est la différence entre -m state et -m conntrack? . La réponse à cette question est probablement la meilleure preuve et le meilleur conseil sur la façon d'afficher l'utilisation de conntrack et state.

extrait

Les deux utilisent les mêmes internes du noyau en dessous (sous-système de suivi des connexions).

En-tête de xt_conntrack.c:

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)

Je dirais donc - le module d'état est plus simple (et peut-être moins sujet aux erreurs). Il est également plus long dans le noyau. Conntrack de l'autre côté a plus d'options et de fonctionnalités [1].

Mon appel est d'utiliser conntrack si vous avez besoin de ses fonctionnalités, sinon restez avec le module d'état.

[1] Très utile comme "-m conntrack --ctstate DNAT -j MASQUERADE" routage/correction DNAT ;-)

Point de données # 4

J'ai trouvé ce fil dans les discussions [email protected] netfilte/iptables, intitulé: la correspondance d'état est obsolète 1.4.17 , ce qui indique à peu près que state n'est qu'un alias à conntrack donc peu importe ce que vous utilisez, dans les deux cas, vous utilisez conntrack.

extrait

En fait, je dois être d'accord. Pourquoi ne gardons-nous pas "état" comme alias et n'acceptons pas l'ancienne syntaxe dans "conntrack"?

state est actuellement aliasé et traduit en conntrack dans iptables si le noyau en dispose. Aucun script n'est cassé.

Si l'aliasing est effectué dans l'espace utilisateur, la partie noyau peut être supprimée - un jour peut-être.

L'aliasing est déjà effectué dans l'espace utilisateur. On tape dans "état" et il est converti en "conntrack" et qui est ensuite envoyé au noyau. (Donc, pour autant que je vois si les alias de module ipt_state, etc. ont été ajoutés au module conntrack, même le module du noyau d'état pourrait être supprimé.)

Références

103
slm

Je ne suis pas un expert de netfilter, mais j'ai regardé la page de manuel iptables-extension et surprise, la voici

The "state" extension is a subset of the "conntrack" module.

Donc, l'état fait partie de conntrack et n'est qu'une version plus simple de celui-ci si vous en avez vraiment besoin - état et non des fonctionnalités les plus sophistiquées de conntrack

5
白川 マセル