Qual è la differenza tra iptables "state" e "ctstate"?


9

Ho visto questo frammento di iptables in una diversa risposta di Super User:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Il punto è consentire sempre i pacchetti inviati come parte di una connessione stabilita. La parte di cui mi chiedo sono le prime due righe.

Per la INPUTcatena, qual è lo scopo di scrivere sia -m conntrack --ctstate RELATED,ESTABLISHEDe -m state --state RELATED,ESTABLISHED. Sembra che entrambi dovrebbero fare la stessa cosa?

Una spiegazione della differenza tra questi due sarebbe grande.

Risposte:


5

Risposta principale:

Conntracksostituisce state, ma nei kernel moderni non esiste alcuna differenza tra i due. Stateè alias e tradotto conntrackin iptables se il kernel lo possiede, quindi la sintassi -m state --state viene effettivamente tradotta -m conntrack --ctstatee gestita dallo stesso modulo.

Su alcuni vecchi kernel, tuttavia, il contrasto deve essere abilitato in modo specifico.

Possibile spiegazione:

Mi sembra che le regole che hai citato includano duplicati, che si rivolgono a kernel vecchi e nuovi.

O forse questo è solo un caso di programmazione cult Cargo .


1

C'è questa domanda su ServerFault dell'anno 2012:

Qual è la differenza pratica tra:

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

e

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

Qual è il migliore da usare?

La risposta accettata è:

Entrambi usano gli stessi kernel interni (sottosistema di tracciamento delle connessioni).

Intestazione di xt_conntrack.c:

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

Quindi direi: il modulo di stato è più semplice (e forse meno soggetto a errori). È anche più lungo nel kernel. Conntrack dall'altra parte ha più opzioni e funzionalità [1].

La mia chiamata è di utilizzare conntrackse hai bisogno delle sue funzionalità, altrimenti attenersi al modulo di stato.

Domanda simile sul maillist di netfilter.

[1] Abbastanza utile come -m conntrack --ctstate DNAT -j MASQUERADE" routing/DNAT fixup;-)

Una delle altre risposte porta a questo documentoiptables . Dice:

La conntrackpartita è una versione estesa della statepartita, che consente di abbinare i pacchetti in un modo molto più granulare. Ti consente di guardare le informazioni direttamente disponibili nel sistema di tracciamento della connessione, senza alcun sistema "frontend", come nella statepartita.

Quindi penso che sia vero (da un'altra ennesima risposta):

Non vi è alcuna differenza nell'esito di queste due regole.

Nota c'è anche un commento interessante sotto la domanda:

stateè deprecato a favore conntracke può essere compilato o meno in base alla modalità di compilazione del kernel.


Nota: per ora questa risposta è solo un mucchio di citazioni da una vecchia domanda (ish). Chiunque si senta libero di aggiornarlo, soprattutto se qualcosa di rilevante è cambiato dal 2012/2013.
Kamil Maciorowski il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.