Semana 9: Firewalls Semana 9: Firewalls Filtrado de paquetes y NAT Aprendizajes esperados Contenidos: • Filtrado de paquetes • NAT NAT Filtrado de paquetes •Un # ping –c 1 127.0.0.1 Filtrado de paquetes Filtrado de paquetes • Cada regla especifica un conjunto de que un p paquete q debe cumplir, p y lo condiciones q que haremos si cumple dichas condiciones (efectuaremos una “acción”) acción ). Por ejemplo, ejemplo puede que quieras hacer DROP de los paquetes ICMP provenientes de la dirección 127.0.0.1. En este caso definiremos el protocolo como ICMP, la dirección de origen como 127.0.0.1 y la acción será DROP. Filtrado de paquetes Filtrado de paquetes • 127.0.0.1 es la l interface i f d “loopback” de “l b k” que tendrá en su máquina incluso si no dispone de una conexión real a la red. Puede hacer un “ping” para generar dichos paquetes. • un ping simplemente envía paquetes ICMP del p 8 (p (petición de eco – echo request) q )q que tipo todos los hosts operativos deberán responder con un paquete ICMP de tipo 0 (respuesta del eco – echo reply). Filtrado de paquetes Filtrado de paquetes # ping –c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms 64 bytes from 127 0 0 1: icmp seq=0 ttl=64 time=0 2 ms ‐‐‐ 127.0.0.1 ping statistics ‐‐‐ 1 packets transmitted, 1 packets received, 0% packet loss round‐trip min/avg/max = 0.2/0.2/0.2 ms # iptables p –A INPUT –s 127.0.0.1 –p icmp p p –j DROP j # ping –c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes ‐‐‐ 127.0.0.1 ping statistics ‐‐‐ 1 packets transmitted, 0 packets received, 100% packet loss # Filtrado de paquetes Filtrado de paquetes • Agregamos (‐A) a la cadena INPUT una regla p que los p q paquetes q que vengan q g de especificando 127.0.0.1 (‐s 127.0.0.1) con el protocolo ICMP ((‐p p icmp) deberán tomar la acción DROP ((‐jj DROP). • Una vez hecho h h esto, probamos b l regla la l con un segundo ping. El programa esperará una respuesta que nunca llegará. Filtrado de paquetes Filtrado de paquetes • Podemos eliminar esta regla de dos formas. La primera, yya q p que sabemos q que es la única regla g en la cadena INPUT, podemos utilizar su número para borrarla: # iptables –D INPUT 1 # iptables –D INPUT 1 • La La segunda forma es igual a la del comando segunda forma es igual a la del comando ‐A, pero sustituyendo ‐A por ‐D. Filtrado de paquetes Filtrado de paquetes • Esto es útil cuando tiene varias reglas p j y no q quieres tener q que contarlas complejas hasta encontrar la que buscabas. Para estos casos usaremos: ## iptables iptables –D D INPUT INPUT –ss 127.0.0.1 127.0.0.1 –p p icmp icmp –jj DROP Filtrado de paquetes Filtrado de paquetes • La sintaxis de ‐D debe ser exactamente igual a ) Si hayy múltiples p reglas g la de ‐A ((o ‐I o ‐R). iguales en la misma cadena, sólo la primera será eliminada. eliminada Filtrado de paquetes Filtrado de paquetes # iptables ‐F i bl • Para “vaciar” vaciar (Flush) todas las cadenas. # iptables ‐X • Borrar la cadena definida‐por‐usuario ((opcional) p ) especificada. p # iptables ‐Z • Poner a cero (Zero) los contadores de bytes y paquetes de todas las cadenas. Filtrado de paquetes Filtrado de paquetes # iptables –A INPUT –j DROP # iptables –A # iptables A OUTPUT OUTPUT –jj DROP DROP # iptables –A FORWARD –j DROP • Agregar (‐A) una regla para descartar (‐j paquetes q de entrada ((INPUT), ) DROP)) todos los p salida (OUPUT) y reenvío (FORWARD), respectivamente. respectivamente Filtrado de paquetes Filtrado de paquetes # iptables –A INPUT –p udp –j DROP • Agregar (‐A) una regla a la cadena de INPUT en la l tabla bl FILTER (la (l tabla bl por defecto d f cuando d la opción ‐t no se especifica) que descarte (‐j DROP) todos los paquetes UDP (‐p UDP). Filtrado de paquetes Filtrado de paquetes # iptables –A INPUT –p icmp –s 192.168.1.123 –j DROP • Agregar (‐A) una regla a la cadena de entrada ((INPUT) para que cualquier paquete ICMP ) p q q p q ((‐p p icmp) con origen en 192.168.1.123 (‐s 192 168 1 123) sea descartado (‐j DROP) 192.168.1.123) sea descartado (‐j DROP). Filtrado de paquetes Filtrado de paquetes # iptables –A INPUT –p tcp –s p j 192.168.1.123 –dport 21 –j DROP • Agregar (‐A) una regla a la cadena de entrada (INPUT) para que cualquier l i paquete TCP (‐p ( tcp) con origen en 192.168.1.123 (‐s 192.168.1.123) a través de FTP por el puerto 21 ((‐‐dport dport 21) sea descartado ((‐jj DROP). Filtrado de paquetes Filtrado de paquetes # iptables –A INPUT –p tcp –dport 22 –j bl d ACCEPT • Agregar (‐A) una regla a la cadena de entrada (INPUT) para aceptar (‐j ( j ACCEPT) conexiones i a nuestra máquina a través de SSH por el puerto 22 (‐‐dport 22). ¿Qué es NAT? ¿Qué es NAT? • Normalmente, los paquetes viajan en una red g determinado (p (por ejemplo, j p desde un origen desde mi computador) a un destino específico (como por ejemplo www.google.com) www google com) a través de varios enlaces diferentes. • Ninguno de estos enlaces l alteran l realmente l los paquetes: simplemente lo envían un paso adelante. ¿Qué es NAT? ¿Qué es NAT? • Si uno de estos enlaces hiciera NAT, podría g o destino de los p paquete q alterar el origen según pasa a través suyo. • Normalmente, Normalmente el enlace que esté haciendo NAT recordará cómo y qué modificó del paquete, para hacer h l acción la ó inversa con ell paquete de respuesta, de manera que todo funciona como se esperaba. Razones para usar NAT Razones para usar NAT • • • • • • Remedio frente a la escasez de direcciones Simplificación de la gestión de redes Mejora de la seguridad Conexiones con módem a Internet Varios servidores Proxy transparente Tipos de NAT Tipos de NAT • Source NAT (SNAT, por origen), y Destination por destino). ) NAT ((DNAT, p • Source NAT es cuando alteramos el origen del primer paquete: esto es, es estamos cambiando el lugar de donde viene la conexión. • Source NAT siempre se hace después del encaminamiento, justo antes de que el paquete salga por el cable. El enmascaramiento es una forma especializada de SNAT. Tipos de NAT Tipos de NAT • El enmascaramiento (masquerading) es una p de SNAT. forma especializada Source NAT Source NAT Tipos de NAT Tipos de NAT • Destination i i NAT es cuando d alteramos l l la dirección de destino del primer paquete: esto es, cambiamos la dirección a donde se dirige la conexión. • DNAT siempre se hace antes del paquete q entra p por encaminamiento,, cuando el p el cable. El port forwarding (reenvío de puerto), el balanceo de carga y el proxy transparente son formas de DNAT. Destination NAT Destination NAT Controlar el NAT Controlar el NAT • Se necesitan crear reglas NAT que le digan al qué conexiones cambiar, y núcleo ((kernel)) q cómo hacerlo. • Para hacer esto se utiliza la muy versátil herramienta IPTABLES, y le diremos que altere l tabla la bl de NAT usando la l opción ó ‐t nat. Controlar el NAT Controlar el NAT • La tabla de reglas NAT contiene tres listas g se examina llamadas “cadenas”: cada regla por orden hasta que una coincide. • Las tres cadenas se llaman PREROUTING (para Destination NAT, según los paquetes entran), POSTROUTING (para ( Source NAT, según ú los l paquetes salen), y OUTPUT (para Destination NAT con los paquetes generados en la propia máquina). Controlar el NAT Controlar el NAT • Para todas las operaciones de NAT, se debe para especificar p que se operará q p usar ‐t nat p sobre la tabla NAT. • Otra opciones importantes son ‐A A para añadir una nueva regla al final de una cadena (‐A POSTROUTING), ) o ‐I para insertarla l all principio (‐I PREROUTING). Controlar el NAT Controlar el NAT • Se puede especificar el origen (‐s o ‐‐source) y paquetes q el destino ((‐d o ‐‐destination)) de los p sobre los que se quiere hacer NAT. • Estas opciones pueden ir seguidas por una IP sencilla (por ejemplo, 192.168.1.1), un nombre b (por ( ejemplo, l www.duoc.cl), l) o una dirección de red (192.168.1.0 / 24 o 192.168.1.0 / 255.255.255.0). Controlar el NAT Controlar el NAT • Se puede especificar qué interfaz de entrada o p ‐i o ‐‐in‐ de salida considerar con las opciones interface y ‐o o ‐‐out‐interface, respectivamente Pero lo que se puede respectivamente. especificar depende de en qué cadena esté poniendo la regla: en PREROUTING sólo puede elegir la interfaz de entrada, y en POSTROUTING (y OUTPUT) sólo la de salida. Controlar el NAT Controlar el NAT • Si usa la equivocada, IPTABLES le avisará con j de error. un mensaje • También puede indicar un protocolo específico (‐p ( p o ‐‐protocol), protocol) como TCP o UDP; sólo los paquetes de este protocolo coincidirán á con la l regla. l Controlar el NAT Controlar el NAT • La razón principal para hacer esto es que p uno de los p protocolos TCP o UDP especificar permite más opciones: específicamente las opciones ‐‐source‐port source port y ‐‐destination‐port destination port (abreviadas como ‐‐sport y ‐‐dport, respectivamente). respectivamente) Source NAT Source NAT • Hacer Source NAT quiere decir que vamos a g de las cambiar la dirección de origen conexiones a algo diferente. • Source NAT se hace en la cadena de POSTROUTING, justo antes de que sea enviado. Este es un detalle ll importante, ya que significa que cualquier otro servicio de la máquina LINUX (encaminamiento, filtrado de paquetes) verá el paquete sin cambiar. Source NAT Source NAT • También significa que se puede utilizar la p ‐o ((interfaz de salida). ) opción • El Source NAT se especifica indicando ‐j SNAT, y la opción ‐‐to‐source to source especifica una dirección IP, un rango de direcciones IP, y un puerto o rango de puertos opcionales l (sólo ( ól con los protocolos UDP y TCP). Source NAT Source NAT • Cambiar la dirección de origen por 1.2.3.4 # iptables –tt nat # iptables nat –A A POSTROUTING POSTROUTING –o o eth0 eth0 –j SNAT ‐‐to 1.2.3.4 • Cambiar la dirección de origen a 1.2.3.4, 1.2.3.5 o 1.2.3.6 # iptables –t nat –A POSTROUTING –o eth0 –j SNAT ‐‐to 1.2.3.4‐1.2.3.6 j SNAT 12341236 Source NAT Source NAT • Cambiar la dirección de origen por 1.2.3.4, puertos 1‐1023. p # iptables –t nat –A POSTROUTING –p tcp –o eth0 –j SNAT ‐‐to 1.2.3.4:1‐1023 Enmascaramiento • Hay un caso especial de Source NAT que se ( q g) denomina enmascaramiento (masquerading). • sólo debería ser usado para direcciones IP asignadas de forma dinámica, dinámica tales como las de conexiones por llamada estándar (para direcciones IP estáticas, á se debe b utilizar l ell SNAT descrito anteriormente). Enmascaramiento • No es necesario i escribir ibi la l dirección di ió de d origen i de forma explícita con el enmascaramiento: utilizará la dirección de origen de la interfaz por la que el paquete está saliendo. Pero más importante aún, si el enlace cae, las conexiones (que se iban a perder de todas maneras) se olvidan, lo que significa que habrá menos problemas cuando la conexión vuelva a la normalidad con una IP diferente. Enmascaramiento • Enmascarar todo lo que salga por ppp0. ## iptables –t nat –A POSTROUTING –o ppp0 iptables t nat A POSTROUTING o ppp0 –j MASQUERADE Destination NAT Destination NAT • Esto se hace h en la l cadena d PREROUTING, según entra el paquete; esto significa que cualquier otro servicio de la máquina con LINUX (encaminamiento, filtrado de paquetes) verá el paquete yendo a su destino “real” (el definitivo). • Esto significa que se puede utilizar la opción ‐i (interfaz de entrada). Destination NAT Destination NAT • Para alterar el destino de un paquete ggenerado de forma local ((en la máquina q que q hace el NAT), se debe usar la cadena OUTPUT, pero esto es más inusual. inusual • Destination NAT se especifica utilizando ‐j DNAT, y la l opción ó ‐‐to‐destination especifica f una dirección IP, un rango de direcciones IP, y un puerto o rango de puertos opcionales (sólo para los protocolos UDP y TCP). Destination NAT Destination NAT • Cambia la dirección de destino por 5.6.7.8 # iptables –tt nat # iptables nat –A A PREROUTING PREROUTING –ii eth1 eth1 –jj DNAT ‐‐to 5.6.7.8 • Cambia la dirección de destino por 5.6.7.8, 5.6.7.9 o 5.6.7.10. # iptables –t nat –A PREROUTING –i eth1 –j DNAT ‐‐to 5.6.7.8‐5.6.7.10 Destination NAT Destination NAT • Cambia la dirección de destino del tráfico web por 5.6.7.8, p p puerto 8080. # iptables –t nat –A PREROUTING –p tcp ‐‐dport 80 –i eth1 –j DNAT ‐‐to 5.6.7.8:8080 d t 80 i th1 j DNAT t 5 6 7 8 8080 • Redirige g los p paquetes q locales q que van a 1.2.3.4 hacia el dispositivo loopback. # iptables –t nat –A OUTPUT –d 1.2.3.4 –j i bl d j DNAT ‐‐to 127.0.0.1 Configuración de un PROXY Configuración de un PROXY • Vamos a suponer que tenemos un PROXY en puerto 3128 p para la dirección 192.168.0.1 y el p las conexiones a servidores web de internet, con la siguiente regla se redirigirán todas las peticiones que se realicen hacia un servidor WEB (puerto 80) hacia el puerto 3128 de la máquina 192.168.0.1: # iptables –t nat –A PREROUTING –p tcp ‐‐dport 80 –j DNAT ‐‐to 192 168 0 1:3128 ‐‐dport 80 –j DNAT ‐‐to 192.168.0.1:3128 Configuración de un PROXY Configuración de un PROXY • Envía el tráfico que entra dirigido al puerto 80 ((web)) a nuestro p proxyy squid q ((transparente). p ) ## iptables iptables –tt nat nat –A A PREROUTING PREROUTING –ii eth1 eth1 –p tcp ‐‐dport 80 –j REDIRECT ‐‐to‐port 3128 Configuración de un PROXY Configuración de un PROXY Resumen •Un