¿Cómo funciona Packet Filter (PF)

Transcripción

¿Cómo funciona Packet Filter (PF)
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
¿Cómo funciona Packet Filter (PF) ?
Autor: Fernando Quintero (a.k.a nonroot)
Correo electrónico: [email protected]
Fecha de creación : 22/03/09
Ultima modificación: 04/04/09
Índice de contenido
1.Licencia (BSD)..................................................................................................................................1
2.Introducción.......................................................................................................................................2
3.Filtrado de paquetes...........................................................................................................................2
3.1.¿Porque se usan los filtros de paquetes?....................................................................................3
3.2.¿Como se usan los filtros de paquetes?.....................................................................................3
3.3.¿Que criterios puedo usar para filtrar?.......................................................................................3
4.¿Que es Packet Filter (PF)?...............................................................................................................3
4.1.PF integrado...............................................................................................................................4
4.2.PF Vs. Netfilter..........................................................................................................................4
5.¿Como funciona Packet Filter?.........................................................................................................5
5.1.Reglas de acceso........................................................................................................................5
5.2.Reglas de acceso “quick”...........................................................................................................7
5.3.Estructura (sintaxis) de las reglas de filtrado.............................................................................7
a.Ejemplo1..............................................................................................................................8
b.Ejemplo2..............................................................................................................................8
c.Ejemplo3..............................................................................................................................8
5.4.El asunto de las interfaces..........................................................................................................8
a.Una (1) sola interfaz de red..................................................................................................8
b.Dos (2) interfaces de red....................................................................................................10
5.5.Notas finales............................................................................................................................12
6.Enlaces relacionados.......................................................................................................................12
1. Licencia (BSD)
Copyright (c) 2009, Fernando Quintero,
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions
are met:
•
•
•
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the OpenBSD Colombia nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
________________________________________________________________________________
1.Licencia (BSD)
1/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
THIS
SOFTWARE
IS
PROVIDED
BY
THE
COPYRIGHT
HOLDERS
AND
CONTRIBUTORS
"AS
IS"
AND
ANY
EXPRESS
OR
IMPLIED
WARRANTIES,
INCLUDING,
BUT
NOT
LIMITED
TO,
THE
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
FOR
A
PARTICULAR
PURPOSE
ARE
DISCLAIMED.
IN
NO
EVENT
SHALL
THE
COPYRIGHT
OWNER
OR
CONTRIBUTORS
BE
LIABLE
FOR
ANY
DIRECT,
INDIRECT,
INCIDENTAL,
SPECIAL,
EXEMPLARY,
OR
CONSEQUENTIAL
DAMAGES
(INCLUDING,
BUT
NOT
LIMITED
TO,
PROCUREMENT
OF
SUBSTITUTE
GOODS
OR
SERVICES;
LOSS
OF
USE,
DATA,
OR
PROFITS;
OR
BUSINESS
INTERRUPTION)
HOWEVER
CAUSED
AND
ON
ANY
THEORY
OF
LIABILITY,
WHETHER
IN
CONTRACT,
STRICT
LIABILITY,
OR
TORT
(INCLUDING
NEGLIGENCE
OR
OTHERWISE)
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2. Introducción
Este documento esta creado con el objetivo de aclarar el funcionamiento interno de Packet Filter sin
entrar en los detalles técnicos del código o la teoría de redes como tal.
Vi la necesidad de crear el documento porque encuentro en la red artículos que hablan de como
crear “firewalls” con Packet Filter (PF) y algunos ejemplos de funcionamiento y sin embargo
cuando alguien que apenas empieza en el mundo de PF los lee, sigue quedando con las mismas
dudas,
¿cómo se interpretan las reglas de filtrado? ,
¿en que interfaces o direcciones (entrada, salida) las aplico?.
Espero que este documento les sea de utilidad y como siempre cualquier duda o comentario lo
pueden hacer por medio del sitio web: www.openbsdcolombia.org o usando la lista de correo que
tenemos en google groups1.
Este documento es recomendado para todas las personas que ya usen OpenBSD (aunque sea en
forma básica) y quieran aprender a configurar firewalls.
3. Filtrado de paquetes
Es muy común escuchar que el administrador de la red o en algunos foros técnicos se lance la
expresión “filtrar paquetes”, la mayoría de las veces se esta haciendo referencia a la posibilidad que
tiene un sistema (software y/o hardware) de validar la información que pasa a través del mismo.
Esta validación se hace verificando el contenido de los paquetes o sus encabezados, teniendo en
cuenta ciertas políticas definidas por un agente controlador.
En un contexto diferente supongase que varias personas quieren entrar a una discoteca, pero alguno
de ellos no lleva la vestimenta adecuada, en este caso el guarda de seguridad (el filtro de paquetes)
tras una corta revisión, le dirá: “Que pena con Usted Señor, no puede ingresar”.
Las ordenes que tiene el guarda de seguridad no son inventadas por él (el filtro de paquetes
requiere de alguien que lo programe), alguien mas le dio las ordenes que debe cumplir al pie de la
letra (confianza en el filtro de paquetes), alguien como su jefe directo (el agente controlador, el
administrador de la red, usted mismo).
Las ordenes del jefe asignadas al guarda de seguridad se dan después de haber realizado un análisis
del perfil de usuarios que quieren en la discoteca (se analiza y se definen políticas de acceso) y se
pueden sustentar en diferentes cosas, como por ejemplo el sexo, la apariencia, el sector donde este
ubicado la discoteca, etc. A esto en el contexto de redes se le llama reglas de acceso, listas de
control o reglas del firewall.
1 http://groups.google.com.co/group/OpenBSD-Colombia/
________________________________________________________________________________
3.Filtrado de paquetes
2/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
3.1. ¿Porque se usan los filtros de paquetes?
El filtrado de paquetes existe porque desafortunadamente Internet y las redes externas en general no
son seguras y siempre habrá tráfico mal intencionado tratando de acceder a los recursos de nuestra
organización, ¿Se imagina un mundo en donde todas las personas puedan entrar a todas las
estaciones de trabajo que quisieran, a todos los servidores y centros de información?, ¿un mundo sin
restricciones donde toda la información se clasifica como pública y/o disponible?. Como no
vivimos en ese mundo y se debe garantizar que el acceso a los recursos informáticos se de solo para
las personas con las que trabajamos, hay que implantar mecanismos que permitan observar el
tráfico de red, clasificarlo y tomar acciones basados en ciertas reglas o políticas definidas.
La mayoría de sistemas operativos traen firewalls integrados (en el kernel) lo que los hace mas
rápidos, mas funcionales y mas estables. Muy pocos sistemas operativos son la excepción, algunos
por ejemplo venden la funcionalidad de firewall como un producto independiente y cobran licencias
por ello (¿Quien dijo *********?).
Gracias a los desarrolladores de OpenBSD tenemos un firewall robusto, funcional y seguro,
licenciado bajo un hermosa licencia BSD ;)
3.2. ¿Como se usan los filtros de paquetes?
El uso de los filtros de paquetes se hace por medio de aplicaciones de software o hardware que
tienen una programación adecuada para realizar este tipo de tareas. La forma de definirles las
políticas varia según el sistema implantado. Algunos tienen interfaces de usuario (frontends - GUI)
que permiten configurarlos rápidamente, otros aceptan scripts en texto plano los cuales se pueden
programar desde una terminal en consola remota. En Packet Filter por lo general se trabaja editando
un archivo de texto (pf.conf) desde la consola. Aunque también es posible descargar una
distribución2 basada en OpenBSD que trae un frontend en un entorno web, apenas para los amantes
de las aplicaciones OAMP (OpenBSD, Apache, MySQL, PHP).
3.3. ¿Que criterios puedo usar para filtrar?
Se pueden filtrar paquetes si verificamos :
●
Direcciones IP
●
Direcciones MAC
●
Puertos origen o destino
●
Protocolos (encabezados + payloads)
●
Comportamientos, por ejemplo: la velocidad de entrada de paquetes.
Por otro lado se filtran paquetes cuando se tiene en cuenta el contenidos de los mismos, por ejemplo
cuando usamos proxies que pueden analizar la capa 7 según el modelo OSI.
Hay que aclarar que hasta el momento PF no ofrece capacidades de proxy, (solamente se trabaja a
nivel 2, 3 y 4 según el modelo OSI3)
4. ¿Que es Packet Filter (PF)?
Tomado de la F.A.Q oficial de PF4:
2 http://www.comixwall.org/
3 http://es.wikipedia.org/wiki/Modelo_OSI
4 http://www.openbsd.org/faq/pf/index.html
________________________________________________________________________________
4.¿Que es Packet Filter (PF)?
3/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
Packet Filter (desde ahora PF) es un sistema de filtrado para OpenBSD, que soporta TCP/IP y
permite hacer NAT (Network Address Translation). PF ademas es capaz de normalizar,
acondicionar tráfico y proveer un control de ancho de banda para las comunicaciones.
PF viene integrado en el Core del sistema operativo OpenBSD desde la versión 3.0 (la versión
actual es la 4.5) y no es necesario descargarlo como una aplicación externa, no hace falta decir que
Packet Filter es software libre, por lo tanto el concepto de LICENCIAS por usuario, por conexión,
por color, raza o condición social o por lo que sea, NO EXISTE.
PF fue desarrollado inicialmente por Daniel Hartmeier5 y actualmente es mantenido y soportado por
él y el resto del equipo OpenBSD.
Para mas información puede leer las páginas del manual de PF: pf(4)6.
4.1. PF integrado
Cuando se dice que PF viene integrado en OpenBSD significa que hay un código que hace parte del
núcleo BSD que tiene las capacidades de filtrado, redireccionamiento, normalización y todas las
bondades ofrece este filtro. Se hace de este modo porque una vez compilado dentro del kernel
funciona a mayor velocidad, proporcionando un mejor desempeño para las tareas que debe cumplir.
Si lo comparamos con sistemas Linux, el PF hará lo que hace el Netfilter7.
Fig 1. PF (sistema de filtrado) defiende a PUFFY (OpenBSD) de los enemigos :)8
4.2. PF Vs. Netfilter
Comparar estos dos sistemas no viene al caso, solo quiero hacer unas precisiones sobre los términos
que usamos a diario cuando se habla de firewalls Linux o firewalls BSD.
5
6
7
8
http://www.benzedrine.cx/dhartmei.html
http://www.openbsd.org/cgi-bin/man.cgi?query=pf&sektion=4&manpath=OpenBSD+4.4
http://www.netfilter.org/
Ilustración tomada de: http://www.openbsd.org/lyrics.html
________________________________________________________________________________
4.¿Que es Packet Filter (PF)?
4/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
Hacer referencia a netfilter en Linux, es pensar en el componente interno que tiene el kernel linux y
las capacidades del mismo para hacer filtrado de paquetes. Su equivalente en el mundo BSD es el
PF. Aunque si bien existen otros proyectos para integrar componentes de filtrado dentro de los
kernels BSD, Packet filter sigue siendo el mejor en este campo, es por esto que proyectos como
NetBSD9, DRAGONFLY10 y FreeBSD11 lo portaron a sus códigos base desde hace mucho tiempo.
Cuando se habla de iptables, se hace referencia a una herramienta en userland (modo usuario), a la
que se le permite entrar al netfilter de linux y modificar las listas de control de acceso según las
políticas diseñadas.
En los sistemas BSD existe su equivalente llamado pfctl12, que no es mas que otra herramienta en
userland que puede acceder al PF del kernel BSD y hacer las modificaciones de control de acceso
que requiera el administrador (por ejemplo).
En resumen:
Sistema de filtro de paquetes
Herramientas en userland para gestionarlo
NETFILTER (Linux)
iptables
PF (BSD)
pfctl
5. ¿Como funciona Packet Filter?
Antes de proceder a diseñar las políticas de acceso para el sistema de filtrado es necesario entender
como “piensa” o como se va a comportar.
Para lograr entender la metodologia de filtrado hay que enfocarse en dos cosas:
1. Las reglas de acceso
2. La interpretación de entrada (in) y salida (out) de las interfaces
5.1. Reglas de acceso
“Las politicas de acceso” para el firewall se definen basadas en reglas de acceso que se hayan
definido para los usuarios, y según los recursos (puertos, protocolos, estaciones, personal, etc). Un
firewall en OpenBSD con PF será un archivo en texto plano que contiene una lista de reglas que se
evaluaran según la siguiente lógica:
REGLA-1
REGLA-2
REGLA-3
...
REGLA-N
9
10
11
12
http://www.netbsd.org/
http://www.dragonflybsd.org/
http://www.freebsd.org/
http://www.openbsd.org/cgibin/man.cgi?query=pfctl&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
________________________________________________________________________________
5.¿Como funciona Packet Filter?
5/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
Primero se leerá la REGLA-1 esta regla esta compuesta por una sintaxis que define unos criterios y
una acción, como se verá mas adelante, lo importante es que la regla se evalúa y si el paquete
cumple con esos criterios (hace match, coincide) se ejecuta una acción que generalmente puede ser
ACEPTAR o DENEGAR. En PF la acción no se ejecuta inmediatamente, en cambio se espera a
terminar la evaluación de todas las reglas, y al finalizar se ejecuta la acción de la última regla
coincidente. Esto significa que una regla puede ser modificada varias veces en el camino, lo
importante es tener en cuenta cual será la acción final que va a ejecutar.
Tenga en cuenta que en el funcionamiento normal, las reglas se leen secuencialmente una por una
hasta llegar a la última (REGLA-N).
Con un ejemplo: Las siguientes reglas pueden parecer raras o mal construidas, pero se hacen así a
propósito para ejemplificar el funcionamiento de PF.
REGLA-1: PERMITA EL ACCESO A 192.168.20.1
REGLA-2: PERMITA EL ACCESO A LA RED 192.168.20.0/24
REGLA-3: DENIEGUE EL ACCESO A 192.168.20.2
REGLA-4: DENIEGUE EL ACCESO A 192.168.20.1
REGLA-5: PERMITA EL ACCESO A LA RED 192.168.20.0/24 SIEMPRE Y CUANDO SEA UNA CONEXIÓN TCP
En lenguaje PF quedarían:
REGLA-1: pass in on rl0 from 192.168.20.1 to any
REGLA-2: pass in on rl0 from 192.168.20.0/24 to any
REGLA-3: block in on rl0 from 192.168.20.2 to any
REGLA-4: block in on rl0 from 192.168.20.1 to any
REGLA-5: pass in on rl0 proto tcp from 192.168.20.0/24 to any
Se asume rl0 como la interfaz donde se implantará la regla
¿Qué sucederá si al sistema intenta entrar una maquina cuya IP es 192.168.20.1 ?. ¿ Tendrá el
acceso permitido o denegado?
En este caso las reglas 1, 2, 4 y 5 coinciden con esa conexión, por lo tanto la acción se va a
modificar varias veces. Esta pregunta se responde cuando preguntamos por el protocolo usado en la
conexión:
a. Suponiendo que es UDP:
En este caso la conexión de la maquina 192.168.20.1 es DENEGADA puesto que la 1ra regla da
acceso, pero la 4ta lo quita.
b. Suponiendo que es TCP:
En este caso la conexión de la maquina 192.168.20.1 es ACEPTADA, ya que la regla 5 habilita el
paso de toda la red donde se encuentra esta maquina, esto porque la 5ta regla es la última en
ejecutarse y esta acción seria la definitiva.
________________________________________________________________________________
5.¿Como funciona Packet Filter?
6/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
De esta forma se ejemplifica como funciona Packet Filter, siempre tendrá en cuenta la última regla
evaluada, a menos que se use una palabra reservada para crear las reglas como se lee a
continuación.
5.2. Reglas de acceso “quick”
La palabra quick modifica toda la lógica de PF, puesto que al encontrar una regla QUICK ejecutará
inmediatamente la acción que tenga configurada la regla, sin esperar a leer las reglas siguientes.
Retomando el ejemplo anterior usando reglas QUICK:
REGLA-QUICK-1: PERMITA EL ACCESO A 192.168.20.1
REGLA-QUICK-2: PERMITA EL ACCESO A LA RED 192.168.20.0/24
REGLA-QUICK-3: DENIEGUE EL ACCESO A 192.168.20.2
REGLA-QUICK-4: DENIEGUE EL ACCESO A 192.168.20.1
REGLA-QUICK-5: PERMITA EL ACCESO A LA RED 192.168.20.0/24 SIEMPRE Y CUANDO SEA UNA CONEXIÓN TCP
Estas reglas en lenguaje PF son las siguientes:
REGLA-1: pass in quick on rl0 from 192.168.20.1 to any
REGLA-2: pass in quick on rl0 from 192.168.20.0/24 to any
REGLA-3: block in quick on rl0 from 192.168.20.2 to any
REGLA-4: block in quick on rl0 from 192.168.20.1 to any
REGLA-5: pass in quick on rl0 proto tcp from 192.168.20.0/24 to any
Se asume rl0 como la interfaz donde se implantará la regla
¿Qué sucederá si intenta entrar una maquina cuya IP es 192.168.20.1 ?. ¿Tendrá el acceso permitido
o denegado ?
En este caso las reglas 1, 2, 4 y 5 coinciden con la conexión, sin embargo como las reglas son quick,
PF ejecutará la acción de la primera que encuentre.
En este caso para ambos protocolos TCP o UDP la acción será PERMITIR
(acción de la REGLA-QUICK-1)
Con este sencillo ejemplo se demuestra como se afecta el control de acceso planteando en el
firewall con reglas quick.
5.3. Estructura (sintaxis) de las reglas de filtrado
La estructura de las reglas se puede encontrar detallada en la F.A.Q, a continuación un breve
resumen:
pass|block [in|out] [quick] [on interface] [proto protocolo] [from fuente] [to destino] [port puerto]
Como se puede ver es algo muy simple, solamente se selecciona la información opcional de los corchetes y
________________________________________________________________________________
5.¿Como funciona Packet Filter?
7/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
se crean las reglas. Mas información en: http://www.openbsd.org/faq/pf/filter.html
Tenga en cuenta que la sintaxis para las reglas NAT y de REDIRECCIONAMIENTO (port forwarding) son
diferentes, por favor consulte este sitio web: http://www.openbsd.org/faq/pf/nat.html para mas detalle.
A continuación algunos ejemplos de reglas de filtrado.
a. Ejemplo1
Bloquee el acceso al servidor web desde Internet en la interfaz externa fxp0.
block in quick on fxp0 proto tcp from any to (fxp0) port 80
b. Ejemplo2
Permita que la maquina 192.168.20.90 haga ping a la maquina en la interfaz interna rl0.
pass in quick on rl0 proto icmp from 192.168.20.90 to (rl0)
c. Ejemplo3
Deniegue el acceso de la red 192.168.20.0/24 a mi interfaz bge0.
block in quick on bge0 from 192.168.20.0/24 to any
5.4. El asunto de las interfaces
La sintaxis de PF es bastante simple, quizás lo único complicado es entender como se comporta PF
en las interfaces, cuando se tiene una única interfaz, cuando son mas de una, cuando se manejan
estados (PF es un firewall stateful) o no.
A continuación ejemplos de la lógica de PF cuando tenemos una sola interfaz de red y cuando
tenemos 2 interfaces. De ahí en adelante la funcionará para cualquier cantidad de interfaces de red
que tenga el sistema.
a. Una (1) sola interfaz de red
Fig 2. OpenBSD conectado a Internet
En un escenario de usuario, habrá una maquina usando OpenBSD conectada a una red local o a
Internet, desde el punto de vista técnico se tendrá la posibilidad de implantar políticas de acceso en
la interfaz de red fxp0 que es la que conecta a la red.
Por favor haga un esfuerzo por imaginarse una tarjeta de red, el recuadro gris representa una tarjeta
física de red y las flechas representan la entrada y salida de paquetes de la misma, (1) y (2) ocurren
en diferentes momentos y van a ocurrir en orden, primero un paquete entra para poder salir.
________________________________________________________________________________
5.¿Como funciona Packet Filter?
8/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
Fig 3. Esquema básico de PF habilitado en una tarjeta de red
El funcionamiento entonces, es el siguiente:
Cualquier paquete que intente entrar a una interfaz de red pasara por (1) y se le aplicaran las reglas
si están definidas como reglas de entrada (IN), después de esto el paquete intentará salir de la
interfaz y tendrá que pasar por (2), en este punto se le aplicaran las reglas de salida (OUT).
Tenga en cuenta que este diagrama no representa conexiones especificas y tampoco hace referencia
a un punto de origen y destino, por lo tanto el paquete puede venir desde el propio firewall o puede
venir desde Internet, en cualquiera de los casos se aplica la misma lógica. El paquete tendrá que
pasar dos pruebas antes de llegar a su destino.
Según este diagrama, ¿donde se deberían aplicar las reglas de control?
La respuesta es en AMBOS lados de la interfaz. A menos que decida crear una lógica de bloqueo,
como por ejemplo enfocarse en el bloqueo de entrada y siempre permitir la salida o viceversa. Es
claro que si se trabaja con reglas de entrada y salida será mas compleja la definición de las políticas
y existirá una mayor probabilidad de error , pero se trata de aprender, ¿no?
NOTA:
No serviría de nada si dejara pasar el paquete en (1), pero no le permito la salida en (2) o viceversa.
Supongase que la interfaz de red del diagrama tiene la IP 192.168.0.1, y se quiere hacer un ping
desde la red que tiene directamente conectada.
¿Cuales serian las reglas para que PF permitiera el acceso de esos paquetes ping?
Según la lógica aprendida deberíamos habilitar el ping de entrada en (1) y permitir respuestas en (2)
a ese mismo ping.
En pocas palabras será algo así:
REGLA (1):
Permita el paso de los paquetes que entren por fxp0 que sean ping y que vengan desde la red conectada.
REGLA (2):
Permita el paso de los paquetes que quieran salir por fxp0 que sean ping y vayan hacia la red conectada.
En la sintaxis de packet filter sera algo así:
REGLA (1):
________________________________________________________________________________
5.¿Como funciona Packet Filter?
9/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
pass
in
on
fxp0
proto
icmp
from
192.168.0.0/24
to
any
no
state
REGLA (2):
pass
out
on
fxp0
proto
icmp
from
any
to
192.168.0.0/24
no
state
Ambas reglas son necesarias porque tienen al final “no state”, eso significa que el PF no tendrá en
cuenta los estados de las conexiones para tomar decisiones. Lo hago de esta forma para ejemplificar
las reglas, de como piensa el packet filter en el momento de tomar una decisión y ejecutar una
acción.
¿Que pasara si una de las dos reglas no existe?
La respuesta es que el paquete se quedaría atrapado en la interfaz y nunca saldría, puesto que el
filtro de paquetes lo elimina al no coincidir con ninguna de las reglas definidas.
El mismo pensamiento se aplica para cualquier otro tipo de conexión TCP, UDP, ICMP, etc.
¿Como solucionamos el ejercicio del ping con una sola regla?
Packet Filter desde la versión de OpenBSD 4.1 adiciona por defecto a todas las reglas el manejo de
estados, esto nos permite solo preocuparnos por la regla de entrada en (1) y PF hará el resto por
nosotros. Se trabaja de esta forma porque se asume que el primer paquete validado que pasa por la
interfaz es confiable y por lo tanto ya no es necesario verificar el resto de los paquetes de esa misma
conexión, a esto se le conoce como filtrado basado en el estado de la conexión (firewalls statefull).
El problema se solucionará con una sola regla:
REGLA 1 (puede observar que se elimina el “no state”, se asume “keep state” by default) :
pass
in
on
fxp0
proto
icmp
from
192.168.0.0/24
to
any
Siempre y cuando no se definan reglas de filtrado que digan lo contrario, el PF tomará las reglas
como PASS by default (ACEPTAR por omisión), esto significa que todas las conexiones estarán
permitidas hasta que se configure algo diferente.
b. Dos (2) interfaces de red
Fig 4. OpenBSD como firewall de red
Este escenario es el mas común cuando se quiere que el sistema OpenBSD se comporte como
firewall y gateway de salida a la vez. Si se plantea el ejercicio desde lo técnico habrán dos
interfaces de red: rl0, fxp0 desde las cuales se podrán aplicar políticas a los paquetes que pasan por
allí.
________________________________________________________________________________
5.¿Como funciona Packet Filter?
10/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
Fig 5. Esquema avanzado de PF aplicado a dos interfaces
Cuando hay 2 interfaces de red, PF aplicará reglas en 4 puntos como aparece en la Fig 5.
Si un paquete entra por fxp0 y no esta dirigido a la maquina local (el firewall) entonces pasara a una
segunda interfaz rl0 donde tendrá que entrar y salir nuevamente.
Si un paquete entra por rl0 y no esta dirigido a la maquina local (el firewall) entonces pasara a una
segunda interfaz fxp0 donde tendrá que entrar y salir nuevamente.
Supongase que fxp0 tiene la IP 192.168.0.1 y que rl0 tiene la IP 172.16.0.1, ¿cómo se afronta el
ejercicio de los paquetes ping?
El ping en este caso va desde la LAN hacia INTERNET (otra red), por lo tanto el paquete
inicialmente entrará por rl0, pasara a fxp0 y luego volverá con una respuesta.
¿Donde aplicamos los filtros?
En palabras será algo así:
REGLA (1):
Permita el paso de los paquetes que entren por rl0 que sean ping y que vengan desde la red interna.
REGLA (2):
Permita el paso de los paquetes que quieran salir por rl0 que sean ping y vayan hacia Internet.
REGLA (3):
Permita el paso de los paquetes que entren por fxp0 que sean ping y vengan de Internet.
REGLA (4):
Permita el paso de los paquetes que quieran salir por fxp0 que sean ping y vayan para cualquier lado.
En la sintaxis de packet filter será algo así:
REGLA (1) :
pass
in
on
rl0
proto
icmp
from
192.168.0.0/24
to
any
no
state
REGLA (2) :
pass
out
on
rl0
proto
icmp
from
any
to
any
no
state
REGLA (3) :
pass
in
on
fxp0
proto
icmp
from
any
to
any
no
state
REGLA (4) :
pass
out
on
fxp0
proto
icmp
from
any
to
any
no
state
Si se aplica filtrado con estados solo se necesitan 2 reglas:
En la sintaxis de PF será algo así:
________________________________________________________________________________
5.¿Como funciona Packet Filter?
11/12
¿Cómo funciona Packet Filter (PF) ? - Fernando Quintero (a.k.a nonroot), http://www.openbsdcolombia.org
REGLA 1 con estados:
pass
in
on
rl0
proto
icmp
from
192.168.0.0/24
to
any
REGLA 2 con estados:
pass
out
on
fxp0
proto
icmp
from
any
to
any
Con estados PF se da cuenta que el paquete que paso por la interfaz de entrada (1) es de confianza,
entonces no va a requerir especificar la salida de esa interfaz y luego en la salida en (4) de la
segunda interfaz se hace innecesario el uso de una regla de regreso.
En conclusión, cuando se manejan estados solo se requiere que los paquetes se verifiquen en
una sola dirección de la interfaz, entrando o saliendo.
5.5. Notas finales
Tenga en cuenta que aquí solo se esta explicando la lógica de PF, no se ha puesto la totalidad de
reglas que se usarán para crear firewalls operativos, por lo tanto es necesario hacer las definiciones
o seguir los primeros pasos que se especifican en la F.A.Q antes de poner en marcha el firewall.
Por ejemplo, no se ha habilitado el reenvío de paquetes, tampoco se han definido variables y no se
ha mostrado como inicializar el PF modificando el archivo rc.conf.
En un próximo documento se harán los ejemplos necesarios para construir completamente un
firewall basado en Packet Filter. (¡Esperelo!)
Gracias a todos los que llegaron hasta estas líneas, dudas y comentarios son bienvenidos.
6. Enlaces relacionados
●
Sobre Packet Filter: http://es.wikipedia.org/wiki/PF_(software)
●
Sitio del creador de PF: http://www.benzedrine.cx/pf.html
●
Guía oficial de PF: http://www.openbsd.org/faq/pf/index.html
! Larga vida a OpenBSD !
http://www.openbsdcolombia.org/
________________________________________________________________________________
6.Enlaces relacionados
12/12

Documentos relacionados