You are on page 1of 5

022-026_ShoreWall_Linux3 15.02.

2005 18:07 Uhr Pgina 22

PORTADA

Shorewall

Configuracin de Netfilter y tablas ip con Shorewall

La Mesa Servida
Cuando los usuarios piensan en su estacin de trabajo en casa olvidan normalmente la seguridad. Pero el peligro acecha, esperando golpear a los desprevenidos. Shorewall ayuda a los usuarios habituales de Linux a mantener a los intrusos fuera.
POR JAMES MOHR

a nica forma de que nuestro sistema sea completamente seguro frente a ataques es no conectarlo nunca a Internet. Cada vez que abrimos la puerta para salir tambin la abrimos para que hackers potenciales entren. Algunos usuarios tienen la equivocada creencia de que los intrusos solo atacan sitios de alto renombre y no estn interesados en estaciones de trabajo personales. La verdad es que todas las estaciones de trabajo conectadas a Internet estn en peligro de ser atacadas, incluso las que se conectan mediante telfono analgico normal. En muchos casos estos ataques son aleatorios, de fuerza bruta, donde el atacante utiliza una larga lista de conocidos agujeros de seguridad. Para frustrar a los atacantes simplemente podramos deshabilitar todos los puertos de entrada, haciendo en esencia nuestro equipo invisible al mundo. Sin embargo, cuando necesitamos o simplemente queremos proporcionar servicios desde nuestro ordenador debemos usar otro tipo de proteccin.

Incluso el ms pequeo de los negocios necesita la proteccin que proporciona un cortafuegos. La mayora de los usuarios no puede permitirse los miles de dlares que cuesta un cortafuegos comercial. Afortunadamente hay soluciones de cdigo abierto que ofrecen la proteccin adecuada. Una de esas soluciones es Shorewall.

Entre Bastidores
Shorewall es el nombre comn del cortafuegos Shoreline Firewall. Desde la perspectiva del usuario, Shorewall es un conjunto de archivos fciles de configurar que se utilizan para configurar Netfilter [1]. Netfilter es una funcin del ncleo de Linux 2.4.x y 2.6.x que permite a los mdulos del ncleo acceder al conjunto de protocolos de red en distintos lugares. El mdulo del ncleo puede hacer casi todos con el paquete de red, incluyendo simplemente dejarlos caer o manipularlo. Netfilter tambin soporta las antiguas ipchains, la instalacin empaquetada de filtro en ncleos 2.2. Netfilter nece-

sita ser especficamente configurado en el modo compatibles con ipchains para que trabaje con stas. Podemos descargar la ltima versin de Shorewall desde la pgina Web de Shorewall Web [2] bien como cdigo o como paquete RPM. Debemos saber que la versin RPM no ha sido comprobada con cada una de las distribuciones, si bien s ha sido comprobada con las principales como SuSE, Redhat y Mandrake. Si no estamos seguros debemos comprobarlo en la pgina de Shorewall. Para que Shorewall funcione necesitamos los paquetes de iptables e iproute/ iproute2. Estos paquetes son proporcionados habitualmente por defecto en la mayora de las distribuciones por lo que no debera ser un problema. La razn por la que necesitamos las iptables es porque Shorewall no es realmente un cortafuegos en s mismo. Shorewall no es responsable de comprobar, filtrar y gestionar paquetes. Shorewall simplemente coge sus archivos de configuracin y usa el comando iptables para cargarlas en el ncleo.

22

Nmero 03

www.linuxmagazine.com.es

022-026_ShoreWall_Linux3 15.02.2005 18:08 Uhr Pgina 23

Shorewall

PORTADA

conecta directamente a Internet podramos aadir un cortafuegos directamente a nuestro equipo. Mi red consiste en un ordenador con tarjeta DSL que se conecta a Internet, una mquina con Windows XP y otra con Linux. Cada una tiene una funcin especfica y permito diferentes conexiones desde y hasta estas mquinas. Tan simple como es la configuracin de mi red, solo tengo que cambiar un par de archivos de configuracin para usar Shorewall. Debido a que esta es una configuracin comn y simple, es un buen punto de partida.

Configuracin Bsica
El archivo principal de configuracin es /etc/shorewall/shorewall.conf. shorewall.conf nos permite configurar todo, desde el comportamiento al arranque hasta el comportamiento al apagarlo. Si bien podemos configurar muchos valores distintos en este archivo an no he encontrado ninguna razn para cambiar ninguno de ellos en mi sistema. Puede que ya estemos familiarizados con el trmino segmento para denominarporciones especficas de una red. Shorewall usa el trmino zona. En mi configuracin tengo cuatro zonas: fw (el propio cortafuegos y mi estacin de trabajo), net (Internet) y loc (la red local). Los nombres de las zonas deben ser cortos (5 caracteres o menos) y pueden contener letras o nmeros. Debemos saber que no podemos usar el nombre de zona especial all. Tampoco nos podemos referir a una zona distinta a la del cortafuegos mediante la variable FW del archivo shorewall.conf. Este nombre cambia por defecto a fw. Aunque no proporcionamos ningn servicio a ordenadores fuera de nuestra red local necesitamos la zona Internet. Recordemos que las reglas iptable se definen mediante una conexin especfica, o lo que es lo mismo, definida por dos puntos finales. Uno de los puntos puede ser nuestra estacin de trabajo, siendo el otro Internet. Por tanto necesitamos definir una zona especficamente como Internet. Debemos saber que estos nombres son solo un acuerdo. Si bien son los que Shorewall usa por defecto para estas zonas, las podemos llamar como queramos mientras que seamos consistentes

Figura 1: Una configuracin Shorewall para entornos empresariales. Ntese las distintas zonas de seguridad.

Debido a que iptables asume la tarea de manipular tablas dentro del ncleo, Shorewall no se necesita ms una vez lo hemos ejecutado. Incluso podemos ver que esta ocurriendo echando un vistazo al propio programa Shorewall. No es necesario rebuscar a travs de mucho cdigo. El programa Shorewall (normalmente /sbin/shorewall) es un archivo de comandos. Para que iptables sepa lo que debe hacer debemos indicarle al ncleo las reglas. Las llamadas rulesets se definen dentro de las iptables y estn compuestas de una conexin y una serie de clasificadores. Esto determina si una conexin en particular se permite y si y como debe ser manipulado o redirigido

el paquete. Este concepto es bsicamente comn en todo software cortafuegos y puede utilizarse en redes con decenas, incluso cientos de ordenadores, si bien es probable que, con muchos ordenadores hablando entre ellos, prefiramos subdividir nuestra red en pequeos segmentos. Cada segmento tambin puede ser gestionado por su propio cortafuegos Shorewall. Algo que debemos saber es que no necesitamos dedicar un equipo especficamente como cortafuegos. Si bien esto es una prctica comn y generalmente una buena idea, los usuarios domsticos no dispongan del espacio necesario para usar un equipo especfico para cada funcin. Si nuestra estacin de trabajo se

www.linuxmagazine.com.es

Nmero 03

23

022-026_ShoreWall_Linux3 15.02.2005 18:08 Uhr Pgina 24

PORTADA

Shorewall

Listado 1: Archivo de zones de ejemplo


01 #ZONE 02 net 03 loc 04 fw DISPLAY COMMENT Net the Internet zone Local FW the local network the firewall

05 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

a los largo de los archivos de configuracin. Los permisos en el directorio /etc/shorewall est puesto en 700 por defecto, lo que significa que solo el propietario (raz) tiene acceso. Incluso el permiso de lectura puede ser peligroso puesto que alguien puede ser capaz de ver un agujero en la seguridad y explotarlo. Las zonas estn definidas en el archivo /etc/shorewall/zones. Cada entrada tiene tres valores: nombre de la zona (usado para referirse a sta en los otros archivos), nombre a mostrar (aparece cuando shorewall esta cargando las reglas) y un comentario. El listado 1 nos muestra el archivo zones bsico.

net ppp0 routefilter,norfc1918 loc eth0 detect -

Definicin de los Caminos de Comunicacin


Si bien hemos definido las zonas, el cortafuegos an no sabe como comunicarse con cada zona. Esto es debido a que an no hay asociacin entre los nombres de las zonas y la propia red. Esto se hace usando el archivo /etc/shorewall/interfaces, compuesto de cuatro columnas: zona, interfaz, difusin y opciones. En mi sistema, el archivo interfaces es parecido al que aparece en el listado 2. La zona es simplemente el nombre de la zona cogido del archivo zones. El interfaz es el nombre de la interfaz de la red. Por ejemplo, en mi conexin DSL, que usa el protocolo punto a punto (PPP), el nombre de la interfaz es ppp0. El nombre del interfaz para la tarjeta de red es eth0. Para saber que interfaces tenemos debemos usar el comando /sbin/ifconfig. La columna difusin es la direccin de difusin de la red anexa a esa interfaz. Como habrs podido imaginar, la columna opciones especifica cualquier opcin que deseemos usar. En mi sistema aparecen dos entradas como las siguientes:

Como podemos observar, la zona Internet est conectada a la interfaz ppp0 y la zona local est conectada a la interfaz eth0. Debido a que tengo tres zonas, puede que nos preguntemos por qu no hay ninguna lnea para la zona del cortafuegos. Bueno, es sencillo, el cortafuegos se conecta a las otras zonas a travs de una de las interfaces ya especificadas. Por tanto quizs sea mejor pensar en el archivo interface como el lugar donde se define que interfaz usa el firewall para hablar con las otras zonas. En el caso de la interfaz ppp0 la columna difusin tiene un guin (-). Debido a que la conexin PPP no tiene difusin, podramos haberlo dejado en blanco. No obstante, como deseaba especificar algunas opciones adicionales, necesitaba ocupar el espacio de alguna manera. Si no hubiera opciones simplemente podramos haber dejado los dos espacios en blanco. No obstante, a m siempre me gusta incluir un guin en vez de dejar el espacio libre con el fin de recordar que falta algo. La opcin routefilter que hemos especificado le indica al ncleo que debe rechazar cualquier paquete de la interfaz indicado cuya direccin origen haya sido encaminada fuera con un interfaz distinta. En este caso, si el interfaz ppp0 recibe un paquete con una direccin original entrante que normalmente se habra dirigido fuera desde la interfaz eth0, esta sera abandonada. Esto es llamado anti-spoofing.

La segunda opcin, norfc1918, indica al ncleo que no debe enrutar direcciones especificadas como privadas en RFC 1918. RFC 1918 lista una serie de rangos de direcciones que pueden ser usadas por cualquiera y no deben se enrutadas. Esta opcin asegura que no lo sern. Los detalles respecto a RFC 1918 pueden ser encontrados en [3]. Aqu hemos tenido un problema. Queremos que nuestros otros ordenadores sean capaces de acceder a Internet, pero tienen direcciones en el rango marcado por RFC 1918. Entonces, cmo pueden acceder a Internet? Bueno, eso lo veremos en breve. Podemos configurar Shorewall de forma que se comporte de determinadas maneras en base a las zonas ajustando condiciones especficas para cada zona. Los ajustes por defecto para cada zona son iguales (como nos podemos imaginar) y estn en el archivo policy. Los campos en este archivo son: cliente (la zona origen), servidor (la zona destino), poltica (lo que se debe hacer por defecto) y nivel de registro (cuanta informacin debe ser almacenada). El listado 3 muestra un archivo de poltica de ejemplo. Observemos las ltimas dos lneas. La primera indica que cualquier trfico que haya sido comprobado y venga desde Internet simplemente debe ser abandonado (ignorado). Tenemos cuatro opciones para la poltica de conexin: ACCEPT (Aceptar) - Acepta la solicitud de conexin. DROP (Dejar) - Ignora la solicitud de conexin. REJECT (Rechazar) - Devuelve un error determinado al equipo solicitante. CONTINUE (Continuar) - Nos permite tener anfitriones en mltiples zonas y aplicar reglas de ambas zonas. El nivel de registro determina cuanta informacin se envia al registro del sistema (syslog). Debemos recordar que todo esto se realiza con los iptables que existen en el ncleo. Esto significa que toda la informacin es enviada por la

Listado 2: Archivo de interfaces de ejemplo


01 #ZONE OPTIONS BROADCAST INTERFACE 02 net ppp0 routefilter,norfc1918 03 loc eth0 detect 04 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

24

Nmero 03

www.linuxmagazine.com.es

022-026_ShoreWall_Linux3 15.02.2005 18:08 Uhr Pgina 25

Shorewall

PORTADA

utilidad de registro del ncleo. Todo lo que nosotros hacemos es especificar la prioridad de los mensajes que a registrar. Debemos repasar la pgina principal del syslogd para encontrar ms detalles al respecto. Las dos ltimas lneas de mi archivo de poltica tienen este aspecto:
net all DROP info all all REJECT info

La primera lnea indica que cualquier trfico que no haya comprobado y provenga de Internet debe ser abandonado (ignorado). No obstante, el resto del trfico debe ser rechazado. Esto puede parecer un poco absurdo al principio, pero tiene sentido cuando consideramos las diferencias entre abandonar y rechazar. Cuando un paquete viene de Internet con destino a una direccin especfica o puerto no permitido deseamos ignorarlo. No deseamos que el remitente sepa lo ocurrido. Esto puede darle al usuario alguna pista respecto de cmo evadir la seguridad. Por otro lado, los paquetes provenientes de cualquier otro lugar (mi estacin de trabajo o el equipo local) son rechazados, dando indicaciones a la aplicacin cliente de lo ocurrido. Estamos configurando el comportamiento por defecto en el archivo de la zona. Esto significa que si no definimos ninguna conexin adicional ste ser el comportamiento que aplicar en el archivo de poltica. En mi archivo de poltica solo tengo una entrada para la zona de red. Tericamente, esto significa que todos los paquetes que provengan de Internet deben ser abandonados. No obstante, tengo en mi mquina un servidor Web con mucha informacin de referencia que deseo acceder desde el trabajo. Debido a que esta conexin es va Internet, el archivo de reglas no me permitir acceder a mi servidor. La respuesta a este problema es el archivo reglas. El archivo de reglas es el corazn de la configuracin de Shorewall. Aqu definimos una conexin especfica en trminos de zonas, servicios de red (puertos), segmento de red, equipos individuales y bsicamente cualquier combinacin en la que podamos pensar. Cuando llegue una

solicitud saliente lo primero que hace el sistema es comprobar la solicitud con las conexiones definidas en el archivo de reglas. Si no se encuentra ninguna usa el valor por defecto del archivo de poltica. Las columnas del archivos de reglas son: accin a ejecutar, la fuente de la solicitud, el destino, el protocolo usado, el puerto de destino, el puerto origen y el destino original. Adicionalmente a las acciones del archivo zona, tenemos un par de acciones adicionales en el archivo de reglas. DNAT nos permite hacer traducciones de direcciones de destino de red (Destination Network Address Translation). De esta forma las solicitudes pueden ser redireccionadas a equipos distintos e incluso a distintos puertos en esos equipos. La accin REDIRECT (redireccionar) redireccionar las solicitudes a puertos especficos en el mismo equipo. Esto se utiliza normalmente para redireccionar solicitudes HTTP al proxy local (por ejemplo, squid). Para redes ms pequeas que no necesitan proporcionar acceso completo a Internet he averiguado que la accin REDIRECT es extremadamente til (posiblemente slo permitiendo acceso HTTP). Hay una entrada que es como sigue:
REDIRECT loc 3128 tcp www -U !10.2.38.0/24

ble sin necesidad de tener que pasar a travs de un proxy. La accin LOG (registro) primero registrar el paquete y luego continuar con la siguiente regla de aplicacin. La accin QUEUE (cola) se utiliza para dirigir paquetes a aplicaciones de espacio de usuario, las cuales se manipulan y se devuelven a la pila IP. Una norma a seguir cuando configuremos el archivo rules es poner apagar todo (off>) en principio y luego ir encendiendo cosas segn las necesitemos. Muchas personas lo hacen al revs empezando con una red abierta y luego van apagando servicios innecesarios. En el primer caso, si olvidamos algo lo nico que ocurre es que no tendremos acceso segn esperamos (lo que es un simple inconveniente), pero si esto ocurre en el segundo caso, olvidar apagar algo puede significar estar abierto a un ataque.

Cavando ms profundo
El archivo /etc/shorewall/hosts nos permite definir anfitriones especficos. Habitualmente no hay razones para aadir nada en el archivo hosts para redes pequeas. Cuanto ms pequea es la red es ms posible que todas la mquinas en una zona estn configuradas de la misma forma (o dicho de una forma ms correcta, que todas las mquinas de un interfaz concreto tienen la misma configuracin). Este puede que no sea el caso y puede que necesitemos diferentes reglas de acceso para distintas mquinas de la misma red. Hace un par de meses mi hijo comenz a jugar a un juego de rol en Internet. Esto implica que l necesita algo ms de un simple acceso HTTP a Internet, por lo que no pude continuar simplemente usando la redireccin al proxy Squid como describimos antes. Para proporcionar este acceso he definido un grupo especfico de ordenadores como una zona nueva. Primero he creado una nueva entrada en mi archivo de zonas para esta nueva zona, la cual he llamado juego (game). Luego he creado una entrada en el archivo hosts que solo contiene el equipo de mi hijo:
game eth0:10.2.38.13.

En un interfaz de comandos, esta entrada indica que todas la conexiones entrantes usando el protocolo TCP y solicitando servicios www (por ejemplo HTTP) sern redireccionados al puerto 3128. Este es el puerto en el que el servidor proxy Squid est escuchando. Mirando en el destino original especificamos una completa red tipo C usando la anotacin CIDR: 10.2.38.0/ 24. Adems esta entrada est precedida de una marca de exclamacin. Como en otros contextos, la marca de exclamacin se utiliza para negar el acceso. Por tanto el significado de la lnea entera en inverso. Lo que significa que todas las solicitudes excepto aquellas destinadas a direcciones en la red 10.2.38.0 son redireccionadas a Squid. Esto tiene sentido porque 10.2.38.0 es mi red local y cualquier servidor Web en la red local puede o debe ser accesi-

Pero esto no es todo. Recordemos que mi red local es 10.2.38.0/24. ste es una de

www.linuxmagazine.com.es

Nmero 03

25

022-026_ShoreWall_Linux3 15.02.2005 18:08 Uhr Pgina 26

PORTADA

Shorewall

Listado 3: Archivo policy de ejmplo


01 #SOURCE DEST 02 fw net 03 fw 04 loc 05 loc 06 net 07 all loc net fw all all POLICY ACCEPT ACCEPT REJECT ACCEPT DROP REJECT LOG info info info info info info LEVEL

08 # LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

las redes privadas listadas en RFC 1918. Incluso si yo quisiese dirigirla a travs de mi tarjeta DSL, podramos apostar a que mi ISP no va ha aceptarla. Entonces, qu podemos hacer? La solucin es algo llamado enmascarar IP (IP masquerading). Como su nombre implica, una direccin IP es enmascarada por las otras. En mi caso, la direccin IP en la tarjeta DSL (la cual tiene una direccin de Internet vlida) es enmascarada por la direccin IP en la red local. Por tanto necesito creer una entrada en el archivo /etc/shorewall/masq como la siguiente:
ppp0 10.2.38.0/24

sitaba al margen de acceso a la Web, an continuo usando REDIRECT para el acceso Web.

Resolucin de problemas y acceso


Es posible (y probable) que tengamos problemas la primera vez que configuremos Shorewall. Por tanto, rastrear las causas de un problema nos ser til. Una tcnica til para depurar problemas es ajustar el nivel de registro en el archivo policy. Ajustarlo para depurar nos proporciona mucha ms informacin. Entrar en mucho detalle respecto a las entradas del registro est ms all del alcance de este artculo, pero es bastante fcil entender de que van incluso sin comprender del todo la terminologa. Por ejemplo, veamos estos datos:
Nov 1 11:19:32 saturn kernel:U Shorewall:net2all:DROP:IN=ppp0U OUT= MAC= SRC=1.2.3.4 DST=10.2.38.11U LEN=48 TOS=0x00 PREC=0x00U TTL=116 ID=47048 DF PROTO=TCP SPT=1 292 DPT=1080U WINDOW=64240 RES=0x00 SYN URGP=0

Esta entrada hace que todo el trfico saliente de la interfaz ppp0 desde la red clase C 10.2.38.0 debe ser enmascarada. En este punto ya hemos acabado la configuracin bsica del enmascarador. No obstante, lo siguiente es la parte ms complicada. No fue muy sencillo encontrar informacin acerca de cmo ejecutar este juego a travs de cortafuegos. De hecho encontr determinada informacin al respecto que sugeran deshabilitar el cortafuegos si se desea jugar. Bien, pues al final consegu que funcionara. Para hacerlo necesit ajustar el nivel de acceso en el archivo policy para depurar y vigilar en el archivo de registros todos los intentos de conexin desde el equipo de mi hijo con cualquier otra mquina para entonces comprobar el DNS para ver si fue una mquina de los desarrolladores del juego. Entonces aad un puerto especfico a mi archivo rules. Si lo hubiese deseado, tambin podra haber aadido reglas para el servicio WWW (puerto 80). No obstante, debido a que esto es lo nico que mi hijo nece-

Estos son datos estndar de /var/log/messages. Al principio tenemos la fecha, el nombre del equipo y el registro del sistema (kernel en este caso). A continuacin encontramos el mensaje propiamente dicha. Fcilmente podemos ver que el paquete entraba en mi tarjeta DSL (ppp0) y que el paquete fue abandonado. Tambin podemos observar que estaba usando la conexin net2all de Internet a todas las otras zonas. Si volvemos a repasar lo comentado respecto al archivo policy veremos que tenamos una entrada que indicaba que el comportamiento por defecto deba ser el abandono de todos los paquetes

que vengan de Internet hacia el resto de las interfaces. Haba un paquete intentando acceder el puerto 1080 (DPT). No hay nada ejecutndose en ese puerto y desde luego no me he comunicado con nadie que deba usar ese puerto. Puesto que no hay ningn servicio estndar asociado a este puerto no hay razn para que nadie intente acceder a el desde Internet, por lo que parece bastante obvio que alguien intentaba aprovecharse de un error de Windows. Si el equipo remoto (o incluso otro equipo en la misma red) continua intentando acceder a distintos puertos de mi equipo puede que desee aadirlo a la lista negra. Esto se hace aadiendo la direccin del anfitrin o de red en formato CIDR al archivo /etc/shorewall/blacklist. Eso implica que, al margen de que cualquier otra entrada les permita el acceso, estos equipos tienen el acceso especficamente prohibido. Por defecto, Shorewall usa un sistema de acceso que normalmente enva un mensaje a /var/log/messages. Incluso cuando configur syslogd para enviar mensajes a otro archivo encontr molesto hacer que el registro de mi cortafuegos no se confundiera con otros mensajes del kernel. Para resolverlo podemos usar el soporte ULOG del kernel. Este debe estar disponible para nuestro kernel, siendo habitual en la mayora de las distribuciones. No obstante, el paquete ulogd no est siempre disponible, por lo que es posible que lo tengamos que descargar desde [4]. Una vez ulogd esta configurado en nuestro sistema no usaremos ms los niveles de acceso del syslogd. En su lugar usaremos el ULOG. I

INFO
[1] Netfilter Website: http://www.netfilter. org [2] Shorewall Website: http://www. shorewall.net [3] Asignacin de Direcciones Privadas de Internet RFC 1918: http://rfc.net/rfc1918. html [4] Ulog: http://www.ulog.ch/english/index. html [5] Squid Proxy: http://www.squid-cache.org/

26

Nmero 03

www.linuxmagazine.com.es

You might also like