IPTABLES
6ta Reunion: 17 de abril de 2004
Resumiendo lo visto en la reunión, vamos a dar un resúmen de iptables como para refrescar la memoria para los que estuvieron y para que puedan aprender los que faltaron. Aclaro que en la próxima reunión continuaremos con el tema.
Introducción
IPTABLES es un filtro y manipulador de paquetes IP. Se lo denomina packet filter, por que todas la operaciones que realiza las hace sobre paquetes de red. Estas operaciones (targets, en la terminología de iptables) se aplican a ciertos paquetes en base de a un determinado criterio de coincidencia (match, en ingles).
Esta herramienta es muy útil si tenemos una red LAN y queremos compartir internet utilizando un linux, ya que nos permite tener seguridad (bloqueando los paquetes que no deseamos que pasen por el linux) y nos permite realizar NAT para que las máquinas de la red LAN puedan acceder a internet.
Para tener iptables debemos tener el kernel de linux version 2.4 o superior.
Que es NAT?
NAT, son las siglas de traducción de dirección de red en castellano. Basicamente esta funcionalidad se usa cuando tenemos una conexión a internet con una única direccion IP, de forma que si configuro al linux para que realice NAT, todos los paquetes que se generen en la red LAN con destino internet seran modificados para que la direccion IP de origen cuando el paquete salga a la red de redes sea la direccion IP pública que nos asigna el proveedor.
Por que se llama iptables?
Se llama iptables por que desde el punto de vista del usuario la administración de iptables se divide en tres tablas, donde cada una de estas tablas llevara las reglas que actuaran sobre los paquetes de red. La existencia de tres tablas se debe a que cada una de ellas tiene una funcionalidad específica. Ellas son: - filter: para las reglas de filtrado. - nat : para las reglas que realizan NAT. - mangle: para las reglas que realizan modificaciones sobre los paquetes de red (mangle es manipular, traducido al castellano). Muy poco utilizada.
Algunos ejemplos antes de continuar…
Si quiero compartir mi conexión a internet:
#iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
La regla anterior dice: todo paquete cuyo origen (source, de ahi viene el “-s” de la linea de comandos) sea la red 192.168.0.0/24 y que salga por la interface de red ppp0 sea afectado por la operación (target) MASQUERADE. Esta operación hace que se realice NAT con la dirección IP pública que tenemos en ese momento en ppp0 (se lo utiliza para conexiones con direccion IP dinámica).
#iptables -t filter -I FORWARD -s 192.168.0.10 -j DROP
Explicación: Bloqueo todos los paquetes (DROP) que provengan de la máquina 192.168.0.10, los cuales vayan a ser FORWARDdeados (o sea, cuyo destino no sea el linux).
#iptables -t filter -I INPUT -s 192.168.0.11 -j DROP
Explicación: Bloqueo todos los paquetes (DROP) que provengan de la maquina 192.168.0.11, los cuales tengan como destino el linux (por eso el INPUT).
Un poco de teoría
Hablamos de que iptables esta dividido en tres tablas, ahora veremos que a su vez estas tablas estan subdivididas también. A estas divisiones se las conoce como CHAINS, que son basicamente subtablas pero con un agregado que veremos después. La estructura completa de las tablas es:
mangle nat filter PREROUTING PREROUTING INPUT INPUT FORWARD FORWARD OUTPUT OUPUT OUTPUT POSTROUTING POSTROUTING
Como vimos en los ejemplos anteriores, las reglas con insertadas dentro de las chains. La pregunta ahora es, para que son las chains?: bueno, la idea es que cada paquete que ingresa al linux sea analizado por cada una de las reglas de las chains, en un orden determinado. Lo importante a la hora de aplicar las reglas es entender en que orden se analizan la chains, para no tener problemas.
Veamos por donde pasan los paquetes…
El método memotécnico mas sencillo que encontre es entender un poco como es el ruteo dentro del kernel de Linux. Fijense los nombres de las chains (no importa la tabla) y olvidense por un momento de la estructura general del iptables: -PREROUTING -INPUT -FORWARD -OUTPUT -POSTROUTING
Esos nombres que puse ahi arriba son instancias por las cuales puede atravesar un paquetes cuando ingresa a un linux (o cuando sale). Para entender mejor la explicación, agreguemos una instancia que llamaremos RUTEO. Esta instancia es el momento en el cual el kernel de linux decide que hacer con un paquete en base a la direccion IP de destino del mismo. Las alternativas son dos:
dejar el paquete en el equipo y pasar a la instancia de INPUT, si la dirección IP de destino es una de las direcciones que tiene el linux configurado.
Reenviar (FORWARD) el paquete por algunas de las interfaces de acuerdo a la tabla de ruteo, si la direccion IP destino no es una de las direcciones IP que el linux tiene configurada.
Hasta aca ya sabemos que el paquete pasa por la instancia de RUTEO y luego prodrá pasar por INPUT o FORWARD, pero… que es PREROUTING y POSTROUTING? en castellano sería ANTES DE ROUTEAR y DESPUES DE RUTEAR. Todo paquete que ingresa a un linux pasa por la instancia de PREROUTING. En el caso del POSTROUTING, es la instancia final de todos los paquetes que se FORWARDean (los paquetes que pasan por INPUT no pasan por POSTROUTING).
Graficamente:
Si ya se entendió la logica de las instancias (espero que si
), ahora veamos como encajar esto con las tablas (mangle, nat y filter). Como vieron en cada una de las tablas aparecen las instancias que hablamos recién y como dije antes esta división de “tables” es algo desde el punto de vista del administrador, internamente digamos que no es tan así. La idea es, mangle, nat y filter son operaciones que se pueden realizar en los paquetes en cada una de las instancias, por ejemplo, en la instancia de FORWARD yo puedo realizar cualquiera de las 3 operaciones. Lo que hay que tener en cuenta aquí es el orden en que se realizan las operaciones (no importa la instalación): primero se aplica MANGLE, segundo NAT y por último se hace la operación de FILTER. Volviendo el ejemplo anterior, cuando un paquete entra a FORWARD, primero se lo MANGLEa, despues se lo NATea y por ultimo se lo FILTRA.
Este fue un rápido y breve resumen de la charla. Disculpen los errores, lo hice rápido por que no andaba con mucho tiempo. Cualquier sugerencia o corrección me avisan. diegows@linux.org.ar
0 comments so far