IPTABLES Gonzalo Alvarez Flores Contenido 1. ¿Qué es un firewall? 2. Netfilter: Historia 3. ¿Qué es Iptables? 4. Políticas para implementar un firewall 5. Iptables: Conceptos Básicos 6. Creando Reglas 7. Tipos de Filtrado 8. Comandos útiles 9. Creación de scripts 1. ¿Qué es un firewall? Un firewall o cortafuegos, es un elemento de hardware o software utilizado en una red de computadoras para controlar la entrada y salida de tráfico y de ésta manera prevenir algunos tipos de comunicaciones prohibidos. 2. ¿Qué es Netfilter? Netfilter es el framework dentro de las series 2.4.x y 2.6.x del Kernel Linux que permite el filtrado de paquetes, el uso de Network Address Translation (NAT) y Mangling. http://www.netfilter.org 3. ¿Qué es Iptables? Iptables es el nombre de la herramienta que permite configurar, mantener y monitorear las reglas para el filtrado de paquetes, para hacer NAT y Mangling. Cada cadena es una lista de de reglas que se pueden comparar una serie de paquetes. Cada regla especifica que hace con cada paquete que coincida y se ejecuta una acción llamada Objetivo. 4. Políticas para implementar un firewall Hay dos maneras de implementar un firewall: Política por defecto ACEPTAR: en principio todo lo que entra y sale por el firewall se acepta y solo se denegará lo que se diga explícitamente. Política por defecto DENEGAR: todo esta denegado, y solo se permitirá pasar por el firewall aquellos que se permita explícitamente. 5. Iptables: Conceptos Básicos Regla (Rules): − Una cadena de entrada o salida, una cadena de reenvío (sólo NAT) ó una cadena definida por el usuario. Tablas (Tables): − Filter: filtrar de paquetes (firewall). − Nat: modificar direcciones o puertos de origen/destino de los paquetes (router). − Mangle: modificar paquetes para lograr efectos especiales. Cadenas (Chains): − INPUT: Todo lo que quiera entrar en nuestra máquina. − OUTPUT: Todo lo que quiera salir de nuestra máquina. − FORWARD: Todo lo que se quiera redirigir a otra máquina. − PREROUTING: Lo que se hará antes de encaminar el paquete. − POSTROUTING: Lo que se hará inmediatamente después de encaminar el paquete. Relación Tabla-Cadena TABLA CADENA FILTER INPUT OUPUT FORDWARD NAT PREROUTING POSROUTING OUTPUT MANGLE PREROUTING POSTROUTING INPUT OUTPUT FORDWARD Objetivos (Targets): − ACCEPT: El paquete es aceptado y sale de INPUT. − DROP: El paquete se descarta sin ningúnproceso posterior. − REJECT: Igual que DROP pero se envía un paquete de error al remitente. − LOG: El paquete es registrado. − ULOG, QUEUE, RETURN, DNAT, SNAT, MASQUERADE. Flujo del Proceso 5. Creando Reglas Opciones Comunes: − t tabla : Aplica la regla para la tabla especificada, FILTER por defecto si se omite. − v : Nos muestra los mensajes de salida. − n : Nos muestra salida numérica. Especificacion de una Regla: -j objetivo : Especifica el objetivo de la regla. -p protocolo : Compara paquetes con el protocolo especificado. -s/d direccion IP : Compara la dirección IP de origen/destino del paquete con la especificada. Creando Reglas (II) --dport/sport puerto : Compara los paquetes TCP/UDP destinados/provenientes del puerto especificado. Agregar/Borrar Reglas iptables { -A | --append | -D --delete } cadena especificación-de-la-regla [ opciones ] Ejemplo: − iptables -A INPUT -p udp -j DROP − iptables -D INPUT -p udp -j DROP Insertar/Reemplazar Reglas iptables { -R | --replace | -I --insert } cadena numeroDeRegla especificación-de-la-regla [ opciones ] Ejemplo: − − iptables -R INPUT 2 -p icmp -j DROP iptables -I INPUT 4 -p udp --dport 80 -j DROP Listar/Borrar/Resetear Reglas iptables { -L | --list | -F --flush | -Z --zero } [ cadena ] [ opciones ] Ejemplos: − − − iptables -L OUTPUT iptables -F iptables -t nat -Z PREROUTING Crear/Borrar Cadenas iptables { -N | --new-chain } cadena iptables { -X | --delete-chain } [ cadena ] iptables { -P | --policy } cadena objetivo iptables { -E | --rename-chain } antiguonombre nuevo-nombre 7. Tipos de Filtrado Podemos filtrar los paquete dependiendo de ciertas características, entre los tipos de filtrado más usados tenemos: − − − − − Filtrado por interfaz Filtrado por protocolo Filtrado por dirección Filtrado por puerto Filtrado por estado de conexión Filtrado por interfaz -i, --in-interface [!] nombre (para INPUT) -o, --out-interface [!] nombre (para OUTPUT) Ejemplo: − iptables -A INPUT -i lo -j ACCEPT − iptables -A INPUT --in-interface ! eth0 -j DROP Filtrado por protocolo -p, --protocol [!] protocolo iptables -A INPUT --protocol tcp --jump DROP iptables -A INPUT --protocol udp --jump ACCEPT iptables -A INPUT --protocol icmp --jump EVALUARudp: para filtrar UDP tcp: para filtrar TCP icmp: para filtrar ICMP all: para todos los protocolos Filtrado por dirección Dirección de destino: − -d, --destination [!] dirección[/máscara] Dirección de origen: − -s, --source [!] dirección[/máscara] Ejemplo: − iptables -A INPUT --destination 192.168.0.2 -j DROP − iptables -A INPUT --d ! 192.168.0.2/16 -j ACCEPT − iptables -A INPUT --source 200.48.121.4 -j DROP Filtrado por puerto Puerto de destino: − Puerto de origen: − -dport, --destination-port [!] puerto[:puerto] -sport, --source-port [!] puerto[:puerto] Ejemplos: − − iptables -A INPUT --protocol tcp --destinationport 25 -j DROP iptables -A INPUT --protocol udp --source-port ! 80 -j ACCEPT Filtrando por estado de conexión -m state --state estado Donde estado es: − INVALID: dirección desconocida − ESTABLISHED: conexión que ha enviado paquetes en ambas direcciones − NEW: conexión sólo ha enviado paquetes en una dirección − RELATED: está iniciando una nueva conexión asociada a otra existente Ejemplo: − iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 8. Comandos útiles iptables-save − − Permite guardar las reglas actuales en un archivo de texto con un formato especial. iptables-save > misreglas iptables-restore − − Permite restaurar reglas que se encuentran en un archivo. iptables-restore < mireglas 9. Creación de Scripts para aplicar reglas La forma de crear reglas es ejecutando el comando iptables seguido de las opciones adecuadas para nuestras necesidades. La mejor manera es crear un script de shell y listar alli todas nuestras reglas de manera que automatizamos el proceso y podemos usarlo en diferentes Pcs. A continuación les muestro un script de ejemplo para proteger a nuestra propio equipo. Script de ejemplo para proteger al propio equipo #!/bin/sh ## Script para proteger la propia máquina ## Gonzalo Alvarez Flores echo "Aplicando Reglas de Firewall... \n" ## FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F #borrando todas las reglas (tabla filter por defecto) #borra las cadenas agregadas por el usuario #Reseteando los contadores de paquetes y bytes a cero #borrando todas las reglas de la tabla nat ## Establecemos política por defecto (En esta caso Por defecto aceptar) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT Script de ejemplo para proteger al propio equipo (II) ## Aplicando el filtro # Aceptamos la interfaz lo (Loopback device) iptables -A INPUT -i lo -j ACCEPT # Dejamos pasar todo a nuestra IP iptables -A INPUT -s 192.168.2.12 -j ACCEPT # Abrimos el puerto 7500 para algun fin iptables -A INPUT -s 192.168.2.12 -p tcp --dport 7500 -j ACCEPT # Permitimos el uso de ftp iptables -A INPUT -s 192.168.2.10 -p tcp --dport 20:21 -j ACCEPT # Cerramos el resto de puertos conocidos iptables -A INPUT -p tcp --dport 20:21 -j DROP iptables -A INPUT -p tcp --dport 7500 -j DROP iptables -A INPUT -p tcp --dport 22 -j DROP # Fin Fin Ahora solo les queda practicar hasta que logren crear un script con el conjunto de reglas que hagan lo que deseen. Suerte!