S2-cortafuegos: (0.08) *EN DESARROLLO DESDE EL 2.8.2000* ---ALFA--- Cortafuegos por filtrado de paquetes en el kernel, teoria, estrategia, y uso práctico con Linux PROLOGO Este documento pretende resumir los conocimientos indispensables para un uso adecuado del filtrado de paquetes en el kernel para un cortafuegos. La idea es que sea eminentemente práctico. Comentarios constructivos y sugerencias a mi dirección de mail: manel3@apdo.com Este documento esta compuesto por otras chuletas mas pequeñas: teoria-cortafuegos teoria-tcp-ip teoria-icmp teoria-fragmentos teoria-interfaces teoria-puertos teoria-spoofing teoria-source-route teoria-tos teoria-masquerade teoria-filtrado-1 teoria-filtrado-2 teoria-filtrado-3 teoria-filtrado-4 * A ACTUALIZAR (al terminar las chuletas más pequeñas) * INDICE GENERAL: 1- BREVE INTRODUCCION A LOS CORTAFUEGOS (chuleta teoria-cortafuegos) 1.1- Cortafuegos de filtrado 1.2- Proxys 1.3- Limitación de acceso a nuestros servidores privados Eliminando servidores no utilizados Evitando que se pueda acceder a nuestros servidores Prohibiendo el acceso 2- NOCIONES DE TCP/IP NECESARIAS: (chuleta teoria-tcp-ip) (teoria-tcp-ip) 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 (teoria-icmp) ICMP Tipo/Código en vez de puerto ICMP necesarios FRAGMENTATION NEEDED <- 3/4 PING -> 8/- y PONG <- 0/- Traceroute (PORT UNREACHABLE <- 3/3 y TTL EXCEDEED <- 11/0) ICMP sospechosos/peligrosos PING <- 8/- REDIRECT <- 5/- SOURCE QUENCH <- 4/- PARAMETER PROBLEMS -> 12/- PORT UNREACHABLE -> 3/3 AMENAZAS ICMP BOMBAS ICMP CANALES ICMP MAS INFO SOBRE ICMP (teoria-fragmentos) Fragmentos BOMBAS FRAGMENTARIAS ATAQUES CON FRAGMENTOS CONCLUSIONES Desfragmentar Prohibir fragmentos No confiar ciegamente en el cortafuegos MAS INFO SOBRE FRAGMENTOS El bug del 2.2.10 (teoria-interfaces) Interfaces Loopback (lo) Conexiones a nosotros mismos Ping/conexión a nuestra IP ethernet Servicio escuchando en un interface o en todos MAS INFO DE INTERFACES: (teoria-puertos) IP Direcciones y puertos Puertos privilegiados (bajos) y no privilegiados (altos) (teoria-spoofing) Spoofing IP y arp spoof spoof = engaño IP spoofing arp spoof DNS spoof CONCLUSIONES Prohibir entradas desde Internet desde nuestras IP (spoof) Activar verificación de dirección fuente del kernel (teoria-source-route) Paquetes IP con "source route" Ataques "source route" CONCLUSIONES Prohibir paquetes "source route" en el kernel (teoria-tos) TOS No modificar el bit 1 del TOS CONCLUSIONES: MANIPULACIÓN DE TOS: MAS AYUDA: Anexo-I El campo TOS en el kernel (teoria-masquerade) Enmascaramiento de IP Riesgo: Nos pueden aprovechar para conseguir anonimato Problemas: Parte del tráfico con Internet no se puede "ver" No se asegura el protocolo enmascarado No queda registro del tráfico que mueven los clientes ->*POR PROBAR* Utilizar el sniffer/logger "snort" Alternativas: Usar proxys en lugar del enmascaramiento (teoria-filtrado-1) Filtrado de paquetes Que es el filtrado de paquetes Orden de las reglas (evaluación secuencial hasta que una coincide) ACCEPT, DENY/DROP, REJECT Política por defecto Input es entrada desde cualquier "lugar" (interface) Toda regla output tiene una input asociada Los paquetes forward atraviesan input y output (menos en iptables) (teoria-filtrado-2) Problemas del filtrado de paquetes Es facil perderse (olvidar opciones) entre tanta letra Hay que saber que paquetes envia y recibe cada servicio El "log" de paquetes de ipchains no es seguro (ataque DoS) El servicio auth (teoria-filtrado-3) Estrategias de filtrado Principios generales No confiar ciegamente en el cortafuegos Redundancia Prohibir por defecto, solo permitir el tráfico conocido IP estática / IP dinámica Estrategias Ser invisible (o al menos todo lo posible) Camuflaje Limitar nuestros servicios a nuestros interfaces locales Hacer ver que nuestros puertos UDP están cerrados Técnicas de cambio de "fingerprint" (no lo he probado) Puntos importantes Aplicar reglas "de Internet" a todos los interfaces no definidos antes Manipular el campo TOS IP para cambiar la prioridad de los paquetes Las reglas se pueden usar como contadores de paquetes/bytes Forwarding activo para enmascarar IP No retransmitir enmascarando para todo el mundo Impedir conexiones iniciadas desde Internet hacia nosotros Cerrar los puertos TCP abiertos expresamente además de con SYN Restringir UDP solamente a nuestros servidores cuando sea posible Prohibir los fragmentos IP Cerrar/no abrir el puerto "cero" Cerrar/no abrir los puertos 1-1023 MAS INFO (teoria-filtrado-4) Testeo offline Levantar la IP alias Escaneo con nmap Otras pruebas Para ver las reglas (y el conteo de paquetes y bytes) Para ver el log de reglas prohibidas MAS INFO (secure-kernel-22) Script con seguridad kernel (echorun) Script para lanzar el comando ipchains y mostrar si hay mensajes de error (firewall-easy-lib) Definición de reglas de cortafuegos independiente del kernel y fácil de leer Esto vale como: -Notación que vamos a emplear -Ejemplo explicado paso a paso con TCP y UDP necesarios (fwgen-ipchains) Script que genera un script de cortafuegos a partir de la definición del cortafuegos en firewall-easy-lib, y los interfaces e IP en firewall-easy.conf (firewall-easy.conf) Archivo de configuración de interfaces, IPs y redes *POR HACER* Analisis de detalles en firewall-easy-lib QUE FILTRAR Y PORQUE: (*revisar* chuleta S2-cortafuegos-antes/teoria-puertos) (y crear chuleta teoria-filtrado-4?) APENDICES: (crear chuleta teoria-filtrado-5?) -Documentos on-line recomendados (*revisar* chuleta S2-DOC)