Firewalls


          Este tipo es muy rápido y casi totalmente transparente para los usuarios.
 
  • Servidores proxy o firewalls a nivel de aplicación: estos servidores controlan el tráfico entre
  •         dos redes, es decir, se comunican con los servidores del exterior de la red en nombre de los
            usuarios. Por ejemplo, un usuario de una red que acceda a Internet a través del proxy, parecerá
            a los otros ordenadores como si en realidad fuera el servidor proxy. Cuando utilizamos este tipo
            de firewall, la red local no se conecta con Internet. Es lugar de conectarse, el tráfico que fluye
            de una red a otra nunca interactúa con el tráfico de la otra red (ya que los cables de red no
            están en contacto). El servidor transmite de una red a otra una copia aislada de cada paquete
            autorizado. Estos firewalls enmascaran el origen de la conexión inicial y protegen la red frente a
            los usuarios de Internet que intentan recopilar información de su red privada. Ya que también
            reconoce los protocolos de red, podemos configurarlo para controlar los servicios que
            deseamos que proporcione la red, de igual modo que programaríamos un encaminador.
            Debemos tener en cuenta que nuestros usuarios de red, utilicen programas clientes que puedan
            trabajan con proxy. También debemos tener en cuenta que es un programa el que analiza la
            validez o no de los paquetes transmitidos, con lo que el rendimiento de la red, se ve
            notablemente reducido.
     
  • Firewalls a nivel de circuito: Similar al anterior tipo, ya que ambos son proxies. Debemos
  •         tener en cuenta que los firewalls a nivel de aplicación requieren la utilización de software de
            proxy especial para cada servicio que se desee incluir en la red, como FTP o HTTP. Por el
            contrario este tipo de firewalls crea un circuito entre el cliente y el servidor sin necesidad de
            que la aplicación sepa nada del servicio. Protegen el inicio de la transacción sin interferir en la
            transacción que se esta realizando. La principal ventaja reside en que proporciona servicios
            para una gran variedad de protocolos.
     
    2.2Caracteristicas de diseño
     
    Hay tres características fundamentales a la hora de diseñar o configurar un firewall. La primera es la política de seguridad que toma la empresa propietaria del firewall. Por ejemplo una empresa que quiere que tráfico exterior este restringido a consultar su pagina web.

    La segunda decisión que habrá que tomar será el nivel de monitorización, redundancia y control. Para esto existen las denominadas políticas por defecto que queremos establecer en el firewall:

  • Política de permitir por defecto: se permite todo el trafico excepto aquel explícitamente negado.
  • Política de denegar por defecto: denegamos todo lo que explícitamente no se permita.

  • Evidentemente la segunda es mejor en cuanto a seguridad pero a la hora de trabajar los usuarios en muchas ocasiones están limitados. Es menos costosa de implementar, es más fácil denegar y permitir solo unos cuantos servicios que permitirlo todo y luego denegar todo aquello que pueda ser una amenaza para nuestra seguridad.
    Existe la posibilidad de rechazar, que es como denegar pero se envía un paquete ICMP para avisar que este paquete ha sido rechazado. Esto supone una sobrecarga de la red y una información muy útil para los hackers.

    La tercera consideración a tener en cuenta es el aspecto económico. Depende de la información que tenemos que proteger será necesario hacer un esfuerzo económico si realmente lo requiere, no podemos emplear mas dinero en proteger la información de lo que esta vale.

    Para que un firewall sea eficiente tendremos que tener en cuenta que el numero de reglas sea el mínimo posible para hacer cumplir la política escogida porque sino perderemos demasiado tiempo en evaluar los paquetes. La gestión natural de reglas y tolerancia a errores de gestión es también muy importante sobre todo cuando la red es de un tamaño considerable, y por ultimo la granuralidad máxima, interesa ajustarse lo más posible al nivel de detalle exigido por la política de la organización.

    2.3.Arquitecturas

    Host de doble conexión.

    Se trata de una configuración muy simple aunque muy efectiva. Se trata de la conexión de las dos redes mediante software, ya que esta compuesto por dos tarjetas de red separadas físicamente.
    El principal inconveniente es que el usuario, podría habilitar fácilmente e incluso por error, el
    encaminamiento interno. Lo que deshabilitaría el firewall. Para funcionar utilizan un conjunto de proxies a nivel de aplicación o de circuito. El software ejecuta los proxies para controlar el tráfico entre ambas redes.
    Debemos hacer una apreciación para los sistemas UNIX, ya que son especialmente susceptibles, ya que para que funcione este tipo de configuración es necesario que las funciones de encaminamiento estén desactivadas, sin embargo, en algunas versiones , en especial Berkeley Unix, estas funciones se habilitan de forma predeterminada. Por tanto es necesario comprobar que el sistema operativo haya desactivado todas las funciones de encaminamiento.

    Filtrado de host.

    Posiblemente este tipo de firewalls son los mas seguros incluso más que los de doble conexión.
    Al crearlo, le añadimos un encaminador de filtrado a la red, lo que nos permite separar el ordenador de Internet. Este tipo de configuración es muy efectivo y fácil de mantener.
    Los usuarios que deseen conectarse con Internet deberán hacerlo a través de este ordenador. De este
    modo, los usuarios internos creen tener un acceso directo a Internet mientras que el host restringe el
    acceso a los usuarios externos.

    Filtrado de subred.

    Esta red permite aislar aún más la red privada de Internet. Esta compuesto por un servidor proxy y dos encaminadores de filtrado independientes. Los encaminadores controlan el tráfico de la red local,
    mientras que el proxy vigila y controla el tráfico de entrad y salida para Internet.
    Esta configuración proporciona una defensa formidable frente a cualquier ataque. Al aislar el host de una red independiente, limita el daño que puede sufrir la red interna.


              3.Firewall para linux: iptables

     
    Hemos visto las herramientas que proporciona linux, ipchains e iptables. La herramienta iptables es para el kernel 2.4.XX por eso elegimos esta pero ipchains también funciona correctamente. Podemos utilizar el motor de filtrado netfilter que fue diseñado para simplificar y hacer mas flexible el antes implementado con ipchains. El funcionamiento tanto de ipchains como de iptables se basa en reglas, cadenas y eventos. Las reglas son las acciones que realizamos sobre los paquetes, en la cual se definirán tres zonas características:
  • Primero se define el punto de aplicación de la regla.
  • Segundo se define el paquete al cual se le aplicara la acción.
  • Tercero define la acción.
  • Cada regla puede ser visualizada como una línea o fila de una matriz.
    Las cadenas son conjuntos de reglas y los eventos son los puntos en donde queremos que los paquetes sean inspeccionados.
    Iptables ofrece tres puntos en los cuales podemos aplicar las reglas, estos son INPUT(entrada), OUTPUT(salida), FORWARD(redirigir) las son llamadas cadenas y deben ser referenciadas con mayúsculas.
     


    La cadena INPUT se aplica para paquetes que van destinados a nuestra máquina local.
    La cadena OUTPUT se aplica únicamente a los paquetes generados localmente.
    La cadena FORWARD sólo se ve los paquetes que simplemente están de paso.

    Si la cadena dice que hay que descartar (DROP) el paquete, se le mata ahí mismo, pero si la cadena dice que hay aceptarlo (ACCEPT), continúa su camino por el diagrama.
    Antes de ejecutar alguna orden iptables (hay que tener cuidado algunas distribuciones puede que ejecuten iptables en sus guiones de iniciación), no habrá reglas en ninguna de las cadenas de uso interno («INPUT», «FORWARD» y «OUTPUT»), todas las cadenas tendrán la política de ACCEPT. Se puede alterar la política por defecto de FORWARD proporcionando la opción «forward=0» al módulo iptable_filter.

    Veamos las operaciones que se pueden hacer en todas las cadenas:


    Las reglas de una cadena se pueden manipular de varias maneras:


    3.1.Parámetros de especificación de reglas

    3.1.1.Especificar la acción

    La opción «-j» seguido de las opciones ACCEPT, DROP, QUEUE, RETURN, indican la acción que se tomara si el paquete cumple con la regla. Un ejemplo:
     

    # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP


    3.1.2.Especificar las direcciones IP de Origen y Destino

    Las direcciones IP de origen («-s», «--source», o «--src») y destino («-d», «--destination», o «--dst») se pueden especificar de cuatro maneras. La más común es usar el nombre completo, tal como «localhost» o «www.linuxhq.com». La segunda manera es especificar la dirección IP, como «127.0.0.1».

    Las tercera y cuarta maneras permiten especificar un grupo de direcciones IP, como «199.95.207.0/24» o «199.95.207.0/255.255.255.0». Ambas especifican cualquier dirección entre 199.95.207.0 y 199.95.207.255, ambas inclusive; los dígitos tras la «/» dicen qué partes de la dirección IP son significativas. «/32» o «/255.255.255.255» es la opción por defecto (coincide con toda la dirección IP). Para especificar cualquier dirección IP, se debe usar «/0», de esta manera:

            [ NOTA: «-s 0/0» es redundante en este caso. ]
            # iptables -A INPUT -s 0/0 -j DROP
            #
    Se usa rara vez, ya que el efecto que se consigue en esta regla es lo mismo que si no se especificase la opción «-s».

    3.1.3.Especificar una inversión

    Hay muchos indicadores, como «-s» (o «--source») y «-d» («--destination») cuyos respectivos argumentos pueden ir precedidos por «!» (se pronuncia «not» o «no»), para que coincidan con direcciones que NO sean iguales a las proporcionadas. Por ejemplo, «-s ! localhost» coincide con cualquier paquete que no venga de localhost.

    3.1.4.Especificar el protocolo

    Se puede especificar el protocolo con el indicador «-p» (o «--protocol»). El protocolo puede ser un número (si sabe los valores numéricos) o un nombre en el caso especial de «TCP», «UDP» o «ICMP». No importa si lo pone en mayúscula o minúscula; «tcp» valdrá lo mismo que «TCP».

    El nombre de protocolo puede ir prefijado de una «!», para invertirlo, de manera que «-p ! TCP» especifica paquetes que no sean TCP.

    3.1.5.Especificar la Interfaz

    Las opciones «-i» (o «--in-interface») y «-o» (o «--out-interface») especifican el nombre de una interfaz con la que coincidir. Una interfaz es el dispositivo físico por el que entra («-i») o sale («-o») un paquete. Puede usar la orden ifconfig para obtener una lista de las interfaces que están «up» (esto es, funcionando en ese momento).
    Los paquetes que pasan por la regla INPUT no tienen un interfaz de salida, con lo que nunca se activará una regla de esta cadena que use «-o». De forma similar, los paquetes que atraviesan OUTPUT no tienen interfaz de salida, de manera que ninguna regla que use «-i» en esta cadena funcionará.
    Sólo los paquetes que pasan por la cadena FORWARD tienen a la vez interfaz de entrada y de salida.
    Es perfectamente correcto especificar una interfaz que no existe en este momento; la regla no será activada por nada hasta que la interfaz empiece a funcionar. Esto es extremadamente útil con enlaces PPP de llamada (normalmente la interfaz ppp0) y similares.
    Como caso especial, un nombre de interfaz que acabe en «+» coincidirá con todas las interfaces (que existan en ese momento o no) cuyo nombre empiece de esa manera. Por ejemplo, para especificar una regla que funcione para todas las interfaces PPP, se podría usar la opción -i ppp+.
    El nombre de la interfaz puede ir precedido por «!» para coincidir con un paquete que no vaya por la(s) interfaz/ces especificada(s). does not match the specified interface(s).

    3.1.6.Especificar fragmentos

    Algunas veces ocurre que un paquete es demasiado grande para pasar por el cable de un solo golpe. Cuando esto ocurre, el paquete se divide en fragmentos, que se envían como varios paquetes. El otro extremo reensambla los fragmentos para reconstruir el paquete entero.

    El problema de los fragmentos es que el primero de ellos tiene todos los campos de cabecera (IP + TCP, UDP e ICMP) que hay que examinar, pero los siguiente sólo tienen un subconjunto de la cabecara (IP sin los campos adicionales de protocolo). Por lo tanto, no es posible buscar cabeceras de protocolos (como se hace con las extensiones TCP, UDP e ICMP) en los siguientes fragmentos.

    Si está haciendo un seguimiento de conexión o NAT, entonces se reunirán todos los fragmentos antes de que alcancen el código de filtrado de paquetes, de manera que no se deba preocupar por ellos.

    Por otro lado, es importante comprender cómo son tratados los fragmentos por las reglas de filtrado. Cualquier regla de filtrado que pida información que no tenemos no será activada. Esto significa que el primer fragmento se trata como cualquier otro paquete. El segundo y los siguientes no. Por tanto una regla que diga -p TCP --sport www (que especifica como puerto origen el «www») nunca será activada por un fragmento (excepto el primero). Tampoco la regla opuesta -p TCP --sport ! www.

    Sin embargo, podemos especificar una regla específicamente para el segundo fragmento y los siguientes, usando la opción «-f» (o «--fragment»). También es válido especificar que una regla no se va a aplicar al segundo fragmento ni a los siguientes, precediendo «-f» con «!».

    Normalmente se considera seguro dejar pasar el segundo fragmento y siguientes, ya que el filtrado afectará al primero, y por lo tanto se evita que el destino de los paquetes pueda reensamblarlos por completo; sin embargo, se conocen fallos de programación que permiten poner fuera de combate máquinas simplemente enviándoles fragmentos.

    3.2.Extensiones

    Iptables es extensible, lo que significa que se pueden extender tanto el núcleo como la herramienta iptables para proporcionar nuevas características.
    Algunas de estas extensiones son estándar, y otras más exóticas. Las extensiones las puede hacer otra gente y pueden ser distribuidas por separado para diferentes nichos de usuarios.
    Las extensiones al núcleo normalmente residen un directorio de módulos, como /lib/modules/2.3.15/net. Normalmente el núcleo los carga cuando son necesario, si fue compilado con la opción CONFIG_KMOD, de manear que no sería necesario cargarlos de forma manual.
    Las extensiones al programa iptables son bibliotecas compartidas que residen normalmente en /usr/local/lib/iptables/, aunque una distribución podría ponerlas en /lib/iptables o /usr/lib/iptables.
    Para utilizar una extensión se debe utilizar «-m» «nombre de iptables». La lista siguiente muestra las opciones «-m» y «-p» que establecen el contexto de la extensión, y las opciones proporcionadas por esa extensión.

    3.2.1.Extensiones de TCP

    Las extensiones TCP se cargan de forma automática si se especifica «-p tcp». Esto proporcionar las siguientes opciones (ninguna de las cuales se activa con fragmentos).

    --tcp-flags
    Seguido por una «!» opcional, y después dos cadenas de indicadores (flags), le permite filtrar dependiendo de ciertos indicadores de TCP. La primera cadena es la máscara: una lista de los indicadores que desea examinar. La segunda cadena indica cuales deben estar activos. Por ejemplo,

    # iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY

    Esto indica que deben ser examinados todos los indicadores («ALL» es sinónimo de «SYN,ACK,FIN,RST,URG,PSH»), pero sólo deben estar activos SYN y ACK. Hay otro argumento llamado «NONE», que significa «ningún indicador».

    --syn
    precedido de forma opcional por un «!», es equivalente a «--tcp-flags SYN,RST,ACK SYN».

    --source-port
    seguido de forma opcional por un «!», y después un puerto o rango de puertos TCP. Estos pueden estar representados por su nombre, tal como viene en /etc/services, o por número. Los rangos pueden ser dos nombres de puerto separados por un «-», un puerto seguido de un «-» (para especificar un puerto mayor o igual al indicado), o un puerto precedido de «-» (para especificar un puerto menor o igual al indicado).

    --sport
    sinónimo a «--source-port».

    --destination-port
    y

    --dport
    son lo mismo que lo anterior, sólo que especifican el puerto de destino, en lugar del de origen.

    --tcp-option
    seguido por un «!» (opcional) y un número, se ajusta a paquetes con una opción TCP igual a ese número. Un paquete que no tenga una cabecera TCP completa, será descartado automáticamente si se intenta examinar sus opciones TCP.
     

    Explicación de los indicadores (flags) TCP
    A veces es útil permitir conexiones TCP en una dirección, pero no en la otra. Por ejemplo, puede que quiera permitir conexiones a un servidor WWW externo, pero no desde ese mismo servidor.
    La solución del inexperto sería bloquear los paquetes TCP que vengan del servidor. Desafortunadamente, las conexiones TCP precisan que los paquetes fluyan en ambas direcciones para poder funcionar.
    La solución es bloquear sólo los paquetes que se usan para solicitar una conexión. A éstos se les llama paquetes SYN ( técnicamente son paquetes con el indicador SYN activo, y los FIN y ACK inactivos). Rechazando estos paquetes, podemos detener intentos de conexión en su inicio.
    El indicador (flag) «--syn» se usa para este propósito: sólo es válido para las reglas que especifican TCP como protocolo. Por ejemplo, para especificar intentos de conexión TCP desde 192.168.1.1:

    -p TCP -s 192.168.1.1 --syn

    Este indicador puede ser invertido precediéndolo con un «!», lo que significa cualquier paquete excepto el de inicio de conexión.

    3.2.2.Extensiones UDP

    Estas extensiones se cargan de forma automática si se especifica «-p udp». Proporciona las opciones «--source-port», «--sport», «--destination-port» y «--dport» con los mismos detalles que los indicados para TCP.

    3.2.3.Extensiones ICMP

    Esta extensión se carga de forma automática si se especifica «-p icmp». Proporciona sólo una opción nueva:
    --icmp-type
    seguida de un «!» opcional, y luego del nombre de un tipo icmp (p.ej. «host-unreachable»), un tipo numérico («3»), o un tipo numérico y un código separados por «/» («3/3»). Puede ver una lista de los nombres de los tipos icmp disponibles usando «-p icmp --help».

    3.2.4.Extensiones Mac

    Este módulo debe ser especificado de forma explícita con «-m mac» o «--match mac». Se usa para coincidencias en las direcciones Ethernet (MAC) de los paquetes entrantes, y por tanto sólo son útiles para los paquetes que pasan por las cadenas PREROUTING e INPUT. Proporciona sólo una opción:
    --mac-source
    seguida de un «!» opción, y luego una dirección ethernet en notación hexadecimal separada por «:», por ejemplo «--mac-source 00:60:08:91:CC:B7».