Seguimiento de conexiones

Qué es el seguimiento de conexiones

Ya hemos visto que mediante el módulo state (-m state) podemos tomar decisiones a partir del estado del paquete. A continuación podemos ver qué partido podemos sacar de esta posiblidad. Alguna muestra ya se ha incluido en los ejemplos anteriores.

El seguimiento de la conexión se refiere a la posiblidad demantener información sobre el estado de la conexión en memoria. Se guarda información del tipo direcciones ip origen o destino junto a su puertos correspondientes, protocolos, estado de la conexión, etc. Esta posibilidad agrega una interesantes posibilidaades a al configuración de un cortafuegos.

El seguimiento de conexiones se realiza en las cadenas PREROUTING u OUTPUT.

El número máximo de conexiones se guarda en /proc/sys/net/ipv4/ip_conntrack_max y su valor predefinido dependerá del tamaño de la memoria.

Es necesario tener instalado el módulo ip_conntrack.

Realizar seguimiento

El esquema de seguimiento se realiza en el siguiente orden: Primero si el paquete forma parte de alguna conexión existente (ESTABLISHED). Si es tráfico icmp, puede estar relacionado (RELATED) a otra conexión udp/tcp existente. El paquete puede estar inicianod una nueva (NEW) conexión o puede no tener relación con ninguna conexión en cuyo caso se considera inválido (INVALID).

UDP

Udp es un protocolo no orientado a conexión, no obstante se puede realizar un seguimiento. Por ejemplo, si tenemos qu cortafuegos con una política predeternidada de denegar podemos abrir las conexiones clientes udp con:

 

iptables -A INPUT     -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT

TCP

Tcp es una comunicación orientada a conexión que se inicia con el intercambio de paquetes SYN y ACK (que figuran en las cabeceras de los paquetes). Por ejemplo, si tenemos qu cortafuegos con una política predeternidada de denegar podemos abrir las conexiones clientes tdp con:

 

iptables -A INPUT     -p tcp -m state --state ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT

icmp

En el mismo caso anterior tendremos, para icmp:

 

iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT     -p icmp -m state --state ESTABLISHED,RELATED  -j ACCEPT

Conexión ftp

Para activar un conexión FTP podríamos poner:

 

iptables -A INPUT     -p icmp -m state --state ESTABLISHED,RELATED  -j ACCEPT
iptables -A INPUT     -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

En el caso de ftp activo el cliente envía un número de puerto alto al servidor FTP y el servidor devuelvel a conexión desde el puerto 20 a este puerto para comenzar a enviar datos. Obsevamos que esta segunda conexión va en sentido contrario, el servidor inicia una conexión con el cliente. Para permitir una conexión ftp activa pondremos:

 

iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 

En el caso de ftp pasivo el cliente también envía un número de puerto al servidor, pero ahora es el cliente el que inicia la conexión con el servidor:

 

iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024:  -m state --state ESTABLISHED,RELATED -j ACCEPT