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 |