Respuesta principal:
Conntrack
reemplaza state
,pero en los núcleos modernos ahora no hay diferencia entre los dos.State
actualmente tiene un alias y está traducido a conntrack
en iptables si el kernel lo tiene, entonces la sintaxis -m state --state
en realidad se traduce a -m conntrack --ctstate
y manejado por el mismo módulo.
Sin embargo, en algunos núcleos antiguos, la contradicción debe habilitarse específicamente.
Posible explicación:
Me parece como si las reglas que citaste incluyeran duplicados, que atienden tanto a los núcleos más antiguos como a los más nuevos.
O tal vez esto es solo un caso de programación de culto Cargo.
Hay esta pregunta sobre ServerFault del año 2012:
¿Cuál es la diferencia práctica entre:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
y
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
¿Cuál es mejor usar?
La respuesta aceptada es:
Ambos usan las mismas funciones internas del kernel debajo (subsistema de seguimiento de conexiones).
Encabezado de xt_conntrack.c
:
xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)
Entonces diría que el módulo de estado es más simple (y tal vez menos propenso a errores). También es más largo en el kernel. Conntrack, por otro lado, tiene más opciones y características[1].
Mi llamado es usar conntrack
si necesita sus características, de lo contrario, quédese con el módulo de estado.
Pregunta similar en netfiltermaillist.
[1] Bastante útil como -m conntrack --ctstate DNAT -j MASQUERADE"
routing/DNAT fixup
;-)
Una de las otras respuestas conduce a este documento sobre iptables
. Dice:
El conntrack
match es una versión extendida del state
match, lo que hace posible hacer coincidir los paquetes de una manera mucho más granular. Le permite ver la información directamente disponible en el sistema de seguimiento de conexiones, sin ningún sistema "frontend", como en el state
partido.
Así que creo que esto es cierto (de otra respuesta allí):
No hay diferencia en el resultado de esas dos reglas.
Tenga en cuenta que también hay un comentario interesante debajo de la pregunta:
state
está en desuso a favor de conntrack
, y puede o no estar compilado dependiendo de cómo se haya construido su kernel.