Raúl Sánchez Sánchez raul@um.es Atica Miércoles 22 de Septiembre de 2004
Introducción Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Proxy Aplicación o un dispositivo hardware. Hace de intermediario entre los usuarios de una red local e Internet. Recibe peticiones de usuarios y las redirige a Internet. Normalmente es un servidor de cache web. Existen proxies para muchos protocolos. No es transparente al usuario (casi siempre).
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Cortafuegos Dispositivos/sistemas que permiten controlar el trafico entre dos o mas sistemas. Pueden ser: Router Equipos bastion Sistemas operativos modificados Normalmente es una mezcla de varios
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Cortafuegos (II) Combinacion de elementos software y hardware situado entre dos redes. Permite restringir el acceso y las comunicaciones entre ambas segun criterios configurables. Trata de asegurar que se cumplen las politicas de seguridad de la organizacion.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Bastion Host Equipo situado en una zona accesible desde el exterior de la organizacion y protegido para permitir acceso a los recursos de este de una forma segura. Puede o no ser un firewall. No suele tener modificaciones importantes en el S.O.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Screening router Router con capacidad de filtrado de paquetes. Implementado en todos los routers modernos.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Filtrado de paquetes (I) Bloquear todos los paquetes dirigidos a servicios no autorizados. Bloquear paquetes que conengan opciones dentro de los datagramas ip como el source routing. Permitir conexiones a determinadas maquinas. Permitir conexiones hacia el exterior.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Filtrado de paquetes (II) Preferible en router. Necesita pocos recursos hardware? Facil de añadir nuevos protocolos y aplicaciones. Dificil de manejar autenticacion y autorizacion. Linux: ifwadm, ipchains, iptables.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Filtrado de paquetes (ventajas) Barato: Pc viejo con linux haciendo de router. Mejor opcion para redes sencillas.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Filtrado de paquetes (desventajas) No se puede hacer un registro pormenorizado de lo que pasa en la conexion. Solo si se establece o no. No hay proteccion contra el contenido de las conexiones. Las reglas se complican cuando las redes se hacen grandes. Prueba solo con ensayo.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Cortafuegos de aplicacion Surgen para protocolos TCP interactivos. Aparecen las pasarelas de aplicacion. Requieren la configuracion de los programas cliente. Linux: Firewall ToolKiT (antiguo).
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Cortafuegos de aplicacion (ventajas) Control total sobre la conexion. Se pueden interpretar los datos de la conexion. Mayor facilidad a la hora de emplear sistemas de autenticacion fuertes ( carnet inteligente...) Logs mucho mas precisos.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Cortafuegos de aplicacion (desventajas) Configuracion de los clientes. Pasarela para cada protocolo. No se adapta bien al trafico multimedia ni udp.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Dual Homed Gateway Sin screening router. El bastion host se situa entre las dos redes. Toda la informacion pasa a traves de el. No permite el trafico directo.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Screened Host Gateway El bastion host se situa en la red privada. El screening router le redirige el trafico.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos Screened Subnet Se crea una red aislada utilizando dos routers. Todos los hosts pueden acceder a la red intermedia. No la pueden atravesar directamente. Bastion host en la red intermedia.
Conceptos basicos Filtrado de paquetes Cortafuegos de aplicacion Configuraciones de cortafuegos DMZ Red separada del resto con servicios para internet. No hay trafico directo entre internet y la red privada.
Se recibe el datagrama de IP Se examina el datagrama IP entrante para determinar si el destino es esta máquina. Si el datagrama es para esta máquina, se procesa localmente.
(II) Si no está destinado a esta máquina se realiza una búsqueda en la tabla de rutas y se reenvía por la interfaz adecuada o se elimina si no encuentra una ruta adecuada. Los datagramas procedentes de procesos locales se tratan de igual manera: Se encaminan por la interfaz adecuada si existe una ruta para ellos o se elimina si no existe.
Filtrado en Linux El cortafuegos de IP del núcleo de Linux es capaz de aplicar filtrados en varias etapas de este proceso. Se pueden filtrar los datagramas de IP que: Entren en su máquina Reenvios a traves de la maquina Paquetes Salientes
Cadenas de filtrado INPUT OUTPUT FORWARD PREROUTING POSTROTING
Cadenas de filtrado
iptables Un script de iptables se compone de multiples reglas. Los datagramas deben de ir probando regla tras regla y paran cuando concuerdan con una de ellas. Normalmente es un script bash que carga las reglas en el arranque del sistema. Será bueno crear otro script para borrar todas las reglas de filtrado.
Primer ejemplo Un script básico de iptables sería así: firewall.sh #!/bin/sh # Primer script de iptables del curso de linux # Políticas por defecto /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT # Vaciando las tablas /sbin/iptables -F /sbin/iptables -F INPUT /sbin/iptables -F OUTPUT /sbin/iptables -F FORWARD /sbin/iptables -X /sbin/iptables -F -t nat
iptables (sintaxis) -A Añade una regla al final. -I Añade una regla al principio. -D Borra. -R Reemplaza. -L Muestra reglas. -F Borra reglas. -P Poĺıtica por defecto.
iptables (primer ejercicio) crear script que no deje pasar ningún tipo de tráfico hacia y desde nuestra máquina de manera que parezca que no tenemos ningun servicio disponible.
Segundo ejemplo El script de iptables sería así: firewall.sh #!/bin/sh # Primer script de iptables del curso de linux # Políticas por defecto /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP # Vaciando las tablas /sbin/iptables -F /sbin/iptables -F INPUT /sbin/iptables -F OUTPUT /sbin/iptables -F FORWARD /sbin/iptables -X /sbin/iptables -F -t nat
Segundo ejemplo Qué problema nos encontramos? Ni siquiera podemos acceder a los servicios localmente. Por supuesto tampoco podemos enviar ningún tipo de tráfico.
iptables (más parámetros) Parámetros básicos: -p [!]protocolo -s [!]dirección_origen[/máscara] -d [!]dirección_destino[/máscara] -j blanco -i [!]nombre_de_interfaz_entrada -o [!]nombre_de_interfaz_salida [!] -f
iptables (Accediendo a los servicios locales) Igual que antes. Añadimos las siguientes ĺıneas. firewall.sh # loopback rules /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT
iptables (más opciones. Extensiones de tcp) [- -sport [!] [puerto[:puerto]]] [- -dport [!] [puerto[:puerto]]] [- -tcp-flags [!] máscara comp] [[!] - -syn] [- -tcp-flags SYN,RST,ACK SYN]
iptables (más opciones. Extensiones de udp) [ -sport [!] [port[:port]]] [-dport [!] [port[:port]]]
iptables (más opciones. Extensiones de icmp y mac) ICMP [- -icmp-type [!] nombre_de_tipo] echo-request, echo-reply, source-quench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable, y port-unreachable. MAC [- -mac-source [!] address]
iptables (Un ejemplo más elaborado) firewall.sh #!/bin/sh # Políticas por defecto /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP # Vaciando las tablas /sbin/iptables -F /sbin/iptables -F INPUT /sbin/iptables -F OUTPUT /sbin/iptables -F FORWARD /sbin/iptables -X /sbin/iptables -F -t nat # loopback /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT # www /sbin/iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -o eth0 --sport 80 -j ACCEPT
Destination NAT (DNAT) Alteramos la dirección de destino del primer paquete: esto es, cambiamos la dirección a donde se dirige la conexión. Antes del encaminamiento, cuando el paquete entra por el cable. El port forwarding, el balanceo de carga y el proxy transparente son formas de DNAT.
Destination NAT (Ejemplos) Cambia la dirección de destino por 5.6.7.8 iptables -t nat -A PREROUTING -i eth1 -j 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 Cambia la dirección de destino del tráfico web por 5.6.7.8, puerto 8080. iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 \ -j DNAT --to 5.6.7.8:8080 Redirige los paquetes locales que van a 1.2.3.4 hacia el dispositivo loopback. iptables -t nat -A OUTPUT -d 1.2.3.4 -j DNAT --to 127.0.0.1
Source NAT (SNAT) Source NAT es cuando alteramos el origen del primer paquete: esto 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.
Source NAT (Ejemplos) Cambiar la dirección de origen por 1.2.3.4 iptables -t nat -A POSTROUTING -o 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 Cambiar la dirección de origen por 1.2.3.4, puertos 1-1023 iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
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 follón cuando la conexión vuelva a la normalidad con una IP diferente. Enmascarar todo lo que salga por ppp0: iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Ejercicio de Examen Crear script que enmascare a todos los clientes de mi lan la salida a internet. Ademas, tenemos un servidor web dentro de la lan y queremos darle acceso a internet. Subred de la lan: 192.168.2.0/24 Ip de router: 192.168.2.1 (lan) 155.54.1.60 (internet) Ip apache: 192.168.2.24
Redirección Es exactamente lo mismo que hacer DNAT, pero con la dirección de la interfaz de entrada. Envía el tráfico que entra dirigido al puerto 80 (web) a nuestro proxy squid (transparente) iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \ -j REDIRECT --to-port 3128
Resolución examen (I) #!/bin/sh # eth0 Red Local # eth1 Internet # Activamos forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # Vaciamos las cadenas de iptables iptables --flush iptables -t nat --flush iptables -t mangle --flush iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD # Politicas por defecto iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Acceeso a tutiplein para localhost iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
Resolución examen (II) # Permitimos la entrada por ssh desde el servidor iptables -A INPUT -s 192.168.2.1 -p tcp --dport 1600 -j ACCEPT iptables -A OUTPUT -d 192.168.2.1 -p tcp --sport 1600 -j ACCEPT # Enmascaramos NAT iptables -A POSTROUTING -t nat -o eth1 -s 192.168.2.0/24 -d 0/0 -j MASQUERADE # Permitimos conexiones establecidas iptables -A FORWARD -s 0/0 -o eth0 -d 192.168.2.0/24 -m state --state ESTABLISHED -j ACCEPT # Permitimos la navegacion por internet a la red local iptables -A FORWARD -s 192.168.2.0/24 -d 0/0 -j ACCEPT
Resolución examen (y III) # Reedirecciones de los servicios de internet iptables -A FORWARD -p tcp --dport 80 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 80 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 # Reedirecciones de los servicios de internet iptables -A FORWARD -p tcp --dport 25 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 25 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 iptables -A FORWARD -p tcp --dport 110 -d 192.168.2.24 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 110 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 iptables -A FORWARD -p tcp --dport 21 -d 192.168.2.24 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 21 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 iptables -A FORWARD -p tcp --dport 22 -d 192.168.2.24 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 22 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 iptables -A FORWARD -p tcp --dport 53 -d 192.168.2.24 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 53 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24 iptables -A FORWARD -p udp --dport 53 -d 192.168.2.24 -j ACCEPT iptables -t nat -A PREROUTING -p udp --dport 53 -d 155.54.1.60 -j DNAT --to-destination 192.168.2.24
Logging De alguna manera debemos de registrar lo que está ocurriendo usaremos -j LOG Crearemos una cadena para esto
Creando una cadena que rechaza y registra /sbin/iptables -N DUMP > /dev/null /sbin/iptables -F DUMP /sbin/iptables -A DUMP -p tcp -j LOG /sbin/iptables -A DUMP -p udp -j LOG /sbin/iptables -A DUMP -p tcp -j REJECT --reject-with tcp-reset /sbin/iptables -A DUMP -p udp -j REJECT --reject-with icmp-port-unreachable /sbin/iptables -A DUMP -j DROP
Logging (Mandando hacia la cadena nueva) # Rechazamos y registramos direcciones reservadas que # llegan por la interfaz externa /sbin/iptables -A INPUT -i eth1 -s 0.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 1.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 2.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 5.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 7.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 23.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 27.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 31.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 36.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 39.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 41.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 42.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 58.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 59.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 60.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 127.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 169.254.0.0/16 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 197.0.0.0/8 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 224.0.0.0/3 -j DUMP /sbin/iptables -A INPUT -i eth1 -s 240.0.0.0/8 -j DUMP