Vous êtes sur la page 1sur 28

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.

org
Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Iptables y Shorewall
Copyright (c) 2008 Franky Almonte. Se concede permiso para copiar, distribuir y/o modificar este documento bajo los trminos de la Licencia de Documentacin Libre de GNU, Versin 1.2 o cualquier otra versin posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la licencia est incluida en la seccin titulada GNU Free Documentation License.

Objetivos: 1. Entender el funcionamiento de Netfilter/Iptables 2. Configurar un filtro de paquetes con Iptables (scripts) y Shorewall Requisitos: 1. Conocimientos sobre GNU/Linux o Unix 2. Programacin en consola (shell scripting) 3. Conocimientos sobre TCP/IP 4. Como compilar tu propio ncleo (no indispensable).

Introduccin
Iptables es un software que filtra paquetes o datagramas. Un filtro de paquetes trabaja primordialmente en la capa 2 del modelo de referencia TCP/IP. Iptables tambin tiene la habilidad de trabajar en la capa 3. Pero por definicin un filtro de paquetes trabaja principalmente en la capa 2. Si la implementacin de un filtro de paquetes es llevada a cabo estrictamente en su definicin, este podra, en otras palabras, ser habil para filtrar paquetes basndose en sus cabeceras IP (Direccin de Origen y de Destino, TOS/DSCP/ECN, TTL, Protocol, etc.). Adems, puesto que la implementacin de Iptables no es estricta alrededor de esta definicin, este tambin es hbil para filtrar paquetes basadonse en otras cabeceras que vienen en lo interior del paquete (TCP, UDP, etc.), y mas hacia abajo (Direccin MAC de origen). Iptables no sigue flujos de informacin junta. Iptables mantiene un rastreo de los paquetes y vela porque esto sean del mismo flujo (mediante nmeros de secuencias, nmeros de puertos, etc.) casi de la misma forma como la pila real TCP/IP. Esto es llamado Rastreo de conexin, y gracias a esto podemos hacer cosas como DNAT y SNAT, as como tambin aciertos del estado de los paquetes.

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Trminos y expresiones en filtrado de paquetes


Para entender el resto del contenido del documento existen algunos trminos generales que uno debe entender, incluyendo algunos detalles sobre TCP/IP. He aqu de algunos trminos usados en filtrado de paquetes:

Drop/Deny Cuando un paquetes es denegado, este simplemente es borrado, y no son tomadas acciones futuras. No se responde al host emisor que fue denegado, ni el host receptor del paquete es notificado en ninguna forma. El paquete simplemente desaparece. Reject Este es bsicamente los mismo que una poltica u objetivo Drop/Deny, excepto que solo enviamos una respuesta al host emisor informndole que el paquete fue denegado. State Un estado especifico de un paquete en comparacin a un flujo completo on paquetes. Por ejemplo, si un paquete es el primero que el cortafuegos ve o sabe acerca de el, este es considerado como nuevo (el paquete SYN en una conexin TCP), o si este es parte de una conexin ya establecida que el cortafuegos conoce, es considerada como establecida. Los estados son conocidas a travs del sistema de rastreo de conexiones, el cual mantiene registros de todas las sesiones. Chain Una cadena contiene un lista de reglas que son aplicadas en los paquetes que atraviesan la cadena. Cada cadena tiene un propsito especifico (ejemplo: a cuales tablas este esta conectado, las cuales especifican que puede hacer esta cadena), asi como tambien un area de aplicacin especifica (ejemplo: solo paquetes reenviados, o solo paquete destinados a este host). Table Cada tabla tiene un proposito especifico, y en Iptables hay 4 tablas. Las tablas son: raw, nat, mangle y filter. Por ejemplo, la tabla filter esta espcialmente disenada para el filtrar paquetes, mientras que la tabla nat esta especialmente disenada para paquetes NAT (Network Address Translation). Match Esta palabra puede tener dos significados diferentes cuando se habla de filtrado IP. La primera significa un simple acierto que una regla dice que esta cabecera debe contener 'esto' y 'esta' informacin. Por ejemplo, el acierto --source nos dice que que la direccin fuente debe ser una red especifica o una direccin de un host. El segundo significado es si toda una regla es acertada. Si un paquete acierta toda la regla, las instrucciones jump o target se llevaran a cabo (ejemplo: el paquete sera denegado). Target Generalmente hay un objetivo fijado para cada regla en un conjunto
2

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

de reglas. Si la regla ha acertado completamente, la especificacin del objetivo nos dice que hacer con el paquete. Por ejemplo, si deberamos denegarlo o aceptarlo, o NATearlo, etc. Cambien hay algo llamado la especificacin de salto (jump), la cual especifica a cual cadena debe saltar. Rule En la mayora de las implementaciones de filtros IP, una regla es un conjunto de un acierto o diversos aciertos juntos con un simple objetivo, incluyendo la implementacin Iptables. Existen algunas implementaciones que te permiten usar diversos objetivos/acciones por regla. Ruleset Un conjunto de reglas es el conjunto completo de reglas que se colocan en la implementacin del filtro IP en su conjunto. En el caso de Iptables, estas incluyen todas las reglas puestas en las tablas filter, nat, raw y mangle, y en todas las cadenas subsecuentes. La mayora del tiempo, estas son escritas abajo en el archivo de configuracin. Jump La instruccin de salto esta estrechamente relacionada al objetivo (target). Una instruccin de salto se escribe exactamente como un objetivo (target) en Iptables, con la excepcion que en lugar de escribir el nombre del ojbetivo (target), se escribe el nombre de otra cadena (chain). Si la regla acierta, el paquete sera, por lo tanto, enviado a esta segunda cadena (chain) y sera procesado de forma usual en esta cadena. Connection tracking Un cortafuegos el cual implemente seguimiento de conexiones es hbil de seguir conexiones/flujos. La habilidad de hacer eso hace a menudo el impacto de mucho uso de procesador y memoria. Sin embargo, el lado bueno es que el cortafuegos sera mucho mas seguro con el seguimiento de conexiones apropiadamente usado por la implementador de las polticas del cortafuegos. Accept Aceptar un paquete y dejarlo atravesar las reglas del cortafuegos. Esto es lo contrario de los objetivos Drop/Deny, as como tambin del objetivo reject. Policy Existen dos tipos de polticas de las que hablamos la mayora del tiempo cuando se implementa un cortafuegos. Primero tenemos polticas de cadenas, las cuales le dicen a la implementacin del cortafuego el comportamiento por defecto a tomar en un paquete si no acert ninguna regla. El segundo tipo de poltica es la poltica de seguridad que debemos escribir en la documentacin, por ejemplo para toda la empresa o para este segmento de red en especifico. Las polticas de seguridad son muy buenos documento a tener bien pensado y estudiar apropiadamente antes de empezar a implementar un cortafuegos.

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Atravesando las tablas y cadenas


Cuando un paquete entra en el cortafuegos alcanza el hardware y es procesado en el ncleo por su driver correspondiente. Despus el paquete empieza a recorrer una serie de etapas en el ncleo antes de ser enviado a la aplicacin adecuada (localmente), reenviada hacia otro host, o cualquier otra operacin. Primero veremos cuando un paquete es destinado a nuestro porpio host local (nuestro equipo). Recorrer los siguientes pasos antes de ser entregado a la aplicacin que lo requiere:
Etapa Tabla 1 2 3 mangle PREROUTING Cadena Comentario En los cables (por ejemplo Internet) Llega a la interfaz de red (por ejemplo eth0) Esta cadena se usa normalmente para modificar/"deformar" (mangle) paquetes, es decir, cambiar el TOS y cosas as. Esta cadena se usa principalmente para la traduccin de direcciones de red de destino (DNAT, Destination Network Address Translation). Debes evitar filtrar en esta cadena ya que ser puenteada (bypassed) o esquivada en ciertos casos. Decisin de enrutamiento, o sea, est el paquete destinado a nuestro host local o debe ser reenviado?, hacia dnde?. mangle INPUT En este punto se alcanza la cadena INPUT de la tabla mangle. Usaremos esta cadena para modificar/"retocar" paquetes despus de que hayan sido enrutados, pero antes de que se enven al proceso de destino. Aqu es donde filtraremos todo el trfico entrante destinado a nuestro host local. Ten en cuenta que todo el trfico entrante pasa a travs de esta cadena, sin importar la interfaz por la que entre o de dnde proceda. Proceso/aplicacin local (es decir, programa cliente/servidor)

nat

PREROUTING

7 8

filter

INPUT

Tabla 1: Host local como destino

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Ahora veremos el caso cuando los paquetes sales de nuestro host y las etapas por las que pasan:
Etapa Tabla 1 2 Cadena Comentario Proceso/aplicacin local (es decir, programa cliente/servidor) Decisin de enrutamiento. Qu direccin de origen usar, qu interfaz de salida usar, y otra informacin que necesita ser recopilada. mangle OUTPUT nat filter OUTPUT OUTPUT Aqu es donde se modifican los paquetes; se sugiere que no filtres en esta cadena porque pueden producirse efectos secundarios. Esta cadena puede ser usada para hacer NAT a los paquetes que salen desde el host. Aqu es donde filtramos los paquetes salientes de nuestro host local. La cadena POSTROUTING de la tabla mangle se usa principalmente cuando queremos modificar los paquetes antes de que dejen nuestro host, pero despus de tomar las decisiones de enrutamiento. Esta cadena ser alcanzada tanto por los paquetes que atraviesan el cortafuegos, como por los generados por l mismo. Aqu es donde efectuamos la traduccin de las direcciones de red de origen (SNAT, Source Network Address Translation). Es conveniente que no filtres en esta cadena ya que pueden producirse efectos secundarios y determinados paquetes podran colarse incluso aunque se haya establecido la poltica DROP (desechar) como poltica por defecto. Sale al exterior por alguna interfaz (por ejemplo, eth0) En los cables (por ejemplo, Internet)

3 4 5

mangle POSTROUTING

nat

POSTROUTING

8 9 Tabla 2: Host local como origen

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Ahora se asume que el paquete esta destinados a otro host de otra red y necesita ser reenviado. El paquete sigue los siguientes pasos:

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Etapa Tabla 1 2 3 mangle PREROUTING Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0 Cadena Comentario En los cables (por ejemplo, Internet) Llega hasta la interfaz de red (por ejemplo, eth0) Esta cadena se usa normalmente para modificar paquetes, o sea, para cambiar el TOS y acciones similares. Esta cadena se usa principalmente para hacer DNAT (traduccin de direccin de destino). El SNAT (traduccin de direccin de origen) se realiza ms adelante. Debes evitar filtrar en esta cadena ya que en ciertos casos ser puenteada o esquivada. Decisin de enrutamiento, o sea, el paquete est destinado a nuestro propio host local, o debe ser reenviado?, hacia dnde?. El paquete es enviado a la cadena FORWARD de la tabla mangle. sto puede aprovecharse para necesidades muy especficas dnde queremos modificar paquetes despus de la decisin de enrutamiento inicial, pero antes de la ltima decision de enrutamiento, hecha justo antes de que el paquete sea enviado. El paquete es enrutado hacia la cadena FORWARD. Solamente los paquetes reenviados pasan por aqu y es donde hacemos todo el filtrado. Ten en cuenta que todos los paquetes reenviados (en cualquier direccin) pasan por aqu, as que necesitars pensar en llo cuando escribas tu conjunto de reglas. Esta cadena se usa para efectuar los tipos especficos de modificacin de paquetes (packet mangling) que queramos llevar a cabo despus de que todos los tipos de decisiones de enrutamiento se hayan tomado, pero estando el paquete an en esta mquina. Esta cadena debe ser usada principalmente y sobretodo para efectuar SNAT. Debes evitar filtrar aqu ya que ciertos paquetes podran "pasar por delante" de la cadena sin ni siquiera rozarla. Aqu es tambin dnde se realiza el enmascaramiento (Masquerading). Sale por la interfaz de salida (por ej. eth1). En los cables de nuevo (por ejemplo, la red local).

nat

PREROUTING

mangle FORWARD

filter

FORWARD

mangle POSTROUTING

nat

POSTROUTING

10 11 Tabla 3: Paquetes reenviados

Toma en cuenta que no hay cadenas o tablas especficas para interfases diferentes ni nada por el estilo. La cadena FORWARD es siempre atravesada por todos los paquetes que son reenviados a travs del cortafuegos. Tabla mangle Esta tabla debe ser principalmente usada para modificar paquetes, como ya
7

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

hemos dicho antes. En otras palabras, aqu puedes usar libremente las comparaciones de modificacin para cambiar el campo TOS (Type Of Service), entre otras cosas. Objetivos para los que nicamente se destina la tabla mangle:

TOS TTL MARK

Tabla nat Esta tabla debe ser usada slo para hacer NAT (Network Address Translation) a los diferentes paquetes. En otras palabras, debe ser empleada solamente para traducir el campo origen del paquete o el campo destino. Ten en cuenta que tal como hemos dicho antes, slo el primer paquete de un flujo alcanzar esta cadena. Despus, al resto de paquetes del mismo flujo de datos se les aplicar la misma accin que al primero. Los objetivos que hacen este tipo de cosas son:

DNAT SNAT MASQUERADE

El objetivo DNAT (Destination Network Address Translation) se emplea principalmente en los casos donde se tiene una IP pblica y se quiere redirigir los accesos al firewall hacia algn otro host (en una "zona desmilitarizada", DMZ, por ejemplo). Dicho de otro modo, cambiamos la direccin de destino del paquete y lo re-enrutamos a otro host. SNAT (Source Network Address Translation) es principalmente usada para cambiar la direccin de origen de los paquetes. La mayora de las veces querrs esconder tus redes locales, DMZ, etc. Un ejemplo muy bueno podra ser cuando queremos sustituir las direcciones IP de la red local que est tras el cortafuegos, por la direccin IP del propio cortafuegos, que posee una IP pblica hacia fuera. Con este objetivo el firewall automticamente har SNAT y de-SNAT sobre los paquetes, lo cual hace posible que las conexiones provenientes de la LAN salgan a Internet. El objetivo MASQUERADE se usa exactamente para lo mismo que SNAT, pero
8

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

MASQUERADE requiere un poquito ms de trabajo del procesador. La razn es que cada vez que llega un paquete al objetivo MASQUERADE, automticamente chequea qu direccin IP debe asignarle, en lugar de hacer como SNAT, que simplemente utiliza la direccin IP configurada. Tabla filter La tabla filter se usa principalmente para el filtrado de paquetes: podemos comparar y filtrar paquetes de la forma que queramos. Se trata del lugar en que miramos el contenido de los paquetes y tomamos la determinacin de desecharlos (DROP) o aceptarlos (ACCEPT). Por supuesto, podemos hacer filtrado antes, pero esta tabla en particular fue diseada para realizar todas las operaciones de filtrado.

La maquina de estados
La mquina de estados es una parte especial de iptables que no debera llamarse as ("mquina de estados"), puesto que en realidad es una mquina de seguimiento de conexiones. Sin embargo, mucha gente la conoce por el primer nombre. El seguimiento de conexiones se efecta para que la estructura de Netfilter sepa cul es el estado de cada conexin especfica. Los cortafuegos que trabajan de esta manera normalmente se denominan "stateful firewalls" (cortafuegos que consideran las peticiones y respuestas de una mquina como una nica conexin de un mismo flujo de datos; podramos traducirlo como "cortafuegos de flujos"), mientras que los que no lo hacen se denominan "non-stateful firewalls" (cada peticin es independiente, aunque provenga de la misma mquina; podramos traducirlo como "cortafuegos de conexiones"). Los cortafuegos de tipo "stateful" son mucho ms seguros, pues nos permiten elaborar conjuntos de reglas mucho ms precisos. En Iptables los paquetes se pueden relacionar con las conexiones mediante cuatro "estados" diferentes: NEW (nuevo), ESTABLISHED (establecido), RELATED (relacionado) e INVALID (invlido o no vlido). Mediante la comparacin --state podemos controlar fcilmente qu o quin tiene permiso para iniciar nuevas sesiones. Todo el seguimiento de las conexiones la realiza una estructura especial del ncleo llamada "conntrack". El "conntrack" puede cargarse como mdulo o como una parte ms del ncleo.
9

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Todo el seguimiento de conexiones se efecta en la cadena PREROUTING, excepto los paquetes generados localmente, que son controlados en la cadena OUTPUT. sto significa que Iptables realizar todo el recalculo de estados en estas dos cadenas de la tabla nat: si somos nosotros los que enviamos el paquete inicial del flujo, su estado se establece como NEW (nuevo) en la cadena OUTPUT, mientras que al recibir el paquete de retorno (el que "contesta" al paquete inicial) el estado del flujo se cambia a ESTABLISHED (establecido) en la cadena PREROUTING. Por el contrario, si el primer paquete no lo hemos originado nosotros, el estado NEW se establece en la cadena PREROUTING.

Cmo se escribe una regla


Cada regla es una lnea que lee el ncleo para saber qu hacer con un paquete. Si todos los criterios (o comparaciones) se cumplen, entonces se ejecuta la instruccin objetivo (o salto). Normalmente deberas escribir tus reglas con una estructura similar a sta: iptables [-t tabla] comando [comparacin (match)] [objetivo/salto (target/jump)] La tabla por defecto es la tabla filter, asi que si deseas utilizar otra tabla debe usar la opcion [-t tabla] para indicarla. Debes tener en cuenta que el comando debera ser siempre lo primero, o a lo sumo justo detrs de la especificacin de la tabla. Se emplea el "comando" para decirle al programa qu hacer, como por ejemplo insertar o aadir una regla al final de una cadena, o borrar una regla. La comparacin es la parte de la regla enviada al ncleo que especifica el carcter concreto del paquete, lo cual lo diferencia de todos los dems paquetes. Aqu es dnde se puede determinar de qu direccin IP viene el paquete, de qu interfaz de red, la IP destino, el puerto, el protocolo, etc. Por ltimo tenemos el objetivo del paquete. Si todas las comparaciones se cumplen para un paquete, le decimos al ncleo qu hacer con l. Por ejemplo, podemos hacer que enve el paquete a otra cadena que hayamos creado y que es parte de esta tabla. Podemos hacer que deseche el paquete y no haga nada ms con l, o podemos enviar una respuesta especfica al remitente.
10

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Tablas La opcin -t especifica qu tabla utilizar. Por defecto se emplea la tabla filter, aunque se puede usar cualquiera de las siguientes tablas
Tabla Descripcin La tabla nat se emplea principalmente para la traduccin de direcciones de red (Network Address Translation). Los paquetes que son filtrados por esta tabla acaban con sus IPs modificadas, de acuerdo con nuestras reglas (las de la tabla). De todos los paquetes de un mismo flujo, slo el primero pasa por esta tabla: asumiendo que se permite el paso del primer paquete de un flujo, al resto de paquetes del ese flujo se les aplican automticamente las mismas acciones realizadas con el primer paquete (sus IPs son "NAT-eadas" o filtradas por la tabla NAT; o se enmascaran). Esta tabla se emplea principalmente para "retocar" paquetes. Entre otras cosas, se puede cambiar el contenido de diferentes paquetes y el de sus cabeceras. Por ejemplo, se pueden cambiar los campos TTL, TOS o MARK. La tabla filter se debera emplear exclusivamente para filtrar paquetes. Por ejemplo, se pueden desechar (DROP), aadir a un registro de sucesos (LOG ), aceptar (ACCEPT) o rechazar (REJECT) paquetes sin problemas, igual que en el resto de tablas. Tenemos tres cadenas en esta tabla: la primera, FORWARD, se usa para todos los paquetes que no se generan localmente y que no estn destinados a nuestra mquina. INPUT se emplea en todos los paquetes que se destinan a nuestra mquina (el cortafuegos), mientras que OUTPUT se emplea para todos los paquetes generados localmente.

nat

mangle

filter

Table 4: Tablas de Iptables

Comandos Un comando le indica a iptables qu hacer con el resto de la regla que enviamos al analizador. Normalmente desearemos aadir o eliminar algo en una tabla determinada. En la siguiente tabla se muestran algunos de los comandos disponibles en Iptables:

11

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Comando Ejemplo Descripcin Comando Ejemplo Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0 -A, --append iptables -A INPUT ... Este comando aade la regla al final de la cadena. La regla siempre se pondr la ltima en el conjunto de reglas y lgicamente se comprobar la ltima, a no ser que posteriormente aadas ms reglas con este mismo comando. -D, --delete iptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1 Este comando borra una regla de la cadena. Esto puede hacerse de dos maneras: bien introduciendo la regla completa a comparar (como en el ejemplo anterior), bien especificando el nmero de regla que deseas eliminar. Si empleas el primer mtodo, debers escribir exactamente lo mismo que haya en la cadena a borrar. Si empleas el segundo mtodo, debers sealar el nmero exacto que tiene la regla en la cadena: las reglas estn numeradas progresivamente desde la primera, empezando con el nmero 1. -R, --replace iptables -R INPUT 1 -s 192.168.0.1 -j DROP Este comando sustituye la entrada existente en la lnea especificada. Funciona de la misma forma que el comando --delete, pero en lugar de eliminar completamente la entrada, la sustituye por una nueva. El uso ms habitual de este comando puede ser la experimentacin con iptables. -I, --insert iptables -I INPUT 1 --dport 80 -j ACCEPT Se inserta una regla en la posicin de la cadena que especifiquemos. En el ejemplo anterior se insertar en la posicin n 1 en la cadena INPUT, por lo que a partir de entonces ser la primera regla en esa cadena. -L, --list iptables -L INPUT Este comando ofrece una lista de todas las entradas de la cadena especificada. -F, --flush iptables -F INPUT Este comando elimina todas las reglas de una cadena, comenzando desde la que se ha especificado. Es equivalente a borrar cada regla una a una, pero bastante ms rpido. Se puede emplear sin opciones, con lo que borrar todas las reglas de todas las cadenas en la tabla especificada. -Z, --zero iptables -Z INPUT Este comando obliga a comenzar desde cero a todos los contadores de una cadena especificada, o de todas las cadenas de una tabla. Si has utilizado la opcin -v del 12

Descripcin

Comando Ejemplo Descripcin Comando Ejemplo Descripcin Comando Ejemplo Descripcin Comando Ejemplo Descripcin Comando Ejemplo Descripcin

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0 comando -L, probablemente habrs visto el contador de paquetes al principio de cada campo. Para "poner a cero" este contador, utiliza la opcin -Z. Esta funcin hace lo mismo que -L, salvo que -Z no hace ningn listado de las reglas. Si se emplean juntas -L y -Z (lo cual es correcto), las cadenas sern listadas primero y luego los contadores se reiniciarn (se pondrn a cero). Comando Ejemplo Descripcin Comando Ejemplo Descripcin Comando Ejemplo Descripcin Comando Ejemplo -N, --new-chain iptables -N allowed Este comando hace que el ncleo cree una nueva cadena con el nombre especificado en la cadena especificada. En el ejemplo anterior se crea una cadena llamada allowed. Ten en cuenta que no puede haber ninguna cadena ni ningn objetivo con el mismo nombre. -X, --delete-chain iptables -X allowed Este comando borra de la tabla la cadena especificada. Para que funcione, no debe haber ninguna regla que est relacionada con la cadena que se va a borrar. En otras palabras, debers borrar o cambiar todas las reglas que tengan algn vnculo con esa cadena antes de borrarla. -P, --policy iptables -P INPUT DROP Este comando hace que el ncleo establezca la poltica u objetivo por defecto en una cadena. Todos los paquetes que no coincidan con ninguna regla emplearn esa poltica de la cadena. Los objetivos permitidos son: DROP y ACCEPT (pueden haber ms; envame un correo si es as). -E, --rename-chain iptables -E allowed disallowed El comando -E hace que iptables cambie el nombre de una cadena del primer al segundo nombre. En el ejemplo anterior cambiaramos el nombre de la cadena de allowed (permitido) a disallowed (no permitido). Ten en cuenta que sto no afecta a la forma de actuar de la tabla, sino que es simplemente un cambio cosmtico.

Descripcin

Table 5: Comandos de Iptables

Opciones Ahora mostraremos unas cuantas opciones que pueden usarse con varios comandos:
Opcin -v, --verbose

13

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Comandos con los que se emplea Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

--list, --append, --insert, --delete, --replace Este comando ofrece una salida detallada (completa, descriptiva) y se emplea principalmente con el comando --list. En este caso se mostrar la direccin de la interfaz, las opciones de la regla y las mscaras TOS. Asmismo, tambin se incluyen los contadores de bytes y paquetes para cada regla. Estos contadores emplean las abreviaturas K (x1,000), M (x1,000,000) y G (x1,000,000,000). -x, --exact --list Esta opcin expande las numeraciones, o sea, no se emplean los mltiplos K, M o G, si no que se ven los paquetes y bytes exactos de los contadores de la regla en cuestin. Esta opcin slo es til con el comando --list y no tiene ningn inters en los dems comandos. -n, --numeric --list Esta opcin muestra valores numricos: las direcciones IP y los puertos se listarn con sus nmeros y no con sus nombres de servidor, red o aplicacin. Slo se utiliza con --list e ignora la opcin por defecto de traducir todos los valores numricos a servidores y nombres (donde sea posible). --line-numbers --list Empleando esta opcin con --list, cada regla se listar con su nmero de lnea. Puede ser conveniente saber qu nmero tiene cada regla al insertar reglas. Esta opcin slo tiene efecto con el comando --list. -c, --set-counters --insert, --append, --replace Esta opcin se usa cuando se crea o modifica una regla de forma que se reinicializan sus contadores de paquetes y bytes. La sintaxis sera algo as: --setcounters 20 4000, lo cual le dira al ncleo que fijara el contador de paquetes a 20 y el contador de bytes a 4000. --modprobe

Descripcin

Opcin Comandos con los que se emplea Descripcin Opcin Comandos con los que se emplea Descripcin Opcin Comandos con los que se emplea Descripcin Opcin Comandos con los que se emplea Descripcin Opcin

14

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Comandos con los que se emplea Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Todos Esta opcin se emplea para indicarle a iptables qu mdulo utilizar al probar mdulos o al aadirlos al ncleo. Se puede usar por ejemplo cuando el comando modprobe no est en ningn directorio de la ruta de bsqueda. De esta forma el programa sabr qu hacer si se necesita un mdulo que no se ha cargado previamente. Esta opcin se puede utilizar con todos los comandos

Descripcin

Comparaciones (matches) En esta seccin hablaremos sobre las comparaciones. No se presentan todas las comparaciones y de deja al lector/estudiante la investigacion de las ausentes. Se presentan las comparaciones genericas, comparaciones TCP y comparaciones UDP. Comparaciones genericas
-p, --protocol Ejemplo iptables -A INPUT -p tcp Esta comparacin se emplea para comprobar la presencia de los siguientes protocolos: TCP, UDP, ICMP o sus respectivos valores numricos, tal como se especifican en el archivo '/etc/protocols'. Si no puede identificar uno de llos devolver un error. El protocolo puede corresponder a uno de los tres mencionados, aunque tambin puede corresponder a TODOS (ALL). "ALL" significa que se corresponde con todos los protocolos (TCP, UDP e ICMP). -s, --src, --source iptables -A INPUT -s 192.168.1.1 Esta es la comparacin del origen, que se basa en la direccin IP de origen de los paquetes. El uso genrico compara direcciones IP nicas, como 192.168.1.1. Sin embargo tambin acepta mscaras de red en un formato de "bit" CIDR. -d, --dst, --destination iptables -A INPUT -d 192.168.1.1 La comparacin --destination (destino) se usa en funcin de la direccin/direcciones de destino de los paquetes. Se emplea casi igual que la comparacin --source y tiene la misma sintaxis, excepto que se basa en saber a dnde se dirijen los paquetes. -i, --in-interface iptables -A INPUT -i eth0 15

Descripcin

Comparacin Ejemplo Descripcin Comparacin Ejemplo Descripcin Comparacin Ejemplo

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0 Esta comparacin la emplearemos para reconocer a travs de qu interfaz proviene un paquete entrante. Esta opcin slo es vlida en las cadenas INPUT, FORWARD y PREROUTING, devolviendo un error si se usa en cualquier otro sitio. Si no especificamos una interfaz concreta, por defecto se asume el valor +, que se emplea para comparar una cadena de letras y nmeros; o sea que por defecto el ncleo comparar todos los paquetes sin importarle a travs de qu interfaz vienen. El smbolo + tambin puede aadirse al tipo de interfaz, de forma que eth+ revisar los paquetes que entren por cualquier tarjeta de red Ethernet. -o, --out-interface iptables -A FORWARD -o eth0 Esta comparacin se emplea con los paquetes que estn a punto de abandonar la interfaz de salida. Ten en cuenta que esta comparacin slo est disponible en las cadenas OUTPUT, FORWARD y POSTROUTING, de hecho son justo las opuestas a las de la comparacin --in-interface. Aparte de sto, ambas funcionan prcticamente igual. La extensin + implica comparar todas las tarjetas del mismo tipo, es decir eth+ controlar todas las tarjetas eth y de forma similar los dems casos. -f, --fragment iptables -A INPUT -f Esta comparacin se emplea para chequear la segunda y la tercera partes de un paquete fragmentado. La razn de ello es que cuando existen paquetes fragmentados no hay manera de saber ni las direcciones de origen/destino de los paquetes, ni los tipos ICMP, ni otros tantos detalles necesarios.

Descripcin

Comparacin Ejemplo

Explicacin

Comparacin Ejemplo Descripcin

Comparaciones TCP

Comparacin Ejemplo

--sport, --source-port iptables -A INPUT -p tcp --sport 22 Esta comparacin se emplea para comparar paquetes basndose en su puerto de origen. Si no se indica nada se comparan todos los puertos origen. La comparacin puede tener un nombre de servicio o bien el nmero de un puerto. Si especificas un nombre de servicio, ste debe existir en el fichero /etc/services, puesto que iptables emplea este archivo para interpretar los nombres de los servicios. --dport, --destination-port iptables -A INPUT -p tcp --dport 22 Esta comparacin busca paquetes TCP basndose en el puerto de destino. Utiliza la misma sintaxis que la comparacin --source-port, por lo que acepta puertos, rangos de puertos e inversiones. Tambin "corrije" el orden de los rangos de

Descripcin

Comparacin Ejemplo Descripcin

16

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0 puertos (80:22 se leer 22:80) y se asumen los valores 0 y 65535 en caso de no indicar el primer o el ltimo puerto, respectivamente (:80 y 22: , respectivamente). Esta comparacin tampoco acepta puertos o rangos mltiples separados por comas (para eso est la extensin de comparacin multipuerto). Comparacin Ejemplo --tcp-flags iptables -p tcp --tcp-flags SYN,FIN,ACK SYN Esta comparacin busca en las banderas (flags) de los paquetes TCP. Para empezar la comparacin lee una lista de banderas para comparar (una mscara) y despus lee una lista de banderas que deben estar establecidas con el valor 1, o sea estar activadas. Ambas listas deben estar delimitadas por comas. La comparacin reconoce las banderas SYN, ACK, FIN, RST, URG y PSH, adems de interpretar las palabras ALL (todas) y NONE (ninguna). --syn iptables -p tcp --syn Se puede decir que la comparacin --syn es una reliquia de los das de ipchains y que permanece para garantizar la compatibilidad con viejas reglas y para facilitar la transicin de ipchains a iptables. Se usa para comparar paquetes que tengan activado el bit SYN y que no tengan activados los bits ACK y RST. --tcp-option iptables -p tcp --tcp-option 16 Esta comparacin se emplea para filtrar paquetes dependiendo de sus opciones TCP. Una Opcin TCP (TCP Option) es una parte especfica de la cabecera de cada paquete que consta de 3 campos diferentes. El primero tiene un tamao de 8 bits y nos dice qu Opciones se emplean en el flujo. El segundo tambin es de 8 bits y nos dice qu tamao tiene el campo de opciones. La razn para que exista este campo indicando el tamao es que las Opciones TCP son, valga la redundancia, opcionales.

Descripcin

Comparacin Ejemplo Descripcin Comparacin Ejemplo

Descripcin

Comparaciones UDP
Comparacin Ejemplo Descripcin Comparacin Ejemplo Descripcin --sport, --source-port iptables -A INPUT -p udp --sport 53 Esta comparacin trabaja exactamente igual que su homnima en TCP y se emplea para hacer comparaciones basadas en los puertos UDP de origen. --dport, --destination-port iptables -A INPUT -p udp --dport 53 Podemos decir lo mismo en sta y en la comparacin anterior. Es exactamente lo mismo que su homnima en TCP, a excepcin que aqu se comparan puertos UDP: compara paquetes basados en su puerto UDP de destino.

17

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Comparaciones ICMP
Comparacin Ejemplo --icmp-type iptables -A INPUT -p icmp --icmp-type 8 Esta comparacin se usa para especificar el tipo ICMP a comparar. Los tipos ICMP se pueden especificar por su valor numrico o por su nombre. Los valores numricos estn definidos en el RFC 792. Para obtener un listado completo de los nombres ICMP, ejecuta iptables --protocol icmp --help en la lnea de comandos o mira en el apndice Tipos ICMP.

Descripcin

Obejetivos/Saltos (Targets/Jumps) Cuando la comparacin de una regla encuentra un paquete que coincide con las condiciones que impone, se recurre al objetivo/salto dnde se le indica a la regla qu debe hacer con ese paquete. Obejetivo ACCEPT Este objetivo no necesita ninguna opcin adicional. En cuanto la especificacin de la comparacin es satisfecha por un paquete y se indica ACCEPT (aceptar) como objetivo, la regla se acepta y el paquete no contina atravesando ni la cadena actual, ni cualquier otra de la misma tabla. Objetivo DROP El objetivo DROP (desechar) hace precisamente so: desechar o "tirar" paquetes y no gastar ni n segundo ms de trabajo del procesador en llos. Un paquete que llegue a una regla, coincida exactamente con el patrn de bsqueda de la comparacin y sea desechado, ser inmediatamente bloqueado. Objetivo DNAT El objetivo DNAT se emplea para efectuar traducciones de direcciones de red de destino (Destination Network Address Translation), que significa que se emplea para reescribir la direccin IPdedestino de un paquete. Con este objetivo en la
18

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

regla, en cuanto un paquete coincide con la comparacin, l y todos los paquetes pertenecientes a ese mismo flujo de datos vern modificada su direccin de destino y sern redirigidos a la red/host/dispositivo adecuado.

Opcin Ejemplo Descripcin

--to-destination iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --todestination 192.168.1.1-192.168.1.10 La opcin --to-destination le indica al mecanismo DNAT qu IP de Destino establecer en la cabecera IP y dnde enviar los paquetes que concuerden con el filtro.

Objetivo SNAT El objetivo SNAT se emplea para efectuar las traducciones de direccin de red de origen (Source Network Address Translation), lo cual implica que este objetivo reescribir la direccin IP de origen en la cabecera IP del paquete (sto es deseable cuando varios hosts tienen que compartir una conexin a Internet). As pues, podemos activar el reenvo de paquetes IP a nivel de ncleo y escribir una regla SNAT que cambiar la direccin IP de origen de todos los paquetes que salgan de la red local, por la direccin IP de origen de nuestra conexin a Internet. El objetivo SNAT slo es vlido en la tabla nat y dentro de la cadena POSTROUTING.
Opcin Ejemplo --to-source iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 La opcin --to-source se emplea para especificar qu direccin origen debe utilizar el paquete. La forma ms simple de usar esta opcin es indicar la direccin IP que deseamos utilizar como direccin IP de origen en las cabeceras IP. Si desearamos balancear la carga entre varias direcciones IP, podemos utilizar un rango separado por un guin.

Descripcin

Objetivo REDIRECT El objetivo REDIRECT sirve para redirigir paquetes y flujos hacia la mquina. sto quiere decir que podemos redirigir todos los paquetes destinados a los puertos HTTP hacia un cach HTTP como Squid, o hacia nuestro host. Los paquetes generados localmente son "mapeados" a la direccin 127.0.0.1, o lo que es lo
19

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

mismo, se reescribe la direccin de destino con la de nuestro host en los paquetes que son reenviados o acciones similares.

Opcin Ejemplo Descripcin

--to-ports iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 La opcin --to-ports especifica el puerto o rango de puertos de destino que se debe usar. Sin esta opcin, el puerto de destino nunca se modifica. Si deseamos especificar un solo puerto, escribiremos --to-ports 8080, mientras que si deseamos un rango de puertos escribiremos --to-ports 8080-8090.

Los dems objetivos se dejan a investigacin por parte del estudiante.

Shoreline Firewall (Shorewall)


Shroewall es una herramienta de alto nivel para la configuracin de Netfilter. Se describen los requerimientos del cortafuegos usando entradas en un conjunto de archivos de configuracin. Shorewall lee los archivos de configuracin y con la ayuda de la utilidad Iptables, Shorewall configura Netfilter para que coincida con nuestras necesidades. Shorewall no es un demonio (daemon). Una vez que Shorewall ha configurado Netfilter, su trabajo esta completado. Conceptos de Shorewall Los archivos de configuracin estn ubicados en /etc/shorewall (por lo general). Para configuraciones simples, solo se necesita trabajar una parte de ellos. Shorewall ve la red donde el se esta ejecutando como un conjunto de zonas. Las zonas son declaradas asignndoles un tipo en el archivo /etc/shorewall/zones. He aqu un ejemplo simple:
20

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

#ZONETYPEOPTIONS INOUT #OPTIONSOPTIONS fwfirewall netipv4 locipv4 #LASTLINEADDYOURENTRIESABOVETHISONEDONOTREMOVE

Ntese que Shorewall reconoce el cortafuegos como su propia zona. El nombre de la zona designando el mismo cortafuegos es almacenada en la variable $FW la cual puede ser usada en los archivos de configuracin para referirse a esta zona. La menera mas simple de definir los hosts en una zona es asociar la zona con la interfase de red usando el archivo /etc/shorewall/interfaces. En una configuracin simple pude verse asi:
#ZONEINTERFACEBROADCASTOPTIONS neteth0detectdhcp,routefilter,norfc1918 loceth1detect

El archivo de arriba define la zona net como todos los hosts Ipv4 interconectados con el cortafuegos a travs de la interfase eth0, la zona loc como todos los hosts interconectados con a travs de la interfase eth1. Es importante recordar que la composicin de una zona esta definida en trminos de una combinacin de direcciones e interfases. La reglas sobre que trafico permitir y que trafico denegar son expresadas en trminos de zonas. Se expresa la politiza por defecto para las conexiones de una zona a otra en el archivo /etc/shorewall/policy. Las opciones bsicas para una poltica son: ACCEPT Acepta la conexin. DROP Deshecha la conexin. REJECT Rechaza la conexin. Las excepciones a las polticas por defecto de definen en el archivo /etc/shorewall/rules. Solo necesitas preocuparte por las solicitudes de conexiones. No es necesario definir las reglas para como el trafico que es parte de una conexin establecida es manejado y en la mayora de los casos no tendrs que preocuparte sobre como las conexiones relacionadas (related) son manejadas.
21

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Para cada solicitud de conexin que llegue al cortafuegos, la solicitud es primero comprobada contra el archivo /etc/shorewall/rules. Si ninguna regla en ese archivo comprueba la solicitud de conexin entonces la primera poltica en /etc/shorewall/policy que comprueba la solicitud es aplicada. En un escenario simple, el archivo /etc/shorewall/policy puede verse asi:
#SOURCEDESTPOLICYLOGLEVELLIMIT:BURST locnetACCEPT netallDROPinfo allallREJECTinfo #LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Si desea que el cortafuegos tenga acceso completo a Internet:


#SOURCEDESTPOLICYLOGLEVELLIMIT:BURST $FWnetACCEPT #LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Ahora se muestra como las reglas proveen excepciones a las polticas, suponiendo que se aplican las polticas listadas mas arriba, pero deseamos conectarnos desde Internet hacia el cortafuegos usando SSH (SSH usa el protocolo TCP con el puerto 22):
#ACTIONSOURCEDESTPROTODEST #PORT(S) ACCEPTnet$FWtcp22

Instalacin y configuracin de Shorewall


Instalacin Para instalar Shorewall en una distribucion tipo Debian (ejemplo: Ubuntu): $sudoaptgetinstallshorewall Debes editar el archivo /etc/default/shorewall y cambiar el valor de la variable startup a 1 para que Shorewall sea activado y pueda iniciar junto con el sistema
22

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

en el nivel de ejecucion deseado: $sudovim/etc/default/shorewall startup=1 Para instalar Shorewall en una distibucion tipo Red Hat (ejemplo: CentOS) primero descargue el paquete rpm del la seccion de descargas de la web de Shorewall:
$wget http://shorewall.infohiiway.com/pub/shorewall/3.4/shorewall3.4.8/shorewall lite3.4.81.noarch.rpm $su #rpmivhshorewalllite3.4.81.noarch.rpm

Si utilizas una distro que no dispone de administrador de paquetes RPM ni DEB, entonces debes descargar el paquete fuente de Shorewall, descomprimirlo y ejecutar el script instalador:
$wget http://shorewall.infohiiway.com/pub/shorewall/3.4/shorewall3.4.8/shorewall 3.4.8.tar.bz2 $tarjxvfshorewall3.4.8.tar.bz2 $cdshorewall3.4.8/ $su #./install.sh

Para habilitar Shorewall, en cualquier distribucin, debe cambiar la variable STARTUP_ENABLED a Yes en el archivo /etc/shorewall/shorewall.conf. Ahora vamos a editar los archivos de configuracin para que encajen en nuestro escenario de prueba, el cual se muestra en la siguiente figura:

23

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Primero configuramos el archivo /etc/shorewall/zones: # vim /etc/shorewall/zones


#ZONETYPEOPTIONSINOUT #OPTIONSOPTIONS fwfirewall netipv4 locipv4 #LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Como se puede apreciar, se declaran 3 zonas. La zona interna, que es el mismo cortaguegos, fw; la zona de Internet le designamos solo net; y por ultimo la zona
24

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

local como loc. Ntese que la zona fw es de tipo firewall y las dems de tipo ipv4. Las reglas sobre que trafico permitir y que trafico denegar son expresadas en trminos de zonas: Las politicas por defecto entre una zona y otra se definen en el archivo /etc/shorewall/policy. Las excepciones a las polticas por defectos se definen en /etc/shorewall/rules. Para nuestro caso, estas son nuestra polticas por defectos entre las zonas: # vim /etc/shorewall/policy
#SOURCEDESTPOLICYLOGLIMIT:BURST #LEVEL locnetACCEPT netlocDROPinfo allallREJECTinfo

#LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Si se desea que el cortafuegos tenga acceso completo a internet agregue una politica ACCEPT desde la zona $FW a la zona net. Las polticas configuradas mas arriba harn: Permitir el trafico desde la zona loc (Red local) a la zona net (Internet). Desechar el trafico desde la zona net hacia la zona loc. Denegar todas las dems conexiones Es importante recordar que las polticas de Shroewall (y las reglas) se refiere a conexiones y no flujo de paquetes. Con las polticas definidas mas arriba en el archivo /etc/shorewall/policy, las conexiones desde la zona loc hacia la zona net son permitidas pero conexiones desde la zona loc hacia el cortafuegos ($FW) no estn permitidas. Enmascaramiento IP (SNAT) El enmascaramiento IP se configura en el archivo /etc/shorewall/masq. Para lograr el enmascaramiento necesitamos modificar este archivo:

25

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

#INTERFACESOURCEADDRESSPROTOPORT(S) IPSEC eth0eth1 #LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Este es para el caso de que la interfase externa (eth1) adquiere su direccin IP mediante DHCP. Pero si utiliza una direccin IP esttica, debe introducir esta despus de la interfase eth1 indicada mas arriba:
#INTERFACESOURCEADDRESSPROTOPORT(S) IPSEC eth0eth1200.89.93.150 #LASTLINEADDYOURENTRIESABOVETHISLINEDONOTREMOVE

Si esta usando una distribucion tipo Debian, debe asegurarse de que la variable IP_FORWARDING sea igual a On en el archivo /etc/shorewall/shorewall.conf:
#vim/etc/shroewall/shorewall.conf IP_FORWARDING=On

Reenvo de puertos (DNAT) La forma general de una regla simple de reenvo de puertos en el archivo /etc/shroewall/rules es:
#ACTIONSOURCEDESTPROTODEST PORT(S) DNATnetloc:<direccinipservidorlocal>[:<puertoservidor>] <protocolo><puerto>

Ejemplos: Servidor Web Si un servidor web se esta ejecutando en la computadora PC2 y se desea reenviar las conexiones del puerto TCP 80 a ese sistema, asumiendo que PC2 tiene la direccin IP 192.168.1.100:

26

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

#ACTIONSOURCEDESTPROTODESTPORT(S) DNATnetloc:192.168.1.100tcp 80,443

Servidor SMTP
#ACTIONSOURCEDESTPROTODESTPORT(S) DNATnetloc:192.168.1.100tcp 25

Algunas reglas comunes en configuraciones simples:


#ACTIONSOURCEDESTPROTODESTPORT(S) ACCEPTloc$FW tcp 22 #SSH ACCEPTloc net udp53 #DNS ACCEPTloc net tcp5222 #GoogleTalk ACCEPTloc net tcp21 #FTP

Para iniciar Shorewall ejecutamos el siguiente comando, como root:


#shorewallstart

Si todo sale bien durante la verificacin de los archivos y ejecuta:


#shorewallstatus

Podra ver algo similar a:


Shorewall3.4.8Statusat<nombredelhost>TueApr101:16:17AST2008 Shorewallisrunning State:Started(MonMar3116:59:11AST2008)

Para confirmar que Shorewall ha creado las cadenas correspondiens en Netfilter con Iptables, ejecute:
#iptablesLn

Para detener y reiniciar Shorewall:


#shroewallstop #shorewallrestart
27

FUNDACION CODIGO LIBRE DOMINICANA DIVISION DE INGENIERIA Y PROYECTOS www.codigolibre.org


Servicio: Autor: Version: Cortafuegos Franky Almonte <franky@codigolibre.org> 1.0

Referencias: Tutorial de Iptables http://iptables-tutorial.frozentux.net/ Netfilter http://www.netfilter.org/ Cortafuegos http://es.wikipedia.org/wiki/Cortafuegos_%28inform%C3%A1tica%29 Shorewall http://www.shorewall.net/

28

Vous aimerez peut-être aussi