5.1. Introduccin
Un cortafuegos o firewall es un sistema o grupo de sistemas utilizados para
separar una mquina o una subred (zona protegida) del resto de la red (zona de
riesgo), estableciendo una poltica de control de acceso entre ambos entornos. Es
decir, el firewall acta como punto de conexin segura entre dos o ms sistemas
informticos. Un firewall puede ser un router, un PC o una red completa.
Los principales elementos que pueden conformar un firewall, entiendo el firewall como
un sistema, son el filtro de paquetes y los proxys. En esta prctica nos centraremos en el
primer elemento, el filtrado de paquetes.
El filtrado de paquetes es un proceso que consiste en denegar o permitir el flujo de
informacin entre la red interna que deseamos proteger y el resto o la red externa. Este
filtrado se hace de acuerdo a unas reglas predefinidas, y segn stas, se examinan las
cabeceras de los paquetes segn van pasando a travs de l, decidiendo la suerte
del paquete completo (aceptar, descartar, etc). El filtrado tambin se conoce como
screening, y a los dispositivos que lo implementan se les denomina chokes.
Los firewalls de filtrado de paquetes actan sobre la capa de red y la de transporte de
la pila TCP/IP. Es decir, trabajan sobre la informacin de las cabeceras de los paquetes
IP, sin llegar a analizar los datos. Por ejemplo, un firewall no puede evitar que un usuario
de la red sobre la que acta mande un email desde su equipo con otra cuenta de
correo diferente de la de su trabajo. Lo que si podra es evitar que dicho equipo
5.1.1.
Stateless vs Stateful
5.1.2.
A partir del ncleo Linux 2.3.15 y en toda la serie 2.4 y posteriores se utiliza el mdulo
NetFilter junto con la utilidad iptables, que permite establecer las reglas de filtrado. El
entorno Netfilter permite el filtrado de paquetes (ya sea con o sin estado), la traslacin
de direcciones [y puertos] (NA[P]T) y otras manipulaciones sobre el datagrama IP
(packet mangling).
5.1.3.
NAT Enmascaramiento
Source NAT (SNAT): alteracin del origen del datagrama, realizado despus
del encaminamiento del mismo y antes de su reenvo (el enmascaramiento es
una forma de SNAT).
Filtrado de paquetes.
Traduccin de direcciones y puertos NAT.
Manipulaciones sobre datagramas IP (packet MANGLING).
Mantener registros de logs.
Seguimiento de conexiones (Conntrack)
5.2.1.
Arquitectura de Netfilter
Cadenas (Chains)
Las cadenas son agrupaciones de reglas que se deben aplicar a los paquetes segn
momentos concretos del flujo de los paquetes a su paso por el sistema Netfilter.
Indican CUANDO actuar sobre los paquetes. Las posibles cadenas que nos
encontramos son:
-
PRE
ROUTING
G
Decisin de
encaminamiento
SI
POST
ROUTING
G
FORWARD
NO
INPUT
OUTPUT
Procesamiento
local
Cuando se recibe un paquete por cualquier interfaz se lleva a cabo, en primer lugar,
una suma de comprobacin (Checksum). Si es correcta, los paquetes transitan hacia
la evaluacin de la cadena PREROUTING (en caso de existir), cuyas reglas se
encargarn de determinar el tratamiento que deber de darse al paquete en funcin
de la direccin destino:
Si el paquete va dirigido a la propia mquina, ste es enviado a la cadena
INPUT, que en caso de superarse ser procesado localmente.
Si la direccin destino del paquete es distinta de la local, y est activada la
funcin de reenvo, se evala la cadena FORWARD. Si se superan las reglas de
esta cadena se reenva el paquete (si la funcin de reenvo no estaba
habilitada, el paquete se descarta DROP).
Tablas
Cada tabla es usada para indicar al sistema de filtros sobre el tipo de procesamiento
que se debe aplicar a los paquetes, es decir, QU hacer con los paquetes. Una tabla
maneja una cierta cantidad de reglas internas que se organizan en cadenas. Existen
cuatro tablas por defecto: filter, mangle, nat y raw.
PRE
ROUTING
G
Decisin de
encaminamiento
SI
NO
DNAT
MANGLE
RAW
POST
ROUTING
G
FORWARD
FILTER
MANGLE
INPUT
SNAT
MANGLE
OUTPUT
FILTER
MANGLE
Procesamiento
local
Fig. p5.2: Esquema del procesamiento de Netfilter. Tablas
FILTER
MANGLE
NAT
RAW
Es importante ver que cada tabla tiene unas cadenas por defecto, que no se pueden
eliminar. A las cadenas por defecto de una tabla podemos unir cadenas creadas por
nosotros mismos para un mejor funcionamiento del filtrado o el enrutamiento.
Veamos algunos ejemplos del recorrido que pueden realizar los paquetes en funcin
de su destino.
PRE
ROUTING
G
Decisin de
encaminamiento
SI
NO
DNAT
MANGLE
POST
ROUTING
G
FORWARD
FILTER
MANGLE
INPUT
SNAT
MANGLE
OUTPUT
FILTER
MANGLE
FILTER
MANGLE
NAT
Procesamiento
local
Tabla
Cadena
Mangle
PREROUTING
Nat
PREROUTING
Mangle
Filter
INPUT
INPUT
Notas
Datagrama recibido por una interface
Permite alterar algn parmetro de la cabecera (ej: TOS (Type Of
Service))
Permite realizar DNAT
Decisin de encaminamiento:
Si dir.destino <> dir.local Salta a Forward (reenvo)
Si no, contina
Alteraciones antes de procesamiento
Filtrado del trfico entrante
Entrega al proceso local
PRE
ROUTING
G
Decisin de
encaminamiento
SI
NO
DNAT
MANGLE
POST
ROUTING
G
FORWARD
FILTER
MANGLE
INPUT
SNAT
MANGLE
OUTPUT
FILTER
MANGLE
FILTER
MANGLE
Procesamiento
local
Tabla
Cadena
Mangle
Nat
Filter
Mangle
Nat
OUTPUT
OUTPUT
OUTPUT
POSTROUTING
POSTROUTING
Notas
Datagrama recibido por una interface
Permite alterar algn parmetro de la cabecera
Traslacin de direcciones
Filtrado del trfico saliente
Alteraciones una vez entregado el datagrama
Permite realizar SNAT
Entrega al interface
Tab. p5.2: Recorrido del paquete saliente con origen local
PRE
ROUTING
G
Decisin de
encaminamiento
SI
NO
DNAT
MANGLE
POST
ROUTING
G
FORWARD
FILTER
MANGLE
INPUT
SNAT
MANGLE
OUTPUT
FILTER
MANGLE
FILTER
MANGLE
Procesamiento
local
Tabla
Cadena
Mangle
Nat
PREROUTING
PREROUTING
Mangle
Filter
Mangle
Nat
FORWARD
FORWARD
POSTROUTING
POSTROUTING
Notas
Entrega por el proceso local
Permite alterar algn parmetro de la cabecera
Permite realizar DNAT
Decisin de encaminamiento:
Si dir.destino <> dir.local Contina
Si no, salta a INPUT
Alteraciones antes del reenvo
Filtrado del trfico reenviado
Alteraciones despus del reenvo
Permite realizar SNAT
Entrega al interfaz
Tab. p5.3: Recorrido de paquetes reenviados
5.2.2.
Sintaxis
Un comando bsico de iptables est compuesto por 7 partes, cada una de los cuales
indican:
-
NOTA: Cuando no se indica la tabla a usar, por defecto se usa la tabla filter. Un
comando iptables tiene la siguiente forma:
5.2.2.2.
Comandos
-I i
-R i
5.2.2.3.
Reglas
10
A. Condiciones - operadores
Una condicin (o coincidencia match) se da como cierta cuando un paquete
cumple con los criterios indicados dentro de alguna de las cadenas. Alguno de estos
criterios pueden basarse en funcin de algn parmetro como, por ejemplo, el tipo de
protocolo (TCP, IP, ICMP,), algn puerto en particular (22), un usuario propietario del
paquete (OWNER), el estado de la transaccin (INVALID), o la combinacin de todos
ellos.
Las condiciones se construyen usando una serie de operadores que determinan qu es
lo que el paquete debe cumplir. Algunos de los ms importantes son los siguientes:
Operador
-p [protocolo]
-s [ip/mascara destino]
Descripcin
Indica sobre qu protocolo ha de realizarse la
comprobacin. Algunos valores pueden ser tcp, udp, icmp
o podemos referirnos a todos si se omite. Tambin puede
ser el nmero equivalente a un protocolo, indicados en
/etc/protocols.
Ejemplo: -p tcp,udp
Indica la direccin IP del origen del paquete. Puede
indicarse tambin de la forma IP/mscara para decirle a
Netfilter que se trata de un grupo de hosts.
Si no se especifica sta condicin se tomar como origen
todas las direcciones de difusin.
-d [ip/mascara destino]
-i [interfaz]
-o [interfaz]
-f
-m
Ejemplo: -i eth0
-i eth+
Indica la interfaz de salida de la transaccin para una
regla en particular (Nota: slo usada por OUTPUT,
FORWARD y POSTROUTING en las tablas nat y mangle).
Ejemplo: -o eth0
-o eth+
Aplicacin de la regla slo a los paquetes fragmentados.
Uso de mdulos para extender funcionalidades.
Tab. p5.5: Operadores Iptables
11
B. Condiciones - extensiones
Adems de estos operadores existen otros que junto a stos extienden sus
funcionalidades concretando aun ms la condicin que se desea determinar. A estos
operadores se denominan extensiones.
Operador
Extensin
--sport
Descripcin
Puerto origen. Solo para tcp y udp.
--dport
-p [protocolo]
--syn
--icmp-type
mac
-m [mdulo]
12
state
limit
Ejemplo:
-m state --state NEW -j DROP
Mdulo LIMIT: Establece un nmero
lmite de veces que una regla puede
ser aceptada en un determinado
periodo de tiempo.
-m limit --limit <nmero>[/tiempo]
Ejemplo: -m limit --limit 5/s
El tiempo puede ser:
second, min, hour, day
Tambin se puede especificar un
nmero determinado de paquetes a
recibir:
multiport
recent
Ejemplo:
-p tcp -m multiport --dports 53,80,442
Mdulo RECENT: Permite monitorizar
conexiones recientes y limitarlas.
Se aaden IPs a una lista con la que se
comparan posteriores intentos de
conexin.
Evita ataques de fuerza bruta y DoS.
Algunos operadores que extienden a
recent son:
--set: Crea una nueva lista de Ips
--name: Renombra una lista (por
defecto es la lista DEFAULT).
--update: Comprueba si las Ips ya
existen en una lista.
13
Otras acciones:
DENY
REDIRECT
RETURN
MIRROR
En principio, solo se corresponde una accin por cada condicin cumplida.
5.2.2.4.
Otras opciones
14
5.2.3.
15
16
#iptables D INPUT 1
En este ejercicio hemos visto como, mediante el parmetro i, podemos especificar un
dispositivo de red (puedes ejecutar ifconfig para ver la lista de dispositivos de red y su
configuracin actual), y con j podemos especificar qu hacer con el trfico que
coincida con esa regla.
El dispositivo "lo" no es en realidad una tarjeta de red sino la representacin de las
comunicaciones internas mediante la direccin de loopback 127.0.0.1. En el ejemplo
hemos determinado que todo el trfico que se reciba (INPUT) por el dispositivo lo tiene
que descartarse (DROP). Pero para que muchas reglas sean tiles no basta poder
especificar el dispositivo sino que es necesario poder afinar indicando qu protocolo
y/o puertos definen una regla en particular.
Ejercicio 4:
a. Comprueba que se puede acceder mediante SSH a un equipo que tenga este
servicio levantado y establece una conexin utilizando tu usuario y contrasea.
#ssh usuario@host_remoto
b. Abre otra terminal en tu ordenador, y en ella teclea:
#iptables A INPUT p tcp --sport 22 j DROP
c. Ahora vuelve a la ventana de tu conexin SSH y teclea lo que sea. Qu
sucede? Por qu?
d. Vuelve a la segunda Terminal y teclea:
#iptables D INPUT 1
Qu sucede? Aun sigues conectado por SSH al host remoto?
En este ejemplo hemos creado una regla que no especifica el dispositivo de red sino el
protocolo (TCP) y tambin el puerto origen de los segmentos (--sport 22). En una
conexin SSH los paquetes que vienen del servidor SSH tienen como puerto origen el 22
que es el puerto en el que se ofrece el servicio SSH.
De modo anlogo es posible aplicar esta misma estrategia para bloquear el acceso a
cualquier otro servicio. No obstante, las reglas se pueden aplicar tanto al trfico
entrante como al saliente, o bien a ambos. En el ejercicio anterior se bloqueaba el
trfico SSH entrante (INPUT). Si has tardado ms de un minuto entre el paso 2 y el paso
4 del ejercicio es posible que la conexin SSH se haya interrumpido. En ese caso lo ms
conveniente es que lo vuelvas a repetir intentando ser algo ms rpido (lo que
permitir que la conexin no se interrumpa y obtengas un resultado diferente).
Tambin es posible crear reglas que atiendan a las direcciones de los paquetes.
Ejercicio 5:
a. Abre un navegador y carga la pgina www.dte.us.es
b. Ahora en una ventana de Terminal teclea:
#iptables A OUTPUT p tcp d www.dte.us.es --dport 80 j DROP
c.
17
Registro de sucesos
La funcionalidad de IPtables no slo permite especificar reglas para descartar
paquetes (como hemos visto en varios de los ejemplos). Con una poltica por defecto
de descartar paquetes (DROP) las reglas deberan ser especificadas para aceptar
determinados tipos de trfico. Pero adems de estas funciones las reglas pueden
producir acciones de registro que se anotarn en el registro de sucesos del sistema (en
el archivo /var/log/messages).
Para crear reglas que generen una entrada en el registro cuando coincida con la
regla de un paquete se usar la opcin j LOG. Estas reglas no determinan si el
paquete se acepta o se rechaza, por que se aplicar la accin que corresponda
como si esta regla de registro no existiera.
El inters de poder registrar determinados sucesos asociados con el trfico de red
depende de las situaciones que se estn considerando. Puede tener un efecto
informativo para el administrador sobre multitud de datos que pudieran estar
registrados en otros lugares o no. Por ejemplo, si deseamos conocer cuntas personas
se conectan cada da a nuestro servidor FTP es muy posible que el programa servidor
disponga de un detallado archivo de registro con esa informacin, pero si se trata de
un servidor muy elemental podra no generar tipo alguno de informacin de registro.
Vamos a suponer que nos encontramos en este segundo caso y que nos piden
determinar cuntos clientes se conectan cada da a un servidor.
Lo primero que necesitamos es determinar que condicin consideramos como vlida
para establecer que ha llegado un nuevo cliente. La ms sencilla (aunque no
necesariamente la ms correcta) es considerar que cada nueva conexin al puerto 21
de nuestro servidor es un nuevo cliente.
Ejercicio 6:
a. Crea la regla que realizar el registro:
#iptables A INPUT p tcp --dport 22 j LOG
b. Ahora vamos a acceder al servidor FTP local. Teclea: #ftp localhost Qu
ocurre?
c. Es posible que te hayas dado cuenta de que en tu equipo no hay servidor FTP.
No importa. Ahora teclea dmesg y analiza la ltima lnea que aparece. Qu
ves? Sabras interpretarla?
Con la regla del apartado 6.a se produce el registro de cada paquete que llega a tu
equipo y va destinado al servidor FTP (incluso aunque no tengas servidor FTP). Sin
embargo existe un serio problema que no resulta aparente de momento, gracias a
que no dispones de servidor FTP local. El problema reside en que esa regla de registro
se cumple para cada segmento FTP recibido de cada conexin. Eso quiere decir que
un mismo cliente puede generar miles de entradas en una misma conexin. Llenar un
18
archivo de registro con muchos datos poco significativos es una muy mala idea. Para
realizar un registro en condiciones se necesita que slo se registre una vez a cada
cliente. Una forma de hacer esto es considerar slo el segmento del comienzo de la
conexin, que por tanto tiene el flag SYN activo.
Ejercicio 7:
a. Comencemos anulando la regla anterior.
b. Ahora crearemos una regla de registro que realmente si detecta las peticiones
de conexin al puerto 21. Para ello teclearemos:
#iptables A INPUT p tcp --dport --tcp-flags ALL SYN j LOG
c.
Puede parecer que hemos repetido lo mismo que el ejercicio 6 pero no es as. Ahora la
regla de registro presta atencin al campo de "flags" de la cabecera TCP, se analizan
todos los bits de la cabecera (por eso el valor ALL) y se registran todos los segmentos
recibidos que tengan el bit SYN activado.
19
all de nuestro sistema, puede ser interesante para que distintos flujos de trfico
simultneo se puedan tratar adecuadamente segn nuestra eleccin.
Para el ltimo ejemplo vamos a escoger algo ms sencillo: el campo de tiempo de
vida (TTL) de la cabecera IP, con el que se especifica el nmero mximo de saltos
(entre routers) permitidos para alcanzar un destino.
El valor utilizado por nuestro ordenador para este campo viene prefijado en la
configuracin del sistema operativo y, aunque se puede modificar la mayora de
administradores no tienen razones para hacerlo. Sin embargo, no todos los sistemas
operativos utilizan el mismo valor, y si nos fijamos, es posible que veamos
computadores con distintos valores iniciales para el TTL (podemos usar la orden ping
para determinarlo).
Supongamos que deseamos modificar el valor del campo TTL para cierto tipo de
trfico (no para todos nuestros paquetes). Es posible crear una regla con IPtables que
realice ese cambio selectivo.
Ejercicio 9:
a. Cmo sabes el valor TTL para llegar a un cierto destino?
#traceroute destino
b. Aade la siguiente regla:
#iptables t mangle A POSTROUTING j TTL --ttl-set 5
c.
Con ese valor tan slo se pueden realizar cuatro saltos antes de que el datagrama sea
descartado. Esto limita enormemente el nmero de redes que se pueden visitar. Un
valor TTL=1 impedira atravesar un nico router y solo permitira la comunicacin directa
con otros ordenadores en la misma subred.
d. Comprueba si puedes acceder a www.google.com
20
5.4. Ejercicios
Junto con la regla anterior, enmascara todo el trfico interno para compartir la
conexin a Internet
21
Nota: La opcin --tcp-flags requiere dos argumentos. El primero, los flags a examinar, y
el segundo, los flags que deben estar en 1. En este caso, IPTables examina todos los
flags, pero obliga que SYN y ACK deban estar en 1 para realizar la accin asociada.
22
mv2
Red de mquinas
virtuales
mv1
Gateway de red
de mquinas
virtuales
+
Firewall
10.1.15.199
192.168.0.0/24
192.168.0.1
Red DTE
mv3
10.1.12.0/22
INTERNET
192.168.0.3
10.1.15.200
Mquina fsica
23