VFW. Router-firewall basado en Linux

Victoriano Giralt


Resumen

Hemos detectado la necesidad de disponer de equipos de bajo coste y capacidades diversas, que incluyan entre sus funciones la posibilidad de conectar con Internet por la red telefónica conmutada y de encaminar los paquetes generados en la red local, con o sin enmascaramiento.

Dado que para realizar el enmascaramiento de la red local se utiliza el mismo paquete que para controlar el filtro de paquetes IP (ipchains), y dado el incremento de ataques que se ha producido en fechas recientes, hemos decidido centrar el desarrollo sobre un cortafuegos.

Sabemos de la existencia de desarrollos como Linux Router pensados para la realización de equipos de routing con Linux. Pero, estos desarrollos adolecen de la falta de facilidad de configuración de otras distribuciones Linux y de flexibilidad para añadir facilidades o capacidades a un sistema de mayor envergadura.

Por ello, hemos basado nuestro trabajo en una distribución estándar: RedHat 6.0 y su equivalente Eurielec 3.0, que añade la ventaja de incluir soporte en español. Así, hemos preparado un paquete RPM con soporte para configurar interfaces PPP y las facilidades de cortafuegos. En los bloques de configuración hemos creado nuevos conjuntos de paquetes específicos para el propósito de nuestro desarrollo.

Objetivos

  1. Obtener un sistema de fácil configuración para convertir equipos de bajo costo en routers para conectar redes locales a Internet, por medio de la red telefónica.
  2. Añadir facilidades de cortafuegos a dicho router con la misma simplicidad.
  3. El sistema debe poderse añadir a configuraciones de cualquier tamaño.
  4. Debe basarse en distribuciones estándar, para poder instalarlo como parte de una política global.
  5. Debe ser fácil de gestionar, requiriendo pocos ficheros de configuración y que sean sencillos

Descripción del sistema

El sistema se basa en una distribución estándar de Linux, inicialmente Eurielec 3.0 (equivalente a RedHat 6.0, con procedimientos de instalación y documentación en castellano), sobre la cual se instala un paquete RPM que configura determinados elementos del sistema operativo de forma simple.

Módem

Es el elemento físico fundamental para la conexión a Internet por medio de la red telefónica, primera finalidad del sistema. Al configurar VFW, se busca el fichero /dev/modem, si existe se utiliza y, si no, se preguntará al usuario por la línea serie a la que está conectado dicho dispositivo.

Interfaz PPP

Para que el sistema pueda conectar a Internet por medio de la red telefónica, es necesario configurar un interfaz PPP de tal manera que realice las conexiones a demanda. En un Linux basado en RedHat esto se define en/etc/sysconfig/network-scripts/ifcfg-ppp0(si es el único interfaz PPP, suposición válida inicialmente en nuestro caso).

VFW puede utilizar un interfaz PPP preexistente, verificando que tiene las opciones necesarias para el funcionamiento de la conexión bajo demanda:

OPTIONS=demand idle 180

Es decir, que funcione a demanda y que desconecte a los tres minutos de no enviar o recibir ningún paquete por el interfaz.

En caso de configurar el interfaz, VFW crea los dos ficheros necesarios para el funcionamiento de un interfaz PPP:

- ifcfg-ppp0
- chat-ppp0 (fichero para el establecimiento de la llamada)

En caso de utilizar PAP, es necesario, además, incluir la información de usuario y clave de acceso en el fichero de secretos PAP(/etc/ppp/pap-secrets).

Con esta configuración, el interfaz PPP0 está disponible en el sistema para poderlos activar y desactivar con los comandos normales (ifup e ifdown) y, además, cuando esté activo funciona bajo demanda, es decir, realiza una conexión automática cada vez que el sistema envía paquetes hacia la ruta por defecto, que será el interfaz PPP0.

Filtro de paquetes del núcleo

Una vez que el sistema es capaz de conectar a Internet a través del interfaz PPP, es necesario cumplir dos objetivos:

  • Conectar la red local al exterior
  • Lo más común en configuraciones como la planteada, es que la red local utilice direcciones privadas, con lo cual, la salida al exterior deber· realizarse por medio de enmascaramiento (masquerading), también conocido como traducción de direcciones de red (NAT o Network Address Translation). En la serie 2.2 del núcleo de Linux esto se consigue programando las cadenas IP (ipchains) o filtro de paquetes del núcleo.

    Para hacer esto, VFW, durante la configuración, determina el interfaz Ethernet por el que accede la red local, si existe más de uno, o el único del sistema. Conocido el interfaz, en tiempo de arranque del sistema, se lee su configuración del fichero correspondiente en /etc/sysconfig/network-scripts/, para poder configurar el filtro de paquetes de manera que los procedentes de la red local sean enmascarados, con la siguiente regla:

    - A forward -s $REDLOCAL -d 0.0.0.0/0 -j MASQ

    Siendo $REDLOCAL la dirección de red del interfaz Ethernet.

  • Proteger al servidor de conexiones hostiles

  • Puesto que se utiliza el filtro de paquetes para enmascarar el tráfico de la red local, y, como cada vez son más frecuentes los ataques maliciosos a los sistemas conectados a Internet, se aprovechan los servicios de cortafuego del mismo para proteger al router y a la red local.

    Con este fin, se aplica un conjunto de reglas restrictivas sobre el filtro de paquetes de entrada de los interfaces del router. Con la siguiente filosofía:

    • Las conexiones internas al sistema y desde la red local, tanto con destino en el propio sistema como con destino exterior, se permiten todas, tanto TCP como UDP e ICMP.
    • Los paquetes ICMP de origen externo se permiten todos excepto las peticiones de echo (echo-request), dada la proliferación de ataques basados en ping.
    • Por UDP sólo se permiten paquetes externos para el servicio de nombres.
    • Por TCP sólo se permiten las conexiones iniciadas desde el exterior para el servicio de nombres, el servicio de autentificación y flujos de datos FTP.
    • Cualquier conexión que no esté permitida de forma expresa, es denegada.

Activación del servicio router-firewall

El sistema está diseñado para que se pueda activar tanto en el proceso de arranque de la máquina (runlevels 3, 4 y 5) como por el administrador del sistema. En cualquier caso, el proceso consiste en:

  1. Carga de la configuración
  2. La configuración en sí de VFW se limita a indicar los interfaces Ethernet y PPP a utilizar y si la IP de éste último va a ser estática o dinámica. Esta configuración se encuentra en el fichero /etc/sysconfig/vfw.conf.

  3. Activación del firewall
  4. Antes de conectar con el exterior, el sistema carga las reglas de filtro de paquetes que le permitirán, por un lado, conectar la red interna con el exterior y, por otro, protegerse de los ataques. Las reglas están definidas en /etc/sysconfig/vfw.rules.

  5. Activación de la conexión exterior

Como pasos previos a activar el interfaz PPP, se configura el núcleo adecuadamente, aprovechando la facilidad de reconfiguración dinámica de los núcleos de la serie 2.2. Los parámetros que se modifican son: ip_forwarding, para actuar de router; ip_always_defrag, como protección frente a ataques basados en fragmentos de paquetes; e ip_dynaddr, si es necesario, para permitir la modificación dinámica de la dirección IP asignada al interfaz PPP. Hecho esto se activa el interfaz PPP, que conectará con el proveedor de acceso cuando exista tráfico con destino externo a la red local.

Desactivación del servicio router-firewall

Bien como parte del proceso normal de parada del equipo, o bien cuando se desee que no exista conexión exterior, se puede detener el servicio VFW. Este proceso realiza las siguientes tareas:

  1. Desactivación del interfaz PPP
  2. Reconfiguración del núcleo
  3. Se modifican los parámetros ip_forwarding e ip_dynaddr, para no permitir dichas acciones

  4. Eliminar las reglas de filtrado de paquetes

Reconfiguración del firewall

En caso necesario, el sistema puede recargar las reglas del filtro de paquetes mientras esté activo.

Instalación

VFW se distribuye como un paquete RPM para su instalación en un sistema basado en RedHat o que utilice el mismo sistema de configuración de red. Este paquete contiene un conjunto inicial de reglas restrictivas para el filtro de paquetes, una herramienta de configuración de conexiones y los guiones para arranque y parada del servicio. Se incluye un guión que se integra en el sistema de arranque típico SYSV, por medio de chkconfig, en los niveles 3, 4 y 5. Arranca tras la red (56) y para justo antes que ella (44).

Además del paquete RPM, hemos trabajado sobre la distribución Eurielec 3.0 para preparar tres bloques de instalación que permiten, seleccionando únicamente uno de ellos, la instalación de sistemas con VFW y alguna otra capacidad como servidor Web o servidor de fax. Este proceso está en fase muy inicial, ya que los paquetes que instala el sistema Base de Eurielec configuran un sistema bastante ‘pesado’, lo cual hace que no sea demasiado adecuado a nuestros fines. Sin embargo, creemos que es viable trabajar sobre dicha distribución para reducir el número de los paquetes instalados en el sistema Base, pasando los otros a grupos más apropiados a su función o creando grupos nuevos.

Desarrollos realizados

En este punto del desarrollo, el sistema es instalable y se ha probado su funcionamiento con los siguientes elementos disponibles:

  1. Interfaz básico de configuración orientado a caracteres
  2. Para permitir su uso en sistemas pequeños con pocos recursos, se ha basado en un guión bash con llamadas a dialog (generador de elementos de interfaz de usuario) y algunas llamadas a grep y cut.

  3. Controlador del sistema
  4. Igualmente se basa en un guión bash con llamadas a grep. Además, utiliza setserial para configurar el puerto del módem.

  5. Ficheros de configuración
  6. Aparte de los ficheros de configuración de los interfases de red, VFW utiliza dos ficheros propios de configuración:

    • /etc/sysconfig/vfw.conf. Contiene la información sobre los interfases utilizados (ETHIF y PPPIF) y si la IP del interfaz PPP será dinámica o no (IPDYN).
    • /etc/sysconfig/vfw.rules. Contiene las reglas del filtro de paquetes, en el formato adecuado para utilizarlas como parámetros del comando ipchains. Hemos preferido utilizar este sistema, aunque es más lento en el momento de la carga (una orden por regla), es más claro a la hora de mantenerlo. Por ejemplo, las siguientes líneas para impedir el ip-spoofing:
    # Impedimos que nos hagan spoofing

    # Se supone que el núcleo ya nos protege, pero ...

    -A input -s $REDLOCAL -i ! $ETHIF -j DENY

    -A input -s ! $REDLOCAL -i $ETHIF -j DENY

  7. Paquete RPM
  8. Hemos creado un paquete RPM que instala los ficheros necesarios para el funcionamiento de VFW.

  9. Distribución
  10. Tenemos una distribución Eurielec 3.0 modificada que instala VFW en el proceso normal, así como bloques de configuración para tres variedades de router: mínimo, básico y con servidor Web.

Desarrollos futuros

Entre las características que nos gustaría añadir al sistema se incluyen:

  1. El uso de interfaces ISDN

  2. Esta característica incluiría tanto el uso de interfases ISDN para levantar el interfaz PPP, síncrono o asíncrono, como facilitar la configuración de las mismas.

  3. La mejora de la distribución
  4. El objetivo es disponer de una distribución que permita instalar un sistema seleccionando opciones sencillas que describan el uso al que se destinará el sistema instalado del tipo:

    • router mínimo (sólo conexión a Internet, 386 8MB HD 40MB).
    • router básico (Internet y servicio de impresoras y fax, 486DX 16MB HD300MB).
  5. Un interfaz gráfica de configuración del filtro.

Victoriano Giralt
dirección de correo victoriano [at] uma [dot] es
Área de Sistemas y Comunicaciones
Servicio Central de Informática
Universidad de Málaga