La respuesta corta
Por lo general, solo necesitará el seguimiento de la conexión para las conexiones salientes. Si algún dispositivo local realiza una conexión a Internet, el cortafuegos registra que esta IP y este puerto específicos intentaron establecer una conexión con la otra IP y otro puerto.
Por lo tanto, cuando llega la respuesta de Internet, el firewall debe dejarlo pasar, porque ha visto un paquete saliente anteriormente.
Si no hubiera un seguimiento de la conexión, tendría que establecer reglas explícitas sobre desde dónde o hacia dónde puede viajar un paquete (por ejemplo, permitir todos los paquetes desde el puerto 80 de google.com). Es fácil ver que esto haría que las reglas de firewall sean bastante complicadas.
La respuesta larga
Solo hay diferencias sutiles entre las dos soluciones si se usan para conexiones entrantes. Una diferencia es en qué sistema se produce la carga de CPU de la comprobación de paquetes. Si tiene una computadora / enrutador / firewall dedicado (llamado firewall desde aquí) haciendo esto, con el seguimiento de la conexión habilitado, este dispositivo verificará al menos la plausibilidad de un paquete. Esto liberará al servidor de aplicaciones (el servidor que recibe los paquetes) de hacerlo.
La plausibilidad se refiere a que el paquete proviene del host esperado y del puerto esperado en el caso de UDP, y adicionalmente en el número de secuencia en el caso de TCP.
Por lo general, la validación solo puede ocurrir dentro de la capa de la aplicación, ya que la validez solo se puede asegurar en función del protocolo en la propia aplicación.
Hay tres consecuencias de estas suposiciones:
- La CPU y la carga de la red se mueven hacia el "borde" de la red en el caso del seguimiento de estado. Eso significa que (por lo general) el primer dispositivo en su red realizará alguna inspección básica del paquete, antes de reenviarlo a la red local, manteniendo así su red interna limpia y la carga en el firewall.
- El servidor de aplicaciones solo tendrá que preocuparse de si el paquete es válido, es decir, si los datos dentro del paquete cumplen con el protocolo esperado.
- Esto podría abrir la posibilidad de superar una conexión UDP, dependiendo del protocolo. Si la aplicación no tiene (o no es confiable) la forma de autenticar al remitente de un paquete, aceptaría la carga útil correcta de cualquier dirección IP. Por ejemplo, en una transmisión de datos, sería posible enviar basura al receptor, si el paquete UDP pasa la validación.
Sin embargo, la práctica común (a menos que se trate de entornos de alta seguridad) es utilizar el seguimiento de la conexión (general) solo para las conexiones salientes, para no tener que permitir explícitamente que cada servidor de Internet responda a una solicitud de la red local. Para el caso de las conexiones entrantes, por lo general solo se permite que se pueda acceder al puerto (definido) (-A ENTRADA -p tcp --dport 80 -j ACEPTAR). Esto se aplicaría a las nuevas conexiones, pero también se aplicaría a las conexiones existentes, evitando la sobrecarga, para realizar un seguimiento de la conexión. De manera similar, solo reenviaría los paquetes a un puerto de destino específico a un servidor de aplicaciones dentro de su red local.
seguimiento de conexión específico de la aplicación
Hay un caso que aún no mencioné y es el seguimiento de conexión específico de la aplicación. Para algunos protocolos (ftp, irc, tftp, amanda, sip y posiblemente otros, consulte enlace por ejemplo) puede haber módulos iptables especiales para permitir el seguimiento avanzado de la conexión. Por ejemplo, en FTP, abriría una conexión del cliente al servidor en el puerto 21, llamada conexión de control, que debería abrirse en el firewall por medios normales. Dentro de este canal, el cliente y el servidor definen una segunda conexión a la que se enviarán los datos sin procesar del archivo. Por lo general, esta conexión se establece desde el servidor al cliente (en el modo ACTIVO). Este puerto local y remoto es aparentemente aleatorio, por lo que no se pueden definir en un archivo de configuración de firewall estático. Si hubiera un servidor de seguridad con iptables en la red del cliente, denegaría esta conexión, porque no existe una asociación anterior. Con el seguimiento de la conexión específica de la aplicación, el módulo buscaría "dentro" del contenido del paquete para ver si se realizó dicho acuerdo y si el firewall permitiría una nueva conexión entrante en el puerto acordado, incluso si no había una conexión antes.