teoría-tcp-ip (1): (0.04) Nociones de TCP/IP necesarias para el filtrado de paquetes (ip, tcp, udp) 9/9/2000 0.03 22/6/2001 0.04 RST y control de conexión iptables Resumen de contenido: -------------------- Introducción a los tipos de paquetes: IP TCP UDP ICMP fragmentos Nociones importantes: TCP SYN: Noción de conexión y conexiones iniciadas por nosotros RST: Devuelto a los intentos de conexión a nuestros puertos sin servicios UDP Ausencia de noción de conexión Port unreachable: Devuelto a los intentos de conexión si no hay servicio Introducción a los tipos de paquetes: ------------------------------------- IP Los paquetes IP son el vehículo que transporta los otros protocolos "encima". Los más comunes son TCP, UDP e ICMP pero hay otros, tienes una lista en el archivo /etc/protocols de tu sistema. Cada sistema se identifica con un número IP diferente, que puede ser fijo o dinámico (asignado por el proveedor al conectarnos). TCP El TCP es un protocolo de comunicación entre dos máquinas con: - Negociación de conexión - Acuse de recibo de cada paquete - Control de no duplicidad de paquetes - Inmune a la llegada desordenada de paquetes - Inmune a la perdida de paquetes (se solicitan otra vez) UDP UDP es un protocolo simple para transferir datos sin toda la sobrecarga del TCP y sin ninguna de sus virtudes. En las conexiones UDP no hay negociación, ni acuse de recibo, ni control de perdida o desorden o duplicación de paquetes, todo esto debe ser gestionado por el servicio que emplea la conexión. ICMP Se emplean para los mensajes de control de los otros protocolos fragmentos Cuando el medio de transmisión no admite el tamaño de paquete TCP que estamos utilizando los paquetes son "fragmentados", es decir, que se cortan en trozos IP más pequeños, de los que solo el primer fragmento tiene toda la información (cabecera TCP). Nociones importantes: --------------------- TCP SYN: Noción de conexión y conexiones iniciadas por nosotros La máquina que quiere establecer una conexión inicia la negociación de conexión enviando un paquete que llamaremos "SYN" que debe ser contestado. Por lo tanto podemos impedir las conexiones TCP a nuestro sistema prohibiendo la entrada de paquetes SYN, sin afectar a las conexiones iniciadas por nuestro sistema. RST: Devuelto a los intentos de conexión a nuestros puertos sin servicios Según la especificación TCP (RFC793 pág 64) se devuelve un paquete RST cuando se intenta conectar a un puerto sin servicio, ya sea con un inicio de conexión normal (SYN), o con un paquete TCP cualquiera menos a los del tipo RST. Esto implica que se nos puede detectar si usamos ipchains, cuando intentamos ser invisibles, incluso si prohibimos la entrada de paquetes SYN mediante un escaneo Stealth "FIN", "Xmas Tree", o "Null" a puertos altos *SIN* servicios. Empleando iptables (kernel 2.4) si que podemos ser realmente invisibles utilizando el control de conexión en todas las conexiones entrantes con: -m state --state ESTABLISHED UDP Ausencia de noción de conexión Como en el protocolo UDP no hay noción de conexión no podemos impedir conexiones a nosotros como con el TCP SYN. Como consecuencia de esto cuando dejamos abierto un puerto UDP solo podemos limitar los accesos desde el exterior a él restringiendo con que IPs permitimos esa conexión. Ejemplo: Conexiones a IPs de los servidores DNS de nuestro proveedor Port unreachable: Devuelto a los intentos de conexión si no hay servicio Cuando un puerto UDP cerrado recibe un paquete se devuelve un mensaje ICMP de tipo "Port unreachable" Así las salidas de ICMP "Port unreachable" está relacionada con escaneos UDP realizados contra nosotros.