¿Cuál es la diferencia entre -m conntrack --ctstate y -m state --state

85

Estoy leyendo este tutorial y hay algo como esto:

Podemos permitir que las sesiones establecidas reciban tráfico:

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

La regla anterior no tiene espacios a ambos lados de la coma en ESTABLECIDO, RELACIONADO

Si la línea anterior no funciona, puede estar en un VPS castrado cuyo proveedor no haya puesto a disposición la extensión, en cuyo caso se puede usar una versión inferior como último recurso:

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

¿Hay una diferencia significativa en el trabajo entre -m conntrack --ctstatey -m state --state? Dicen que uno puede no funcionar, pero no dicen por qué. ¿Por qué debería preferir uno sobre el otro?

Mikhail Morfikov
fuente
1
Posible duplicación
John1024
Lo veo, ¿debería eliminar esta pregunta?
Mikhail Morfikov
1
@ John1024: los duplicados solo se encuentran dentro de un único sitio SE. ¡Está perfectamente bien publicar preguntas similares en múltiples sitios SE siempre y cuando las Q estén dentro de las reglas que rigen un sitio SE particular!
slm
1
@MikhailMorfikov: su pregunta, aunque similar a otras Q en otros sitios SE, ¡está perfectamente bien aquí!
slm
1
@Totor: si ves mi "punto de datos # 4" en mi respuesta, en staterealidad es un alias conntrack. Entonces no importa. Supongo que en algún momento en el futuro pueden eliminarse por statecompleto, pero por el momento no importa si lo usas.
slm

Respuestas:

99

No pretendo ser un experto en iptablesreglas, pero el primer comando está haciendo uso de la extensión de seguimiento de conexión ( conntrack) mientras que el segundo está haciendo uso de la stateextensión.

Punto de datos # 1

De acuerdo con este documento, la conntrackextensión fue reemplazada state.

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

Punto de datos # 2

Aun así, encontré este SF Q&A titulado: ¿ Preguntas sobre el firewall sobre el estado y la política? donde el OP afirmó haber hecho esta pregunta en IRC en # iptables @ freenode. Después de discutirlo allí, llegó a la conclusión de que:

Técnicamente, la coincidencia conntrack reemplaza, y por lo tanto es obsoleta, la coincidencia estatal. Pero prácticamente la coincidencia estatal no está obsoleta de ninguna manera.

Punto de datos # 3

Finalmente encontré este SF Q&A titulado: Iptables, ¿cuál es la diferencia entre -m state y -m conntrack? . La respuesta de esta pregunta es probablemente la mejor evidencia y consejos sobre cómo ver el uso de conntracky state.

extracto

Ambos usan el mismo núcleo interno debajo (subsistema de seguimiento de conexión).

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 núcleo. Conntrack en el 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.

[1] Bastante útil como "-m conntrack --ctstate DNAT -j MASQUERADE" enrutamiento / arreglo DNAT ;-)

Punto de datos # 4

Encontré este hilo en las discusiones [email protected] netfilte / iptables, titulado: state match is obsolescete 1.4.17 , que dice que statees solo un alias, conntrackpor lo que realmente no importa cuál uses, en ambas circunstancias que estás usando conntrack.

extracto

En realidad, tengo que estar de acuerdo. ¿Por qué no mantenemos el "estado" como un alias y aceptamos la sintaxis anterior en "conntrack"?

El estado actualmente tiene un alias y se traduce a conntrack en iptables si el núcleo lo tiene. No hay guiones rotos.

Si el alias se realiza en el espacio de usuario, la parte del núcleo se puede eliminar, algún día tal vez.

El alias ya está hecho en el espacio de usuario. Uno escribe "estado" y se convierte en "conntrack" y luego se envía al kernel. (Por lo tanto, hasta donde veo si se agregaron los alias del módulo ipt_state, etc. al módulo conntrack, incluso el módulo del kernel de estado podría eliminarse).

Referencias

slm
fuente
3

No soy un experto en filtros de red, pero busqué en la página de manual de extensión de iptables y sorpresa, ahí está

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

Por lo tanto, el estado es parte de conntrack y solo una versión más simple si realmente lo necesita: estado y no una de las características más sofisticadas de conntrack

白 川 マ セ ル
fuente