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.