IPTables Tablas: Filter z NAT z INPUT, OUTPUT, FORWARD. PREROUTING, OUTPUT, POSTROUTING. Mangle PREROUTING, OUTPUT (2.4.17). z INPUT, FORWARD, POSTROUTING (2.4.18) z IPTables Sintaxis La sintaxis general (muy simplificada para nuestro ejemplo es) z Iptables –t tabla comando cadena definicion_regla –j target z Tabla puede ser nat, filter o mangle; comando puede ser –A, -D, -L, -F, -I; cadena puede ser INPUT, OUTPUT, FORWARD; target puede ser ACCEPT o DROP. IPTables Hay tres cadenas principales: INPUT la recorren los paquetes que entran en la máquina con destino a la propia máquina OUTPUT la recorren los que salen (procedentes de la propia máquina) FORWARD la recorren los que atraviesan la máquina El administrador puede añadir subcadenas a cualquier cadena. P.e. MI CADENA. Desde las cadenas principales se llama a las subcadenas SI un paquete cumple cierta condición ENTONCES hacer algo con el paquete: - DROP. descartarlo allı́ mismo - ACCEPT. permitirle que siga - Enviarla a otra cadena (subcadena) - ... Si el paquete no cumple la condición, sigue avanzando por la cadena Una vez recorrida una subcadena, el flujo vuelve a la cadena principal desde donde fue llamada Una vez recorrida una cadena principal, se aplica la polı́tica por defecto de esa cadena: ACCEPT o DROP IPTables Camino de un datagrama por el núcleo Soy una máquina con Linux. El tratamiendo de un datagrama depende de si soy un router o no ¿Cómo se que si soy un router? Consultando el valor de /proc/sys/net/ipv4/ip_forward ¿Cómo hacer que me convierta en router? echo 1 > /proc/sys/net/ipv4/ip_forward Esto no es persistente, suele incluirse en un script de arranque Previamente debe haber tablas de encaminamiento, creadas a mano o mediante algoritmos de encaminamiento Decidir el encaminamiento: consultar mi tabla de encaminamiento y averiguar por cuál de mis interfaces debo enviar el datagrama Encaminar: enviar el datagrama por el interfaz adecuado Soy una máquina conectada a la red. No tengo iptables Recibo un datagrama Si es para mı́, me lo quedo Si no es para mı́ - Si soy un router, decido su encaminamiento y lo encamino - Si no soy un router, tiro el paquete Envı́o un datagrama - Decido su encaminamiento y lo encamino IPTables Soy una máquina conectada a la red, tengo iptables Recibo un datagrama Si es para mı́, - Lo envio a la cadena INPUT. Si la supera, me lo quedo Si no es para mı́ - Si soy un router, decido su encaminamiento, lo paso por la cadena FORWARD, y si la supera, lo encamino - Si no soy un router lo tiro Envı́o un datagrama - Decido su encaminamiento, lo paso en la cadena OUTPUT y si la supera, lo encamino IPTables uso de iptables La manipulación de reglas se hace mediante opciones de la orden iptables Las reglas se borran al reiniciar la máquina. Ası́ que hay que cargarlas en un script en el arranque. Es conveniente activarlo antes de activar los interfaces de red La mayorı́a de las opciones pueden especificarse de dos formas alternativas, equivalentes 1. Con un guión y letra de opción 2. Con dos guiones y el nombre de la opción iptables -A INPUT -p tcp -s 193.186.21.6 -j DROP iptables --append INPUT --protocol tcp --source 193.186.21.6 -jump DROP IPTables Ver las reglas -L Listar las reglas de una(s) cadena(s) --list -n --numeric Mostrar las direcciones como números, sin intentar traducirlas en nombres iptables -nL FORWARD Listar la cadena FORWARD iptabels -nL Listar todas las cadenas Poner y quitar reglas -A --append Añadir una regla a una cadena -F --flush Borrar todas las reglas iptables --flush INPUT Borra las reglas de la cadena input iptables --flush Borra las reglas de todas las cadenas Hay opciones para borrar reglas sueltas y para reordenar las reglas Pero ya que hay que cargar las reglas mediante un script, es más práctico que el script borre todo y luego inserte las reglas adecuadas en el orden adecuado IPTables Especificar paquetes -s --source Dirección IP origen -d --destination Dirección IP destino -i --in-interface Interfaz de entrada -o --out-interface Interfaz de salida negación ! -s 193.147.71.1 Paquete proveniente de 193.147.71.1 -d ! localhost Paquete no destinado a localhost -i lo Paquete que entra por el interfaz lo -o ! eth0 Paquete que no sale por eth0 -p --protocol --sport --source-port Protocolo del paquete Puerto de origen --dport --detination-port Puerto de destino No basta decir el puerto 80. ¿El puerto 80 TCP? ¿El puerto 80 UDP? La opción --protocol debe preceder a --dport/--sport -p tcp Paquete de protocolo TCP --dport 80 Paquete destinado al puerto 80 --sport 1-1023 Paquete con origen en los puertos del 1 al 1023 --dport 1024- Paquete con destino al puerto 1024 o superior --sport -3000 Paquete con origen en el puerto 3000 o inferior El fichero /etc/services describe los well-known port numbers IPTables Destino de un paquete -j --jump -j -j -j -j DROP REJECT ACCEPT RETURN -j MI_CADENA Enviar el paquete a DROP (descartarlo, sin más) Rechazar el paquete y enviar un error al origen Aceptar el paquete. No se evalúan más reglas El paquete abandona la cadena actual -Si está en una subcadena, vuelve a la cadena principal -Si está en la cadena principal se le aplica la polı́tica por defecto Enviar el paquete a MI_CADENA Polı́tica por defecto Por una cadena pasan muchos datagramas Los que encajan en una regla de destino DROP o REJECT, serán eliminados Los que encajan en una regla ACCEPT, superarán la cadena ¿Y los que no sea explı́citamente aceptados ni explı́citamente rechazados? Se hará con ellos lo que indique la polı́tica por defecto Las subcadenas no tienen polı́tica por defecto -P --policy Fija la polı́tica por defecto de la cadena iptables --policy INPUT DROP iptables --policy FORWARD ACCEPT Ejemplo:SNAT/DNAT ♦ dirección IP privada origen por la dirección IP pública Pasos: ♦ Un equipo de una red local con una dirección IP privada (supongamos 192.168.3.14) quiere solicitar una página web (puerto 80/tcp) de Zeus.unex.es. ♦ Realiza una consulta DNS y obtiene l a IP 158.49.96.23. ♦ Consulta su tabla de encaminamiento y como no está en la misma red que Zeus.unex.es, envía el paquete con la solicitud de la página al equipo que es su destino por defecto (puerta de enlace), que supongamos tiene la dirección 192.168.3.254. ♦ El gateway, actúa como dispositivo de NAT, recibe el paquete,comprueba la dirección IP destino, y como no es la suya, lo envía a su propio destino por defecto (gateway) que ya será una dirección IP pública. Ejemplo: SNAT/DNAT ♦ Antes de que el paquete salga por la interfaz de red externa, se le cambia la dirección IP origen (192.168.3.14) por la dirección IP pública (supongamos que fuese 158.49.92.100) y se guarda la petición en lo que se denomina tablas de NAT(anotando también el puerto origen, supongamos que fuese el 5015/tcp. ♦ El paquete viaja por Internet saltando de router a router hasta que llega a su destino. El equipo 158.49.96.23 recibe una petición desde la dirección 158.49.92.100 y la contesta, por lo que el paquete de vuelta llevará ahora dirección IP origen 158.49.96.23, dirección IP destino 158.49.92.100, puerto origen 80/tcp y puerto destino 5015/tcp. ♦ La contestación del servidor web de Zeus.unex.es llega a la interfaz externa del dispositivo de NAT, que consulta las tablas de NAT y comprueba (gracias al puerto origen) que corresponde con una petición realizada desde el equipo 192.168.3.14, por lo que modifica la dirección IP destino por ésta y se lo envía directamente. Ejemplo: SNAT/DNAT IP masquerading • SNAT: Cuando la dirección IP pública que sustituye a la IP origen es estática (SNAT también significa Static NAT). • MASQUERADE: Cuando la dirección IP pública que sustituye a la IP origen es dinámica, caso bastante habitual en conexiones a Internet domésticas. Destination NAT o port forwarding Este tipo de NAT se utiliza cuando tenemos algún servidor en una máquina detrás del dispositivo de NAT. En este caso será un equipo externo el que inicie la conexión, ya que solicitará un determinado servicio y el dispositivo de NAT, en este caso, debe modificar la dirección IP destino. ♦ Un equipo con dirección IP pública 150.212.23.6 desea conectarse por ssh(22/tcp)al equipo casa.mired.com ♦ Realiza una consulta DNS y obtiene como respuesta que casa.mired.com tiene la dirección IP 85.136.14.7. Ejemplo:SNAT/DNAT ♦ Establece la conexión (supongamos puerto origen 23014/tcp) con el equipo 85.136.14.7, que resulta ser un dispositivo de NAT que no tiene ningún servicio ssh escuchando en el puerto 22/tcp, pero que tiene una regla de DNAT para que todo lo que llegue a ese puerto se lo envíe a un equipo de su red local (supongamos que fuese el 10.0.0.2), por lo que cambia la dirección IP destino (85.136.14.7) por la 10.0.0.2 y lo registra en sus tablas de NAT. ♦ Al equipo 10.0.0.2 llega un solicitud al puerto 22/tcp y la respuesta tiene las siguientes características: origen 10.0.0.2, puerto origen 22/tcp, IP destino 150.212.23.6 y puerto destino 23014/tcp. ♦ El dispositivo de NAT cambia ahora la dirección IP origen por su dirección IP pública (85.136.14.7) y el paquete llega de vuelta a su destino. SNAT/DNAT Cómo se examinan las cadenas [Tabla NAT] Incoming Prerouting DNAT Outgoing Routing Decision Postrouting SNAT Local Process
© Copyright 2024