¿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