No entiendo algunos conceptos básicos del módulo conntrack.
En primer lugar, estoy seguro de que está habilitado en mi sistema (Ubuntu 18.04), modinfo
muestra información sobre nf_conntrack y /proc/modules
el archivo indica que nf_conntrack está "activo".
En segundo lugar, tengo la siguiente configuración de prueba:
Máquina A (192.168.1.2) <-----> Máquina enrutadora (192.168.1.1 y 192.168.2.1) <----> Máquina B (192.168.2.2)
En Router Machine tengo la siguiente regla de iptables:
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP
BlackListPort es una tabla ipset.
Ahora establezco una conexión SSH desde la Máquina A (1.2) a la Máquina B (2.2). Después de confirmar que funciona, agrego el puerto 22 (SSH predeterminado) a la tabla BlackListPort.
La conexión SSH se congela/cuelga hasta que elimino el puerto 22 de esa tabla ipset.
Ahora la pregunta: Dado que conntrack está presente en mi sistema, ¿por qué el bloqueo SSH tiene éxito? La conexión SSH se estableció antes de que se agregara el puerto 22 a ipset, por lo que conntrack debería omitir todos los paquetes, permitiendo que SSH funcione.
Respuesta1
La conexión SSH se estableció antes de que se agregara el puerto 22 a ipset, por lo que conntrack debería omitir todos los paquetes, permitiendo que SSH funcione.
Esto no es correcto.
Todos los paquetes se procesarán a través de las reglas de filtrado, ya sea que pertenezcan a conexiones rastreadas o no.
Es una optimización muy común de las reglas de iptables poner algo como esto cerca del comienzo de la cadena de reglas relevante ( FORWARD
en su ejemplo):
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
En distribuciones más antiguas, es posible que veas esta versión:
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
(Entiendo que conntrack
ahora se prefiere la coincidencia a la state
coincidencia. Creo que algunas versiones del kernel incluso te molestan por eso).
Esto permitirá el paso de paquetes que pertenecen a conexiones existentes, si existe información de seguimiento de conexión para ellos. Pero el punto es,túpuede controlardonde exactamenteusted pone esa regla, o si la usa en absoluto. Por lo tanto, puede hacer que las reglas de su firewall se preocupen por los estados de conexión tanto (o tan poco) como desee.