A menudo he visto la regla -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
aplicada. Si bien no soy un experto, esa línea en particular me preocupa. Es bastante obvio que la regla permite todo el tráfico con la única excepción de que la conexión debe haberse establecido o relacionado con una conexión establecida.
Guión
- Permitiré conexiones al puerto SSH predeterminado
22
desde la LAN del servidor en la subred192.168.0.0/16
o lo que sea. SuperInsecureApp®
expone algo en el puerto1337
, que agrego a miINPUT
cadena.- He agregado la
conntrack
regla para aceptarESTABLISHED
yRELATED
de todas las fuentes - La política de la cadena es
DROP
Básicamente, esa configuración debe permitir conexiones SSH solo desde la LAN, al tiempo que permite el tráfico entrante en el puerto 1337 del mundo.
Aquí es donde florece mi confusión. ¿Expondría conntrack
de alguna manera una falla de seguridad que le permitiría a uno obtener una conexión establecida en 1337 (ya que está abierto en todo el mundo), y luego utilizar esa conexión para obtener acceso al puerto SSH (o cualquier otro puerto para el caso)?
conntrack
regla está al principio o al final de la cadena? Por lo que entiendoiptables
, ¿tendría que procesar todas las reglas en las conexiones establecidas si fuera al final, y solo esa regla si se colocara al principio?ESTABLECIDO y RELACIONADO son características del filtrado de paquetes "con estado", donde el filtrado no solo depende de un conjunto de reglas estáticas sino también del contexto, dentro del cual se consideran los paquetes. Necesita ESTABLECIDO para permitir que las conexiones funcionen, y necesita RELACIONADO para los mensajes ICMP relevantes. El filtrado con estado permite filtrar con mayor precisión en comparación con las reglas estáticas "sin estado".
Veamos ESTABLECIDO primero. Por ejemplo, considere TCP en el puerto 22. El iniciador (cliente) envía un
SYN
aserverIPaddr:22
. El servidor vuelveSYN+ACK
al cliente. Ahora es el turno del cliente para enviar unACK
. ¿Cómo debería ser la regla de filtrado en el servidor, de modo que soloACK
se acepte la "coincidencia" ? Una regla general sin estado pareceríaque es más liberal que la regla estatal correspondiente. La regla sin estado permite segmentos TCP arbitrarios, por ejemplo,
ACK
oFIN
sin haber establecido una conexión primero. Los escáneres de puertos pueden explotar este tipo de comportamiento para las huellas digitales del sistema operativo.Ahora echemos un vistazo a RELACIONADO. Esto se usa para mensajes ICMP, principalmente mensajes de error. Por ejemplo, si se descarta un paquete del servidor al cliente, se envía un mensaje de error al servidor. Este mensaje de error está "relacionado" con la conexión establecida previamente. Sin la regla RELACIONADA, uno debería permitir los mensajes de error entrantes en general (sin contexto) o, como es costumbre en muchos sitios, abandonar ICMP por completo y esperar tiempos de espera en la capa de transporte. (Tenga en cuenta que esta es una mala idea para IPv6; ICMPv6 juega un papel más importante para IPv6 que ICMP para el legado de IP).
fuente