Las reglas en un firewall de netfilter (iptables) se verifican secuencialmente y el destino del paquete (ACEPTAR, DROP, RECHAZAR, etc.) se determina en una primera coincidencia.
Al hacer que el cortafuegos tenga estado y que la primera regla sea la típica, -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
se acepta la gran mayoría del tráfico legítimo a su servidor después de pasar solo esa regla única. Ese tráfico no necesita atravesar ninguna otra regla.
Dependiendo del tamaño de su base de reglas, eso puede significar una diferencia significativa en el rendimiento de su firewall.
El único tráfico que el firewall ahora necesita validar son las conexiones explícitamente nuevas.
Es decir, comparo un firewall para un servidor web público con acceso para unos pocos webmasters desde sus estaciones de trabajo:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
Aproximadamente el 99% de los paquetes legítimos pertenecerán a conexiones establecidas, solo cumpliendo con la primera regla. De los paquetes que no coinciden con esa regla, la mayoría deben ser conexiones nuevas a su sitio web, el módulo multipuerto puede otorgar acceso a HTTP o HTTPS en una sola regla. Los webmasters inician sesión desde varias estaciones de trabajo con direcciones fijas usando ssh y sftp y todo lo demás es rechazado.
Un firewall donde las reglas se ordenan lógicamente por el puerto TCP:
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Aquí todos y cada uno de los paquetes a su servidor web HTTP tendrían que verificarse con 5 reglas antes de que se otorgue el acceso. Y con más servicios que se ejecutan en un servidor que puede convertirse fácilmente en 50 reglas o mucho más cuando, por ejemplo, usaría fail2ban o productos similares.
related/established
línea está presente pero las reglas posteriores no se afirmanNEW
?NEW
significa que el paquete ha comenzado una nueva conexión.Lo manejan los módulos del kernel llamados
ip_conntrack_*
que hacen que su Firewall tenga estado . Los firewalls con estado pueden ver flujos de tráfico.Si solo especifica el protocolo y el número de puerto, su Firewall no tiene estado, sino que no tiene estado. Significa que solo restringe o bloquea paquetes. Este tipo de firewall no conoce los flujos de datos.
Un buen ejemplo es FTP: el FTP activo usa el puerto 21 para el canal de control pero luego usa el puerto 20 para el canal de datos. En el caso de un Firewall con estado, no necesita abrir explícitamente el puerto 20 porque está relacionado con una nueva conexión establecida anterior en el puerto 21.
Aquí hay un extracto de la
iptables
página man:fuente
El conjunto de reglas anterior permitirá que los paquetes lleguen al puerto TCP 22 con un estado de
INVALID
hastaACCEPT
/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables
La afirmación de ESTADO
NEW
asegura que los paquetes NO VÁLIDOS no sean aceptados por error.Y para aclarar los significados:
fuente