Firewalls

Vamos a ver algunas nociones sobre firewalls: Presentación sobre Firewalls

Iptables

Una vez conocidas las principales arquitecturas de firewall perimetral, vamos a ver una tecnología de firewall statefull: iptables. Iptables tienen ya sus añitos, pero sigue siendo una herramienta básica para el filtrado del tráfico. Como referencia, aconsejo un clásico: www.pello.info/filez/firewall/iptables.html. También os dejo aquí estas transparencias: iptables.

Práctica 1. Consulta el siguiente script del manual "IPTABLES manual practico, tutorial de iptables con ejemplos" de Pello Xabier Altadill Izura. Estudia cada una de las reglas.

#!/bin/sh ## SCRIPT de IPTABLES - ejemplo del manual de iptables ## Ejemplo de script para proteger la propia máquina ## Pello Xabier Altadill Izura ## www.pello.info - pello@pello.info echo -n Aplicando Reglas de Firewall... ## FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F ### EXPLICA: iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT ## Empezamos a filtrar ### EXPLICA: /sbin/iptables -A INPUT -i lo -j ACCEPT ### EXPLICA: iptables -A INPUT -s 195.65.34.234 -j ACCEPT ### EXPLICA: iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT ### EXPLICA: iptables -A INPUT -s 80.37.45.194 -p tcp -dport 20:21 -j ACCEPT ### EXPLICA: iptables -A INPUT -p tcp --dport 80 -j ACCEPT ### EXPLICA: iptables -A INPUT -p tcp --dport 20:21 -j DROP iptables -A INPUT -p tcp --dport 3306 -j DROP iptables -A INPUT -p tcp --dport 22 -j DROP iptables -A INPUT -p tcp --dport 10000 -j DROP echo " OK . Verifique que lo que se aplica con: iptables -L -n" # Fin del script

Práctica 2. En la siguiente topología se muestra un firewall iptables, conetado a una LAN y a una DMZ. Empleando máquinas virtuales, configura el firewall para que se cumplan los siguientes requisitos:

  1. Los usuarios de la LAN pueden salir a Internet libremente.
  2. Desde Internet no se puede acceder a las máquinas de la LAN salvo que la conexión se iniciase desde éstas.
  3. Los usuarios de la LAN pueden acceder a la DMZ libremente.
  4. Desde la DMZ no se puede acceder a las máquinas de la LAN salvo que la conexión se iniciase desde éstas.
  5. Desde Internet se puede acceder al servidor de la DMZ, pero solo al servicio HTTP.
  6. Aún no hemos explicado NAT. Por ello es preciso que para acceder desde el exterior, la máquina posea una ruta hacia la red de la DMZ.

  7. El servidor solo puede salir al exterior con tráfico HTTP. Cualquier otro tipo de tráfico será bloqueado.
  8. El firewall no es alcanzable desde la red, aunque sí pueda reenviar tráfico.

Finalmente haz un análisis de puertos contra el firewall y el servidor desde el exterior y desde la LAN.

Una vez que tengas lista la topología, deberás hacer dos cosas: 1- Entrega el script iptables con el nombre Act2-iptables.sh. 2- Haz una demostración en vivo donde se pueda verificar el correcto funcionamiento del script.

NAT con GNU/Linux

Existen dos tipos de direcciones IP: públicas y privadas. Las direcciones públicas se pueden enrutar en Internet, y las privadas no, ya que sólo son para el uso interno de una red.

Es necesario registrar las direcciones de Internet públicas con una autoridad de Internet como por ejemplo, el Registro Europeo de Números de Internet, RIPE NNC (Réseaux IP Européens Network Coordination Centre). Estas direcciones de Internet públicas pueden alquilarse a una ISP también.

Puesto que las redes privadas se ubican en redes particulares, una cierta direcció privada puede repetirse en organizaciones diferentes. Los bloques de direcciones privadas son las siguientes:

ClaseRangoPrefijo CIDR
A10.0.0.0-10.255.255.25510.0.0.0/8
B172.16.0.0-172.31.255.255172.16.0.0/12
C192.168.0.0-192.168.255.255192.168.0.0/16

Desde la red privada a la pública

Cuando un paquete circula por una red privada utilizando direcciones IP privadas, no hay problema siempre y cuando las direcciones no se repitan. Pero al salir a Internet, para que el paquete pueda ser enrutado, hay que traducir la dirección de origen (una dirección privada) a una dirección IP pública.

Cuando un host ubicado en una red privada desea comunicarse con otro ubicado en Internet, envía el paquete a un router de borde de la red privada. Entonces, el router de borde realiza la traducción, NAT, traduciendo la dirección privada interna de un host a una dirección pública, enrutable y externa. El router mantiene una tabla con las traducciones que ha realizado, para poder deshacerlas cuando el paquete respuesta llega.

Existen distintos tipos de NAT. Nosotros vamos a empezar con GNU/Linux, utilizando una técnica llamada PAT, que permite asociar una dirección pública a varias direcciones privadas, asignándole a cada host un número de puerto. De momento con esto es suficiente para poder empezar a aplicar NAT.

Dado el siguiente contexto, el siguiente sería un script que configuraría GNU/Linux como un router de borde, aplicando NAT sobre la interfaz de red conectada a la red pública 85.12.33.0/25:

#!/bin/sh iptables -F iptables -X iptables -Z iptables -t nat -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Una de las consecuencias, es que el router al otro extremo del enlace público no necesitará conocer las direcciones que utilizamos en nuestra red privada. Pero aunque NAT tiene muchas ventajas, no es la panacea, ya que introduce dificultades en muchas comunicaciones. Por eso, hay que utilizarlo esencialmente en routers de borde.

Práctica 3. Configura dos máquinas virtuales según se expresa en la imagen de abajo. Aplica NAT sobre la interfaz eth0 de Ubuntu Server. Comprueba que puedes salir a Internet desde el cliente. Empleando Wireshark en el sistema host, comprueba que como dirección de origen de los paquetes enviados por el cliente figura la dirección del router GNU/Linux.

Para asignar una dirección válida a la interfaz eth0 del router GNU/Linux, utilizaremos dhcp. 1- Entrega el script iptables con el nombre Act3-iptables.sh. 2- Haz una demostración en vivo donde se pueda verificar el correcto funcionamiento del script.

Práctica 4. Partiendo de la topología del ejercicio 2, configura NAT, de modo que sean enmascarados tanto los equipos en la LAN, como los equipos en la DMZ.

Además, configura una redirección del puerto 80 del firewall hacia el puerto 80 del servidor web.

Una vez que compruebes que puedes salir a Internet, comprueba ahora lo siguiente:

  • Comprueba en el host de la red 10.0.0.0/24 que los paquetes que recibe de la red 172.16.0.0/24 no están enmascarando la IP de origen. Para ello, puedes ejecutar el comando siguiente: tcpdump port 80.
  • Comprueba que los paquetes que salen al esterior, están enmascarando la IP de origen. Para ello, puedes utilizar Wireshark en el sistema operativo Host, escuchando los paquetes que salen por la interfaz de red física, que son enviados por el router GNU/Linux virtual.
  • Comprueba que puedes abrir el servidor web de la DMZ desde el sitema operativo host.

Una vez que tengas lista la topología, deberás hacer dos cosas: 1- Entrega el script iptables con el nombre Act4-iptables.sh. 2- Haz una demostración en vivo donde se pueda verificar el correcto funcionamiento del script.

Cisco ACL

Las listas de control de acceso permiten filtrar el tráfico en un router, de modo que podemos permitir o bloquear un paquete en base a un cierto criterio. Vamos a usar estos apuntes:Cisco ACLs

Las actividades están aquí: Ejercicios de Cisco ACLs.. Entrega el archivo de packet tracer en un archivo llamado Act1-acl.pkt

NAT

Ahora vamos a ver NAT en routers Cisco. Aquí están los apuntes: NAT

Aquí teneis unas cuantas actividades resueltas: Ejercicios.