Solución:
Solución 1:
Presentación introductoria de Netfilter y conntrack
Primero, el esquema obligatorio sobre el flujo de paquetes en Netfilter y las redes generales:
Netfilter es el marco de filtrado de paquetes que se inserta sobre el resto de la pila de la red (representado por la “decisión de enrutamiento” y otras partes de la caja blanca con bordes redondeados). Netfilter proporciona enlaces y API para otros subsistemas y “clientes”. Entre estas partes se encuentran conntrack (el rastreador de conexiones) y iptables (o nftables). La separación entre Netfilter y conntrack es bastante difuso. Puedes considerar conntrack como parte integrada de Netfilter.
En el esquema que describe los diversos pasos que atraviesa un paquete, puede ver que en algún punto (entre raw / PREROUTING y mangle / PREROUTING, o entre raw / OUTPUT y mangle / OUTPUT) el paquete atraviesa conntrack.
En este punto, conntrack buscará en sus propias tablas de búsqueda (una mini base de datos de búsqueda guardada en la memoria del kernel):
- si no se encuentran las características de este paquete (y si no se declara UNTRACKED en la tabla sin procesar), un nuevo conntrack bidireccional tupla entrada (protocolo, luego información específica de la familia y el protocolo: fuente y puerto inicial, destino y puerto inicial, fuente y puerto de respuesta, puerto y destino de respuesta) respuesta a la solicitud de eco coincidente para ICMP)) que describe el flujo se crea con el estado NEW.
- si coincide (en cualquier dirección) con una entrada anterior y es compatible con el estado de este flujo, el estado del flujo puede verse alterado (por ejemplo, cambiar de NUEVO a ESTABLECIDO si ese no era el caso antes).
- si por alguna razón específica el paquete no puede coincidir con un flujo existente a pesar de tener sus características (por ejemplo: un paquete TCP tardío recibido después de que una retransmisión ya se activó con éxito, por lo que está fuera de la ventana con respecto a la secuencia y los valores SACK) el el paquete se etiquetará como INVALIDO.
- Hay algunos otros casos como RELATED: se trata de paquetes que no forman parte del flujo en sí, sino que están relacionados con un nuevo flujo que puede asociarse con otro flujo existente (es decir, en la base de datos). Dos ejemplos son un error ICMP creado al recibir un paquete (por ejemplo: puerto UDP inaccesible) o cuando un asistente de protocolo especial como el módulo del kernel
nf_conntrack_ftp
, que es un complemento para conntrack subsistema, detecta que un paquete es parte del flujo de datos separado asociado con los comandos FTP PASV / EPSV o PORT / EPRT realizados en el flujo de comandos (en el puerto 21).
Abordar la pregunta
Dicho todo esto, aquí están las respuestas a sus dos balas:
-
en el espacio de nombres de la red principal conntrack comienza a rastrear conexiones tan pronto como se cargan sus módulos (incluidos los posibles submódulos relevantes específicos del protocolo). Para espacios de nombres de red no iniciales (contenedores …), esto también requiere que algún otro subsistema haga referencia a él (como los OP iptablesel módulo conntrack o usar una vez el comando
conntrack
descrito más adelante). Este es el valor predeterminado y un paquete debe marcarse específicamente como SIN SEGUIMIENTO antes de los conntrack El subsistema lo ve para que este paquete no sea rastreado. En Linux, solo hay unos pocos casos en los que no se necesitaría el seguimiento, pero luego, por supuesto, el cortafuegos con estado y la NAT con estado / dinámica ya no estarán disponibles (la NAT sin stent que incluso podría requerir el uso de UNTRACKED en primer lugar, todavía puede estar disponible). hecho, pero no con iptables. tc o nftables pueden). Para evitar conntrack manejar algunos paquetes, este tipo de iptables se puede utilizar la regla (por ejemplo: puerto 80 / tcp):iptables -t raw -A PREROUTING -p tcp --dport 80 -j CT --notrack iptables -t raw -A OUTPUT -p tcp --sport 80 -j CT --notrack
-
Cuando el paquete atraviesa el filtro / ENTRADA y alcanza esta regla:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
los iptablesmódulo de kernel específico
xt_conntrack
consulta el conntrack subsistema (manejado por los diversos módulos del kernel relevantesnf_conntrack*
) y pregunta sobre el estado de este paquete en su base de datos de búsqueda. Si la respuesta esRELATED
oESTABLISHED
el paquete coincide y procede al veredicto ACEPTAR. En realidad, el resultado ya está almacenado en caché en el paquete la primera vez que se realizó la búsqueda (generalmente por conntrack) por lo que esta es una “búsqueda” barata. Por lo tanto, esta es una regla genérica para manejar flujos ya aceptados anteriormente. Esos flujos pueden aceptarse inicialmente en reglas que mencionen explícitamente-m conntrack --ctstate NEW
o simplemente reglas sin mencionarlo pero colocado después esta regla genérica (pero tenga en cuenta el estado NO VÁLIDO, que normalmente debe eliminarse antes de hacerlo). -
agregar una viñeta: el manejo de paquetes entrantes y paquetes salientes es bastante simétrico entre PREROUTING y OUTPUT (incluso si no parecen simétricos): conntrack interfaces en PREROUTING así como en OUTPUT (y en algunos otros lugares, considerando NAT está trabajando con conntrack, a excepción de su primer paquete en estado NUEVO atravesando iptablestabla nat). Esto puede ser ligeramente diferente de la descripción que escribió sobre IPFW. Si un servidor que ejecuta aplicaciones también restringe los flujos salientes, lo más probable es que necesite este mismo iptables regla tanto en filtro / SALIDA como en filtro / ENTRADA, para permitir que pasen los paquetes de respuesta salientes del tráfico entrante ya aceptado.
Información adicional
Hay herramientas dedicadas para interactuar con el conntrack tablas de búsqueda del subsistema de conntrack-tools.
-
conntrack
: para consultar, eliminar o actualizar el contenido de las tablas de búsqueda manejadas por conntrack.Algunos ejemplos.
Puede enumerar todas las entradas rastreadas (que pueden ser grandes sin un filtro adicional) con:
conntrack -L
Si su sistema está haciendo NAT (por ejemplo, un enrutador frente a una LAN privada o ejecutando VM y contenedores), puede usar
--any-nat
,--src-nat
o--dst-nat
para mostrar solo resp. todo NAT, todo NAT de origen (enmascaramiento) o todo NAT de destino (normalmente para puertos reenviados):Monitoreo en tiempo real de conntrack eventos:
conntrack -E
-
conntrackd
: un demonio cuyos dos propósitos principales son (conntrack) contabilidad y estadísticas de flujo, o sincronización de estado de clúster de firewall con estado de alta disponibilidad.
Solución 2:
El seguimiento de la conexión es una función independiente de Netfilter y no está configurada con IPTables.
En la imagen hay dos conntrack
pasos en la ruta de ENTRADA y uno en la ruta de SALIDA. Estos pasos asocian paquetes individuales con conexiones existentes rastreadas en la tabla de rastreo de conexiones, o crean nuevas entradas de rastreo de conexiones en la tabla.
La funcionalidad de Conntrack es un módulo del kernel de Linux y, a menudo, se incluye en el kernel en la configuración predeterminada.
El funcionamiento de Conntrack se puede ajustar ajustando net.netfilter.nf_conntrack
valores sysctl.
Tu segunda alternativa es lo que sucede. La función Conntrack registra la información de estado, y la regla IPTables simplemente consulta la tabla Conntrack para obtener información.