Está en la página 1de 8

IG20. Redes.

Ingeniería Técnica en Informática de Gestión

Práctica 5. Filtrado de Paquetes (Firewalls)

Objetivos
− Introducir conceptos básicos sobre filtrado de paquetes.
− Configuración de filtros para puertos TCP y direcciones IP.
− Configuración de condiciones de entrada y salida de paquetes.

Duración estimada:
2 horas

Material y herramientas
− Grupos de 3 ó más ordenadores. Cada ordenador con dos tarjetas de red (eth0 y eth1).
− Un cable normal por cada ordenador para conectar la tarjeta eth0 a la red pública.
− Cables cruzados o concentradores.
− Utilidades1:
o ifconfig configuración IP de los dispositivos de acceso a red.
o route configuración de rutas de comunicación.
o ping test de envío-recepción de paquetes prueba a IP destino.
o iptables utilidad para configuración de reglas de filtrado de paquetes.

Descripción
El mecanismo para filtrar paquetes consiste en una lista de reglas de aceptación o denegación
de paquetes. Estas reglas definen de forma explícita los paquetes que se permiten pasar en cada
sentido a través de la interfaz de red. Las listas de reglas que definen los paquetes que pueden
entrar, salir o re-enviarse se denominan cadenas, debido a que se compara un paquete con cada
regla de la lista, partiendo de la primera regla de la lista, una a una, de forma encadenada hasta
encontrar una regla que se cumple o se llega al final de la lista. Si no se encuentra ninguna regla
en la lista para un determinado paquete, se le aplica la directiva predeterminada al paquete. El
filtrado de paquetes se utiliza para poder definir un firewall o “cortafuegos”, con el fin de aislar
de forma selectiva ciertas redes o subredes y filtrar los mensajes indicados en las reglas que se
definen para cada una de las cadenas de entrada, salida o re-envío.
Hay que distinguir entre rechazar (reject) o descartar (drop) un paquete. Cuando se
rechaza un paquete, el paquete se descarta y se devuelve un mensaje de error del protocolo
ICMP2 (Internet Control Message Protocol) al remitente. Cuando se descarta el paquete, éste se
elimina sin ningún tipo de notificación al remitente. Descartar es normalmente la mejor opción,
por diversos motivos. Primero, enviar una respuesta de error siempre carga el tráfico en la red.
En segundo lugar, cuando se descarta un paquete, es porque probablemente se considera

1 Para cualquier información adicional más exhaustiva de las utilidades, consultar manuales de ayuda
indicados para la resolución de las prácticas. En cualquier caso, consultar la página manual del sistema
para cada utilidad mediante la orden man.
2Como ejemplo, los mensajes que envía la orden ping pertenecen a este protocolo.

http://www.unoweb-s.uji.es/IG20 1
perjudicial; en ese caso, cualquier respuesta a un paquete no deseado ofrece información
potencial al remitente para posibles ataques a nuestro sistema.
El filtrado de paquetes entrantes se puede realizar fundamentalmente en función de:
− Su dirección origen remota.
− Su dirección destino local.
− Su puerto de origen remoto.
− Su puerto destino local.
− El protocolo del paquete.
− El estado de la conexión TCP entrante. En general, es aconsejable no permitir
petición de conexiones (indicador SYN activado en paquete entrante y ACK
desactivado), sino solo respuestas de servidores a los que se ha realizado una
conexión como clientes (indicador ACK activado en paquetes entrantes y SYN
desactivado), es decir, para conexiones que ha iniciado el propio ordenador con
otros servidores remotos.
El filtrado de paquetes salientes se puede realizar en función de:
− Su dirección origen local.
− Su dirección destino remota.
− Su puerto origen local.
− Su puerto destino remoto.
− Según el estado de la conexión TCP saliente.
Por tanto, el proceso de filtrado de paquetes afecta a la capa de red (direcciones IP) y a la
capa de transporte (puertos TCP y UDP), por lo que cualquier cambio en la configuración a
estos niveles, afectará a todos los procesos en la capa de aplicación destinatarios o fuente de los
paquetes filtrados.
En el contenido de la práctica se verá una introducción a la utilidad iptables, la cual sirve
para indicar las reglas de filtrado que luego aplica el núcleo del sistema operativo Linux. Esta
herramienta tiene un funcionamiento muy completo y flexible. En la práctica únicamente se
presentan los aspectos más básicos.
La Figura 1 muestra las posibles rutas que sigue un paquete que entra a una determinada
entidad de red desde el exterior, por medio de un interfaz de red, así como el camino de salida,
bien sea por un paquete generado por un proceso local interno, o bien por decisiones de
encaminamiento para re-envío de paquetes a otro destino.

Servicios de red
Los servicios que puede ofrecer (servidor) o solicitar (cliente) una entidad en la red, se realizan
a través de conexiones desde o hacia puertos TCP o UDP (protocolos de la capa de transporte),
efectuadas desde o hacia una cierta dirección IP. Por tanto, los servicios de red se pueden
restringir, independientemente de que estén internamente configurados, por medio del filtrado
de puertos y de direcciones IP.
De todo el rango de puertos TCP y UDP posibles (16 bits: 0-65535), existen ciertos
números de puertos asignados a servicios estándar. Algunos de estos servicios son:

Servicio Puertos TCP/UDP


www TCP 80
ssh TCP 22

Para más información sobre los puertos en los que se ofrecen servicios estándar se puede
consultar el fichero /etc/services .

http://www.unoweb-s.uji.es/IG20 2
La herramienta iptables3
Con la herramienta iptables se puede configurar las reglas de filtrado de paquetes para las
cadenas de entrada, salida y re-envío. Para poder realizar las operaciones básicas que se
necesitan en esta práctica, veamos algunos de los aspectos de la utilización de esta herramienta.
Con iptables es posible utilizar varias tablas que actúan en diferentes momentos al procesar
paquetes en nuestro ordenador (ver Figura 1). Estas tablas pueden contener diferentes cadenas
de filtrado las cuales también se aplican en diferentes situaciones. En la práctica vamos a
utilizar la tabla filter (es la tabla por defecto). Una introducción al funcionamiento de iptables
puede concontrarse en:
http://www.jollycom.ca/iptables-tutorial/iptables-tutorial.html

Listar las reglas existentes en las cadenas


Para ver el contenido de las reglas de una cierta cadena
iptables –L nombre_cadena

donde nombre_cadena puede tener el valor de INPUT, OUTPUT o FORWARD


Asimismo, para listar el contenido de todas las cadenas
iptables –L

Borrar las reglas existentes en las cadenas


Para borrar las reglas existentes en todas las cadenas se utilizará la siguiente opción
iptables –F

Si solo se quiere borrar el contenido de una cadena (INPUT, OUTPUT, FORWARD)


iptables –F nombre_cadena

Cuando se vacía y borra las reglas de una cadena, se eliminan todas las reglas de la lista pero no
se borra la política por defecto.

Establecimiento de directiva por defecto


Para establecer la política por defecto en una cadena, es decir, aceptar, descartar o rechazar por
defecto cualquier paquete, se utilizan las siguientes opciones
iptables –P nombre_cadena directiva_defecto

donde directiva_defecto puede tener el valor ACCEPT, DROP

3
En versiones anteriores al núcleo de Linux 2.4 se utilizaba ipchains.

http://www.unoweb-s.uji.es/IG20 3
Figura 1 Ruta que puede seguir un paquete relacionado con las
tablas pre-definidas en iptables.

Añadir/borrar una regla a una cadena


Cuando se añade una regla a una cadena, ésta se sitúa al final de la lista de reglas, por lo que
hay que tener en cuenta el orden en el que se van insertando las reglas. Tal como se comentó al
principio de esta práctica, cuando llega un paquete a una cadena, se comprueba la primera regla
de la lista de dicha cadena, si ésta se cumple, se realiza la acción correspondiente a esa regla y
ya no se comprueban más, si no se cumple, se pasa a comprobar la siguiente de la lista. Si,

http://www.unoweb-s.uji.es/IG20 4
eventualmente, no se cumple ninguna regla de la lista de una cadena, al paquete en cuestión se
le aplicará la directiva por defecto que se haya definido para dicha cadena.
Veamos un ejemplo de la utilización de iptables para añadir una regla a una cadena,
/usr/sbin/iptables –A INPUT –j DROP –p all –s 150.128.0.0/16 –i eth0 –d
0.0.0.0/0

La opción –A INPUT hace referencia a añadir una regla en la cadena de entrada. La opción
–j DROP representa la acción a realizar en caso de que se cumpla esta regla, en este caso,
descartar el paquete. La opción –p hace referencia al protocolo sobre el que actúa la regla, en
este caso para todos los protocolos (all). –s hace referencia a la dirección IP origen del paquete,
en este caso, para todas las direcciones de la subred 150.128.0.0 de clase B (/16 denota el
número de bits a 1 de la máscara de red). La opción –i eth0 indica que esta regla es para los
paquetes relacionados con el interfaz de red eth0, y finalmente, -d 0.0.0.0/0 es la dirección
IP destino del paquete, en este caso, dicha constante nula significa cualquier dirección.
Para borrar una regla de la lista de una cadena, habrá que ejecutar la orden iptables
con las mismas opciones y valores que cuando se añadió pero sustituyendo la opción –A por –D.
También se puede borrar una regla aludiendo a su orden dentro de la lista, como por ejemplo:
/usr/sbin/iptables –D INPUT 1

que borrará la primera regla de la lista de la cadena de entrada.

Filtrado por direcciones IP


Para filtrar paquetes de acuerdo a sus direcciones IP fuente y/o destino, sin tener en cuenta el
protocolo o los puertos TCP/UDP, se puede ver mediante el siguiente ejemplo:
/usr/sbin/iptables –A INPUT –j DROP –p all –s x.x.x.x/x –d 0.0.0.0/0

La anterior regla denegará todos los paquetes (de cualquier protocolo) que procedan de la
dirección IP indicada (x.x.x.x/x) y que tengan cualquier IP destino.
Para especificar una cierta IP o rango de IPs específicos de destino, habría que sustituir la
constante 0.0.0.0/0 por la IP o rango de IPs correspondiente. Por ejemplo, si solo se desea
denegar los paquetes cuya dirección IP origen sea 192.168.1.1, y cuyo destino sea la IP
192.168.1.53, entonces utilizaríamos las siguientes opciones:
/usr/sbin/iptables –A INPUT –j DROP –p all –s 192.168.1.1 –d 192.168.1.53

Filtrado por interfaz


Si se desea aplicar, por ejemplo las regla anteriores solo a un cierto interfaz, digamos el eth0,
entonces se aplicaría el ejemplo anterior de la siguiente manera:
/usr/sbin/iptables –A INPUT –j DROP –p all –s x.x.x.x/x –i eth0 –d 0.0.0.0/0

Donde la opción –i indicará la interfaz a la que se aplica la regla, es decir, a los paquetes que
estén relacionados con esa interfaz.

Filtrado por puerto


Para filtrar un paquete relacionado con un cierto puerto TCP o UDP, en ese caso hay que
especificar el correspondiente tipo de puerto en el protocolo (opción –p), y especificar el
número de puerto con la opción --dport (destination port), por ejemplo:
/usr/sbin/iptables –A INPUT –j DROP –p tcp –s 0.0.0.0/0 –d y.y.y.y/y --dport
80

http://www.unoweb-s.uji.es/IG20 5
La anterior regla en la cadena de entrada, denegará los paquetes que provengan de
cualquier dirección IP y que tengan como destino el puerto TCP-80 con la dirección IP destino
que se exprese en y.y.y.y/y
Para los servicios estándar, se puede denotar los números de puertos por su
correspondiente etiqueta que aparece en el fichero /etc/services, por ejemplo, el puerto TCP-
80 corresponde al servicio de www, por lo que la regla anterior se podría también expresar como
/usr/sbin/iptables –A INPUT –j DROP –p tcp –s 0.0.0.0/0 –d y.y.y.y/y
-–dport www

Si en lugar de un solo puerto, se desea expresar un cierto rango de puertos, se puede


utilizar de la siguiente forma:
/usr/sbin/iptables –A INPUT –j DROP –p tcp –s x.x.x.x/x –d y.y.y.y/y
–-dport 10:100

La regla anterior se añadirá al final de la lista de la cadena de entrada y denegará todos


los paquetes que tenga la dirección IP origen expresada en x.x.x.x/x cuyo destino sea la
dirección IP local expresada como y.y.y.y/y en relación con los puertos TCP del 10 al 100
inclusive.

Ejercicios

1. Filtrado de paquetes entrantes en un ordenador conectado a la red.


Desde el punto de vista de la seguridad, los paquetes entrantes son los que más peligro pueden
traer en caso de ataques a nuestro ordenador. Para poder llevar una política de seguridad en las
conexiones y los mensajes que se aceptan, es necesario gestionar correctamente la cadena de
entrada de nuestro ordenador.
Como regla general aconsejada para los paquetes entrantes, se debe establecer una
política para descartar cualquier paquete entrante por defecto, y establecer después una serie de
reglas concretas por las que se determinará qué paquetes entrantes se aceptarán. Esta política es
más segura pero también puede generar más problemas: los ajustes sobre los paquetes
aceptados deberán ser más precisos.
Recuérdese que el orden en que se introducen las reglas es relevante. En esta práctica no
se va a establecer ningún filtrado sobre la cadena de salida, por lo que se establecerá una
política por defecto de aceptación de todos los paquetes de salida.
Por cuestiones prácticas, se recomienda poner todas las órdenes para configurar la lista de
reglas en las cadenas editando un fichero de texto con todas las órdenes a modo de script. Cada
vez que se desee configurar las cadenas con las reglas establecidas, ejecútese dicho script.
En este ejercicio, se propone configurar los filtros de la cadena de entrada para no permitir
la entrada de ningún paquete a nuestro ordenador, excepto aquellos que nos interesen. Para ello
se va a configurar la cadena de entrada del interfaz eth0, el cual está conectado a la red exterior,
Internet. Como ejemplo para realizar una configuración de filtrado de paquetes de ciertos tipos
de petición de conexiones y servicios desde el exterior, realizar la siguiente secuencia de
acciones, insertando en la cadena de entrada las reglas de filtrado correspondientes:
a) Vaciar las reglas de todas las cadenas (entrada, salida y re-envío).
b) Establecer las siguientes políticas por defecto:
− Aceptar en la cadena de salida.
− Aceptar en la cadena de re-envío.
− Descartar en la cadena de entrada.

http://www.unoweb-s.uji.es/IG20 6
c) Comprobar que no entra ningún paquete desde el exterior a vuestro ordenador, por
ejemplo, intentando hacer un ping desde otro ordenador conectado a la red.
d) Habilitar acceso al servicio de ping (protocolo ICMP) progresivamente a los siguientes
ordenadores, comprobando que realmente realiza el filtrado en cada paso tal como se
espera:
− al IP de un cierto ordenador,
− a la subred a la que pertenece vuestro ordenador,
− a todos.
e) Habilitar el acceso al servicio de web (/etc/rc.d/apache start ) para que otros
4

ordenadores puedan conectarse a y consultar alguna página web del ordenador (hay
una página web por defecto cuando se arranca apache). Habilitar el acceso al servicio
web progresivamente a los siguientes ordenadores, comprobando que realmente realiza
el filtrado en cada paso tal como se espera (comprobar directorio/página índice en
/srv/www/htdocs/index.html):
− al IP de un cierto ordenador,
− a la subred a la que pertenece vuestro ordenador,
− a todos.
f) Habilitar el acceso al servicio de ssh para que otros ordenadores puedan conectarse a su
ordenador e iniciar una sesión ssh con un usuario de su ordenador, por ejemplo
entrando como usuario root. Habilitar el acceso al servicio de ssh progresivamente a
los siguientes ordenadores, comprobando que realmente realiza el filtrado en cada paso
tal como se espera:
− al IP de un cierto ordenador,
− a la subred a la que pertenece vuestro ordenador,
− a todos.

2. Configuración de un sencillo firewall.

Figura 2. Interconexión de dos redes físicas diferentes a través de un encaminador/firewall.

Para configurar un sencillo firewall entre una red externa y una red local conectada a la red
externa a través de una puerta (encaminador), que actuará como firewall, consideraremos el
montaje de la Figura 2, que corresponde al de la Figura 1 de la Práctica 3. Configurar este
montaje según se describe en el Ejercicio 1 de la Práctica 3.

4
En la configuración de los ordenadores del laboratorio la tarjeta eth0 debe estar configurada.

http://www.unoweb-s.uji.es/IG20 7
Para configurar el ordenador que hace el papel de encaminador como un firewall entre la
red “Externa” y nuestra red “Local”, protegiendo nuestra red “Local” de posibles ataques, se
tendrán que configurar las cadenas de entrada, salida y re-envío del encaminador.
Cuando un ordenador de la red “Externa” (que podría representar, por ejemplo a Internet)
quiere conectarse o enviar un paquete a un ordenador de nuestra red “Local”, los paquetes que
envía dicho ordenador atraviesan nuestro encaminador, quien, cuando llega un paquete por la
interfaz de red conectada a la red “Externa”, digamos la eth0, lo re-envía a la red “Local”.
Configurando las reglas de filtrado correspondientes en el encaminador, harán que éste
funcione con un firewall entre la red “Externa” y nuestra red “Local”.
Con este propósito, y de acuerdo al camino que atraviesa un paquete a la entrada para
poder ser re-enviado (ver Figura 1), configuraremos las cadenas de entrada y re-envío del
encaminador. La cadena de salida la configuraremos de forma que permitamos la salida de
cualquier paquete, por los mismos motivos del ejercicio anterior.
Para ver cómo configurar un sencillo firewall que limite el acceso a la red “Local” desde la
“Externa”, permitiendo sólo el acceso a un servidor web y a uno de ssh que tuviéramos en la
red “Local”, realizar la siguiente secuencia de acciones:
Vaciar las reglas de todas las cadenas (entrada, salida y re-envío).
g) Establecer las siguientes políticas por defecto:
− Aceptar en la cadena de salida.
− Descartar en la cadena de re-envío.
− Descartar en la cadena de entrada.
h) Comprobar que no entra ningún paquete desde la red “Externa” a un ordenador de la
red “Local”, incluido el encaminador, por ejemplo, intentando hacer un ping desde un
ordenador de la red “Externa” a otro ordenador de la red “Local”.
i) Habilitar el acceso al servicio de ping (protocolo ICMP) progresivamente a los
siguientes ordenadores de la red “Externa”, para que puedan realizar un ping a
cualquier ordenador de la red “Local”, comprobando que realmente realiza el filtrado en
cada paso tal como se espera:
− al IP de un cierto ordenador de la red “Externa”,
− a todos.
j) Elegir un ordenador de la red “Local” para que haga de servidor web al exterior.
Habilitar el acceso al servicio de web para que los ordenadores de la red “Externa”, de
forma que puedan conectarse al servidor web de la red “Local” progresivamente a los
siguientes ordenadores, comprobando que realmente realiza el filtrado en cada paso tal
como se espera:
− al IP de un cierto ordenador de la red “Externa”,
− a todos.
k) Elegir un ordenador de la red “Local” para que haga de servidor de ssh al exterior.
Habilitar el acceso al servicio de ssh para que los ordenadores de la red “Externa”
puedan conectarse al servidor ssh e iniciar una sesión con un usuario de ese ordenador,
por ejemplo entrando como usuario root. Habilitar el acceso al servicio de ssh
progresivamente a los siguientes ordenadores, comprobando que realmente realiza el
filtrado en cada paso tal como se espera:
− al IP de un cierto ordenador de la red “Externa”,
− a todos.

http://www.unoweb-s.uji.es/IG20 8

También podría gustarte