Cortafuegos y Servidores Proxy bajo Linux

Sistemas operativos. Multitarea. GPL (General Public License). Firewall. TCP/IP

  • Enviado por: Javier Romero Checa
  • Idioma: castellano
  • País: España España
  • 10 páginas
publicidad

AMPLIACIÓN DE SISTEMAS OPERATIVOS: CORTAFUEGOS Y SERVIDORES PROXY EN LiNUX

INTRODUCCIÓN

Los cortafuegos han adquirido gran popularidad de un tiempo a esta parte como lo último en seguridad en Internet. En este trabajo se cubrirán las bases de lo que es un cortafuegos, cómo configurar uno, qué servidores proxy hay y cómo configurarlos.

1. Cortafuegos: Conceptos Básicos

Cortafuegos es el término que se emplea para referirse a una franja de bosque que se limpia de árboles, vegetación, y cualquier materia inflamable, con el fin de crear una barrera que el fuego de un posible incendio no sea capaz de atravesar.

Un cortafuegos en el mundillo de las redes de ordenadores es un dispositivo lógico que protege una red privada del resto de la red (pública). Funcionan así:

  • Se toma un ordenador con capacidad de rutar (por ejemplo un PC con LiNUX)

  • Se le ponen dos interfaces (por ejemplo interfaces serie, o ethernet, o de paso de testigo en anillo (Token Ring), etc...)

  • Se le deshabilita el reenvío de paquetes IP (IP forwarding)

  • Se conecta una interfaz a la Internet

  • Se conecta la otra interfaz a la red que se quiere proteger

  • Ahora hay dos redes distintas que comparten un ordenador. El ordenador cortafuegos, al que de ahora en adelante llamaremos "cortafuegos", puede comunicarse tanto con la red protegida como con la Internet. La red protegida no puede comunicarse con la Internet, y la Internet no puede comunicarse con la red protegida, dado que hemos deshabilitado el reenvío IP en el único ordenador que las conecta.

    Si se quiere llegar a la Internet desde la red protegida, hay que hacer primero un telnet al cortafuegos, y acceder a la Internet desde él. Del mismo modo, para acceder a la red protegida desde la Internet, se debe antes pasar por el cortafuegos.

    Este es un mecanismo de seguridad excelente contra ataques desde Internet. Si alguien quiere atacar la red protegida, primero tiene que atravesar el cortafuegos. De esta manera el ataque se divide en dos pasos, y, por lo tanto, se dificulta. Si alguien quiere atacar la red protegida por métodos más comunes, como el bombardeo de e-mails, o el "Gusano de Internet", simplemente no podrá alcanzarla. Con esto se consigue una protección excelente.

    El mayor problema de los cortafuegos es que restringen mucho el acceso a la Internet desde la red protegida. Básicamente, reducen el uso de Internet al que se podría hacer desde un terminal. Tener que entrar en el cortafuegos y desde allí realizar todo el acceso a Internet es una restricción muy seria. Programas como Netscape, que requieren una conexión directa con Internet, no funcionan desde detrás de un cortafuegos. La solución a todos estos problemas es un Servidor Proxy.

    2. Servidores Proxy: Conceptos básicos

    Los servidores proxy son un invento que permite el acceso directo a Internet desde detrás de un cortafuegos. Funcionan abriendo un socket en el servidor y permitiendo la comunicación con Internet a través de él. Por ejemplo: si un ordenador, estuviera dentro de la red protegida y quisiera ver el Web con Netscape, pondría un servidor proxy en el cortafuegos. El servidor proxy estaría configurado para hacer que las peticiones de conexión de mi ordenador al puerto 80 de otra máquina, se conectara a su puerto 1080, y él mismo establecería una conexión con el puerto 80 de la máquina deseada. A partir de entonces reenviaría todos los datos de esa conexión a la otra máquina.

    TIA o TERM son dos programas con los que se puede redirigir un puerto. Lo importante de los servidores proxy es que, bien configurados, son completamente seguros. No dejan que nadie entre a través de ellos.

    3. Configuración de un cortafuegos

    Lo primero es recompilar el núcleo con las opciones apropiadas.

    Las opciones requeridas son:

  • Habilitar el Soporte de Red

  • Habilitar la opción de red TCP/IP (TCP/IP Networking)

  • Deshabilitar el reenvio de paquetes IP (CONFIG_IP_FORWARD)

  • Habilitar la opción de Cortafuegos IP (IP Firewalling)

  • Habilitar las cuentas IP (IP Accounting).

  • Habilitar el Soporte de Dispositivos de Red (Networking Device Support)

  • Habilitar el soporte de PPP y Ethernet (por ejemplo, aunque esto depende del tipo de interfaces que se tenga en cada caso).

  • Ahora, hay que recompilar y reinstalar el núcleo y rearrancar la máquina. Las interfaces deberían ser reconocidas en la secuencia de arranque.

    3.1. Direcciones de Red

    Dado que no queremos que la Internet tenga acceso a nuestras máquinas, no necesitamos usar direcciones reales. Una buena elección es el rango de direcciones de clase C 192.168.2.xxx, que está designado como rango para pruebas. Nadie lo usa, y no entrará en conflicto con ninguna petición al exterior. De modo que, en esta configuración, sólo se necesita una dirección IP real. Las otras se pueden elegir libremente y de ninguna manera afectarán a la red.

    Asignamos la dirección IP real al puerto serie del cortafuegos que usamos para la conexión PPP. Asignamos 192.168.2.1 a la tarjeta Ethernet del cortafuegos. Asignamos a las otras máquinas de la red protegida cualquier dirección del rango anterior.

    3.1.1. Pruebas

    Lo primero es hacer ping a Internet desde el cortafuegos. Ahora habrá que probar a hacer pings entre las máquinas de la red protegida. Todas deben ser capaces de hacer ping a las demás.

    Ahora, todas las máquinas de la red protegida deben ser capaces de hacer pings al cortafuegos. Deberían ser capaces de hacer ping a la 192.168.2.1, no a la dirección PPP.

    Entonces habrá que probar a hacer ping a la dirección PPP del cortafuegos desde dentro de la red protegida. No debe funcionar. Al haber asignado a la red protegida la dirección 192.168.2.0 ningún paquete será encaminado a ella por Internet, pero, en cualquier caso, es más seguro tener el reenvío de paquetes IP deshabilitado.

    3.2. Seguridad para el Cortafuegos

    El cortafuegos no sirve si se deja vulnerable a los ataques. Primero, el fichero /etc/inetd.conf de configuración del "superservidor" (inetd) arranca un buen número de demonios servidores cuando les llega una petición.

    Entre ellos:

    • Telnet

    • Talk

    • FTP

    • Daytime

    Se debe desactivar todo lo que no se necesite. Para desactivar un servicio basta con poner un # al comienzo de la linea que se refiera a él. Después hay que teclear "kill -HUP <pid>", donde <pid> es el número de proceso de inetd. Esto hará que inetd relea su fichero de configuración (inetd.conf) y se reinicie.

    3.3. Software para Cortafuegos

    Un cortafuegos en sentido estricto no necesita ningún software aparte del núcleo de LiNUX y los programas básicos de red (inetd, telnetd y telnet, ftpd y ftp). Pero un cortafuegos así es extremadamente restrictivo y no muy útil. Así que existen programas para aumentar la utilidad de los cortafuegos. El que se tratará con mayor detalle es un paquete llamado "socks", que implementa un servidor proxy. Sin embargo, existe otro par de programas que hay que tomar en consideración.

    3.3.1. El juego de herramientas para cortafuegos de TIS

    TIS ha sacado una colección de programas para facilitar la realización de cortafuegos. Básicamente, los programas hacen lo mismo que el paquete Socks, pero tiene una estrategia de diseño diferente. Mientras que Socks tiene un único programa que cubre todas las operaciones de la Internet, TIS provee un programa para cada utilidad que quiera usar el cortafuegos.

    Socks es más fácil de configurar, más fácil de compilar, y permite una mayor flexibilidad. El juego de herramientas de TIS es mas seguro si se quiere controlar a los usuarios de dentro. Los dos proporcionan una protección absoluta del exterior.

    4. Instalación del Servidor Proxy

    El servidor proxy requiere software adicional. Éste se puede conseguir en:

    ftp://sunsite.unc.edu/pub/LiNUX/system/Network/misc/socks-Linux-src.tgz

    Algo importante que hay que advertir es que hay que añadir el servidor proxy al /etc/inetd.conf. Se debe añadir la linea:

    socks stream tcp nowait nobody /usr/local/etc/sockd sockd

    para decir a inetd que arranque el servidor cuando se le pida.

    4.1 Configuración del Servidor Proxy

    El programa socks necesita dos ficheros de configuración distintos. Uno en el que se le dice qué accesos están permitidos, y otro para dirigir las peticiones al servidor proxy apropiado. El fichero de control de acceso debe residir en el servidor. El fichero de rutado debe residir en todas las máquinas Unix.

    4.1.1. El Fichero de Control de Acceso

    El fichero de acceso se llama "sockd.conf". Debería contener dos tipos de líneas: las de permiso, que contienen "permit" y las de prohibición, que contienen "deny". Cada linea tendrá tres palabras:

    • El identificador (permit/deny)

    • La dirección IP

    • El modificador de dirección

    El identificador es o permit (permitir) o deny (denegar). El modificador de dirección es también un número de cuatro octetos. Funciona como una máscara de red. Hay que verlo como 32 bits (unos o ceros). Si el bit es uno, el bit correspondiente de la dirección que se comprueba debe coincidir con el bit correspondiente del campo de dirección IP.

    Por ejemplo, si la línea es:

    permit 192.168.2.23 255.255.255.255

    entonces, admitirá sólo direcciones IP en las que coincidan todos los bits de 193.168.2.23, esto es, sólo ella misma. La línea:

    permit 192.168.2.0 255.255.255.0

    admitirá todas las direcciones desde la 192.168.2.0 hasta la 192.168.2.255, la subred de clase C completa. No se debería tener la línea:

    permit 192.168.2.0 0.0.0.0

    dado que permitiría cualquier dirección.

    Así que, primero, permitimos todas las direcciones que queramos permitir, y después prohibimos el resto. Para permitir a cualquiera del rango 192.168.2.xxx, las líneas:

    permit 192.168.2.0 255.255.255.0

    deny 0.0.0.0 0.0.0.0

    funcionarán perfectamente.

    4.1.2 El Fichero de rutado

    El fichero de rutado de socks tiene el nombre de "socks.conf". El fichero de rutado tiene la función de decir a los clientes de socks cuándo usar socks y cuándo no. Por ejemplo, en nuestra red la máquina 192.168.2.3 no necesita usar socks para comunicarse con la 192.168.2.1 (el cortafuegos), ya que tiene una conexión directa vía Ethernet (por ejemplo). Hay tres tipos de entradas:

    • deny

    • direct

    • sockd

    Deny (denegar) le dice a socks que peticiones debe rechazar. Esta entrada tiene los mismos tres campos que en sockd.conf, identificador, dirección, y modificador. La entrada direct dice para qué direcciones no se debe usar socks. Éstas son todas las direcciones a las que se puede llegar sin usar el servidor proxy. De nuevo hay tres campos: identificador, dirección, y modificador.

    La entrada sockd dice cuál es la máquina en la que corre el servidor de socks. La sintaxis es:

    sockd @=<lista de servidores> <direccion IP> <modificador>

    La entrada “@=” permite poner las direcciones IP de una lista de servidores proxy. En nuestro ejemplo sólo usamos un servidor proxy, pero se puede tener muchos para admitir una carga mayor y conseguir redundancia frente a fallos.

    4.2. Trabajar con un Servidor Proxy

    Para que las aplicaciones funcionen con el servidor proxy, hay que "sockificarlas". Será necesario tener dos telnets distintos, uno para la comunicación directa, y uno para la comunicación a través del servidor proxy. Socks viene con instrucciones de cómo “sockificar” un programa. Por esta razón deberemos cambiar el nombre a todos los programas de la red protegida y sustituirlos por los “sockificados”. Así "finger"pasará a ser "finger.orig", "telnet" a "telnet.orig", etc... . Se debe dar a conocer a socks todo esto en el fichero include/socks.h . Algunos programas gestionan el rutado y el “sockificado” ellos mismos.

    4.3. Inconvenientes de los Servidores Proxy

    Un servidor proxy es ante todo un dispositivo de seguridad. Usarlo para aumentar el número de máquinas con acceso a Internet cuando se tienen pocas direcciones IP tiene muchos inconvenientes. Un servidor proxy permite un mayor acceso desde dentro de la red protegida al exterior, pero mantiene el interior completamente inaccesible desde el exterior. Esto significa que no habrá conexiones archie, ni talk, ni envío directo de correo a los ordenadores de dentro.

    El FTP crea otro problema con los servidores proxy. Cuando se hace un ls, o un get, el servidor de FTP establece una conexión con la máquina cliente y manda la información por ella. Un servidor proxy no lo permitirá, así que el FTP no funciona especialmente bien. Además, un servidor proxy es lento, debido a la gran sobrecarga.

    5. Lecturas de Interés

    • La documentación del juego de herramientas de TIS

    • El Howto del NET-2

    • El Howto de PPP

    • El Howto de la Ethernet

    • El MINIHowto de las Múltiples Ethernets

    • Networking with LiNUX

    • La guía del administrador de red TCP/IP de O'Reilly and Associates