Iptables Esp
Iptables Esp
iptables en espaol
pon el paquete sobre la mesa
Indice general
1. Semntica 1 1.1. Historia ................................ 1 1.2. Funcionamientointerno ....................... 2 1.3. Tablas ................................. 2 1.4. Cadenas................................ 3 1.5. Reglas ................................. 4 1.5.1. Destino ............................ 4 1.6. Mdulosextras ............................ 5 1.6.1. Mdulosdetablasycadenas . . . . . . . . . . . . . . . . 6 2. Sintxis 8 2.1. ManejodeCadenas.......................... 8 2.1.1. Crearunanuevacadenas .................. 9 2.1.2. Vercadenasexistentes .................... 9 2.1.3. Eliminarcadenas ....................... 10 2.1.4. Denirlapolticadeunacadena . . . . . . . . . . . . . . 10 2.2. Opcionesmanejadasporlainterfaz . . . . . . . . . . . . . . . . . 10 2.3. Construccindeltros ........................ 11 2.3.1. Destinodelltro ....................... 11 2.3.2. Filtradoporprotocolo .................... 12 2.3.3. Filtradopordireccin .................... 12 2.3.4. Filtradoporinterfaz ..................... 12 2.3.5. Manejodefragmentos .................... 13 2.4. Extensiones .............................. 14 2.4.1. Includasenelsistema .................... 14 2.4.2. Noincludasenelsistema .................. 18 3. Prctica 20 3.1. Problemasdeiptables ........................ 20 3.1.1. Sintxiscomplicada ..................... 20 3.1.2. Guardandolaconguracin . . . . . . . . . . . . . . . . . 21 3.2. Respaldos ............................... 22 3.2.1. Actualizaciones ........................ 22 3.3. Frontends ............................... 23
3.3.1. Firestarter .......................... 23 3.3.2. KNetFilter .......................... 23 3.3.3. FirewallBuilder ....................... 23 3.4. Wrappers ............................... 24 3.4.1. Shorewall ........................... 24 3.4.2. Ferm.............................. 24 3.4.3. gShield ............................ 24 3.5. Otros ................................. 25 3.5.1. AutoFireWall ........................ 25 3.5.2. FloppyFireWall ....................... 25 4. Enlaces 26
Resumen El objetivo de este laboratorio fue investigar acerca de iptables, comprender su funcionamiento y sintxis. Ms all de una simple recopilacin de informacin, es nuestra intencin servir de introduccin tanto terica como prctica a esta potente herramienta.
Captulo 1
Semntica
1.1. Historia
En el ao 1998 el equipo de netfilter decidi tomar el cdigo de ipfwadm e ipchains unicndolo y mejorndolo. Esto no fue slo para consolidar dos aplicaciones que cumplan la misma funcin sino tambin para poder sacar lo mejor de cada una eliminando la necesidad de comprender el funcionamiento (y su sintxis) de dos aplicaciones para poder cubrir todas las necesidades.
1
Por otro lado, era necesario dicha transicin debido a los extensos cambios en el cdigo del kernel pertinente. Dichas aplicaciones tenan serios problemas en sus dependencias con la implementacin de sockets y las funciones de GLibC que se fueron modicando a lo largo de las diferentes ipfwadm se desarroll como una forma sencilla de administracin de las funversiones de las mismas. ciones de rewall ofrecidas por el kernel. Dependa de la aplicacin ipfw que se encargaba de modicar las opciones de los sockets correspondientes. Tena serios problemas para hacer NAT (Network Address Translation) debido a que dependa de los puertos utilizados para hacerlo. Adems, el manejo de UDP era complicado debido a la falta de un socket permanente utilizando funciones especiales para manejarlo y el manejo de TCP no tena en cuenta los estados de las conexiones. Por otro lado, su comportamiento -a pesar de estar divido en mdulos -era demasiado monoltico lo que complicaba el extenderlo. Con la evolucin del kernel hacia su versin 2.2 ciertas funciones de manejo de sockets y las libreras GNU de C estndar (la tan conocida GLibC) fueron modicadas. Dichas modicaciones provocaban que ipfwadm dejara de funcionar; afortunadamente ipchains ya haba visto la luz. Su modularizacin era mucho mejor, mejoraba el manejo de conexiones, puertos y la independencia de otros cambios en el kernel y/o libreras utilizadas. Sin embargo, el manejo de NAT era realizado por una aplicacin separada ipnatctl. Un nivel ms de modularizacin es lo que hizo (y hace) a iptables tan poderoso y verstil. El trabajo del equipo de netfilter fue lo sucientemente bueno como para
1
[Link]
que el cdigo que necesitaban modicar en el kernel para permitir el manejo de paquetes fuese includo dentro del kernel principal por defecto. 2 Anteriormente, se deba tener el cdigo del kernel, agregar el parche a mano y compilar el kernel.
1.3. Tablas
Por defecto iptables no posee tabla alguna. Dejando al usuario la creacin de las mismas. Sin embargo, debido a que las tareas de ltrado son relativamente estndares, existen mlduos de kernel que trabajan sobre el mdulo ip_tables agregando las tablas ms utilizadas. La tabla ms utilizada es la que proporciona el mdulo: iptable_filter, casualmente la tabla se llama lter
Obviamente, como el sistema fue modularizado pensado tambin en que sea extendible. Sin embargo, el agregado de tablas con signicado directo slo puede realizarse mediante mdulos de kernel. Esto se debe a que deben interactuar directamente con el mdulo principal ip_tables aprovechando los hooks que las modicaciones de netlter introdujeron al kernel. iptable_nat iptable_mangle Cada una de stas agrega una tabla a iptables con el nombre que indica.
2
parche es una modicacin de cdigo guardada en formato especial para distribuir slo las diferencias y reconstruir la versin deseada
1.4. Cadenas
Las cadenas son, como ya mencionamos, simples conjuntos de reglas. Sin embargo, esto es una simplicacin de un concepto un poco ms complicado. Originalmente (en ipchains) el ltrado de paquetes se haca en cadena debido a la forma en la que ste atravesaba el sistema. Se hacan chequeos, controles, ruteo, ltrado, etc. en forma secuencial, como una cadena de produccin -de ah el nombre -.
Sin embargo, este comportamiento fue modicado en iptables para optimizar el ltrado. Cada cadena est asociada a un punto de la ruta que puede tomar un paquete determinado que ya no es lineal. La tabla ms utilizada (lter) posee tres cadenas distintas: INPUT OUTPUT FORWARD Como se mencion anteriormente las tablas agregadas por mdulos contienene ciertas cadenas por defecto. La razn por la que dichas tablas deben ser cargadas como mdulos es que stas cadenas se corresponden con la ruta de un paquete. Esto quiere decir que se utilizan ganchos (hooks) en el 3 kernel para forzar el ltrado por las cadenas correspondientes segn el 4 siguiente grco : Entrada --> Enrutamiento ------> FORWARD ------> Salida --> |^ v| INPUT OUTPUT |^ || +----------> PC Local ------------+ Esto signica que todo paquete atraviesa slo una de las cadenas. El enrutamiento no es ms que decidir si el paquete est dirigido hacia la propia PC o no. En caso de estarlo, pasara por la cadena de INPUT, de lo contrario, por la de FORWARD. Por otro lado, cualquier paquete generado localmente pasar por la cadena OUTPUT. Evidentemente, la modularizacin es mucho ms marcada facilitando la comprensin del sistema. Como si fuese poco, los nombres representativos de cada cadena evitan confusiones o problemas en los ltros por superposicin o contradiccin de reglas. Lo que es ms, el funcionamiento de iptables permite el agregado de nuevas cadenas mediante la interfaz de usuario. Evidentemente, stas no estarn relacionadas con la ruta seguida por el paquete ya que eso 3
4
Estos son provistos por el soporte de netfilter en el kernel Perdn por el ascii-art pero me falta prctica para imgenes en LATEX... y tiempo para hacer las imgenes
se logra interactuando directamente con el mdulo principal (ip_tables). Sin embargo, permite un manejo ms sencillo y modular de los ltros por parte del usuario.
1.5. Reglas
Cada una de las cadenas se compone de ltros, aqu llamados reglas. Estas se componen de una extensin que indica qu suceder con los paquetes regidos por dicha regla y una serie de parmetros (un patrn) que indican las condiciones que debe de cumplir un paquete para obedecer dicha regla. Las cadenas son construidas secuencialmente. Esto quiere decir que las reglas poseen un orden dado por el orden en el que se agregan. Este ser tambin el orden en el que se evaluarn las reglas, determinando una debilidad del sistema en s: no se tiene en cuenta qu regla concuerda ms especcamente con el 5 paquete sino slo la primera que coincide. La razn por la que sto es importante es que el orden de las reglas es realmente importante. Los errores ms comunes en ltrado de paquetes se deben a un orden inapropiado de las reglas para lo que se desea hacer. Por otro lado, el agregar una regla en una posicin especca signicara eliminar las reglas siguientes, agregar la regla deseada y voler a agregar la regla original lo que implica una tarea tediosa y engorrosa, especialmente cuando la cantidad de reglas aumenta o en un sistema que necesite de un control complejo.
1.5.1. Destino
Llamamos destino a la accin a realizar con un paquete segn una regla dada. Por defecto, los destinos son: ACCEPT QUEUE RETURN DROP
Como seguramente se adivina ACCEPT permite el paso del paquete por la ruta que transita. QUEUE provoca que el paquete sea transferido a una cola de espera en el espacio del usuario para que sea revisado; podr revisarlo cualquier aplicacin que haga uso de las libreras libipq. RETURN, por su parte, provoca un salto hacia el nal de la cadena; en las cadenas denidas por el usuario esto implicara volver a la cadena anterior.
Finalmente, DROP desecha completamente el paquete. Cabe destacar que el paquete es desechado, no rechazado. Esto implica que el paquete no llegar a
5
Existen excepciones en las que la evaluacin de reglas contina despus de una coincidencia, pero sern vistos ms adelante
las capas superiores, como si nunca hubiese existido. En tales casos, la PC destino jams recibir el paquete y agotar su tiempo de espera para un acuse de recibo (un ACK) en caso de estar esperando uno. Este comportamiento puede llegar ser deseable, impidiendo establecer conexiones no deseadas o dar 6 indicios de presencia ante intentos de vericacin externos por parte de sistemas no regulados (por medio de una regla anloga que s lo permita.
Sin embargo, pueden existir casos en los que se preera enviar el paquete de error, o inclusive otras accions distintas a cualquiera de esas dos. Para ello existen mdulos que agregan destinos o condiciones de ltro. Por otro lado, tambin se puede especicar como destino de un paquete otra cadena. Normalmente esto sera utilizado con cadenas denidas por el usuario permitiendo, de esta forma, un mejor manejo de las reglas. Lo que es ms, una correcta modularizacin permitira reducir al mnimo los inconvenientes que signican agregar una regla y que sta quede en el orden deseado. Polticas
Hay algo sin embargo que no se mecion: qu sucede cuando se utiliza un RETURN en una cadena que no es del usuario? qu sucede cuando un paquete no coincide con ninguna regla dada?. Sera esperable pensar que, dado que el sistema interere con el ruteo del paquete, ste siga su curso normalmente.
De hecho, si bien es el caso, sto no siempre es el comportamiento deseado. Por ello, se puede determinar la accin por defecto de una cadena. Esta accin por defecto se denomina poltica de la cadena y puede ser cualquiera de las extensiones disponibles (que no sean una cadena denida por el usuario).
Es muy comn por parte de atacantes tener un sistema que enva paquetes para determinar la existencia de posibles objetivos si stos devuelven algn tipo de respuesta.
Mdulos de tablas y cadenas Mdulos de destinos Si bien no se encontr informacin que as lo asegure, parecera existir algn tipo de convencin o estndar en el nombre que reciben los mdulos. Como se ver ms adelante, se cumpliran las siguientes reglas: Mdulos de netfilter Estn prejados por ip_ y un nombre descriptivo de lo que realizan. El mdulo ip_tables estara en este grupo. Mdulos de tablas Contienen el prejo iptable_ seguido del nombre de la tabla que agregan. Mdulos de destinos Contienen el prejo ipt_ seguido del nombre del destino maysculas. Puede suceder que el destino no sea exactamente el nombre del mdulo sino que sea una forma corta (para facilitar el uso). Sern cubiertos ms adelante ya que no ataen al funcionamiento interno Cabe destacar que, si bien aqu se los menciona por separado, la mayora (sino todos) de los mdulos que se describirn y muchos otros estn includos en una instalacin por defecto. No slo eso, sino que incluso algunos nisiquiera son un mdulo extra que debe ser instalado y cargado pero se lo reconoce como una extensin; an as, no dejan de ser mdulos prcticamente independientes.
v| INPUT OUTPUT |^ || +-------> PC Local ------>---+ Para quienes sepan ingls habrn notado los signicados de las nuevas cadenas implican un pre-ruteo y un post-routeo para todos los paquetes que atraviesan el alcance del sistema. Obviamente, esto se debe a los momentos en los que se pueden tomar decisiones sobre NAT evitando perder tiempo. Si la cadena PREROUTING estuviese despus del ruteo, no se podra hacer un simple enmascaramiento de la red ya que todos los paquetes hacia la red interna atraviesaran la cadena INPUT primero, implicando la necesidad de generar un nuevo paquete de forma local para poder enviarlo hacia la red interna. Obviamente, se agregan una serie de extensiones que nos permitirn el manejo de paquetes y transformaciones de IPs haciendo DNAT (Destination o SNAT NAT (Source NAT) sin problema alguno. iptable mangle
No conforme con las capacidades actuales del sistema existe an un mdulo ms de amplia utilizacin. iptable_mangle agrega, como ya se mencion, una nueva tabla llamada mangle (alterar hasta hacerlo irreconocible en ingls) que posee todas las cadenas hasta ahora vistas: INPUT, OUTPUT, FORWARD, PREROUTING y POSTROUTING.
Las capacidades de esta tabla son las de modicar prcticamente cualquier aspecto conocido de un paquete dado. De all el nombre.
Captulo 2
Sintxis
Con el conocimiento del funcionamiento interno de iptables el poder utilizar el sistema se limita a aprender la sintxis necesaria para poder majar los mismos. Evidentemente, para ello se dispone de una aplicacin que interacta con las tablas y reglas de una forma sencilla: iptables. El uso que se le pueda dar est limitado por nuestra creatividad y los lmites innatos del sistema en s. A continuacin se exponen las opciones para el manejo de dicha aplicacin en conjunto con sencillos ejemplos. Como se comprob en el cdigo fuente, para el manejo de opciones iptables hace uso de la abstraccin brindada por getopts facilitando la utilizacin de versiones pero ms expresivas de los parmetros. Esto permite a usuarios novatos cortas y largas comprender lo que hace cada regla si utilizan las versiones largas sin perder las ventajas de evitar tipear nombres largos.
no sea posible, se trabajar sobre la tabla lter y no se forzar la carga de mdulos siempre que sea posible. Por su parte, los parmetros sern indicados segn la notacin ms concida y aceptada, de gran similitud con expresiones regulares. Corchetes Indicarn parmetros opcionales. Esto es, que pueden aparecer o no Llaves Cada elemento separado por comas dentro de ellas es una de los posibles valores aceptados. Texto en espaol Siempre que se observe un texto en espaol con un nombre bastante descriptivo se debe reemplazar el mismo por lo que est pidiendo. Existen adems, una serie de opciones generales que pueden ser especicadas en cualquier instruccin. A saber: -v El siempre conocido verbose que provoca mensajes ms descriptivos y detallados de la actividad circundante. -n La salida de direcciones IPs y puertos se mantiene en forma numrica (por ejemplo: [Link] en lugar de localhost) line-numbers Cada regla tendr asignado un nmero dentro de la cadena. Esta opcin provoca que dichos nmeros sean mostrados antes de cada regla.
Si se desea, sin embargo, eliminar todas las reglas de una cadena el trabajo es lento y tedioso. Para ello, disponemos de otra opcin: -F cadena Esto provoca que todas las reglas de la cadena especicado sean desechadas y se vuelva al estado inicial de la coguracin dicha tabla en el que no tiene regla alguna. Queda, sin embargo, un valor que no es reseteado; ste valor se trata de una extensin del sistema que permite Para poder resetear dichos contadores, disponemos de la opcin: llevar cuenta de ciertos paquetes. -Z cadena ultimo, suponiendo el caso en que uno estuviera probando una nueva regla Por pero no est del todo seguro de su funcionamiento. A tal efecto, uno suele probar hasta que se logra el efecto deseado y el agregar y quitar reglas permanentemente es demasiado trabajo; especialmente cuando se dispone de la posibilida de reemplazar una regla en una cadena determinada: -R cadena numero_de_regla
2.3.1. Destino del ltro Lo primero que se debe saber para poder construir un ltro con iptables es
cmo especicar el destino de los paquetes que coincidan con l. La opcin
que controla ste aspecto del ltro se puede resumir en: -j destino_vlido [opciones] Recordemos que los valores posibles de destino_vlido dependen de los mdulos cargados en un momento dado. Por defecto seran ACCEPT y DROPLas opciones son modicadores extras que dependen del destino.
Interfaz es el trmino que dena una abstraccin sobre los dispositivos de red.
Estos pueden ltrar segn la interfaz por la que entre o salga (respectivamente) un paquete. Parecera ser intil el poder ltrar por interfaz si ya se dispone de la capacidad de ltrar por IP. Sin embargo, no es extrao el encontrar ataques que se basan en la creacin de paquetes especiales. Por ejemplo, crear un paquete que parezca provenir de una IP local (tcnica denominada spoong). La forma ms fcil de controlar estos ataques sera revisando las interfazs involucradas. Evidentemente, slo los paquetes que atraviesen la cadena FORWARD tendrn ambas interfaces. Aquellos que sean dirigidos a la propia PC (y que atraviesen la cadena INPUT) no tendrn interfaz de salida. Por lo tanto, cualquiera regla de dicha cadena que incluya esa opcin no coincidir con ningn paquete. Secede algo anlogo con los paquetes que atraviesan la cadena OUTPUT que no tendrn interfaz de entrada, as que la regla -i no funcionar.
Tambin es de destacar que es perfectamente vlido especicar un interfaz que no existe. La regla en cuestin simplemente no coincidir con ningn paquete. Como un caso especial, un nombre de interfaz con el sujo + coincidir con todas los interfaces que comiencen con dicha cadena.
Por otro lado, todo el trco de los fragmentos hasta las capas superiores implica una cantidad de procesamiento. Si es nuestra intencin impedir el acceso a esa informacin sera ms eciente el bloquear todos los fragmentos que slo algunos de ellos e impedir la recontruccin del original. Para ello, iptables hace un seguimiento de los paquetes para que todos los fragmentos coincidan con las reglas del paquete que les corresponda. An as, provee la siguiente opcin para diferenciar el primer paquete de los dems: -f
En caso de aparecer en una regla, indica que slo se aplicar a los fragmentos que no sean el primero.
2.4. Extensiones
Como bien fue mencionado varias veces ya, iptables fue diseado teniendo en cuenta la modularizacin para hacerlo fcilmente extendible. Esto se puede lograr, bien mediante mdulos -para tareas complicadas -o simplemente con libreras que interactan con el usuario. Las extensiones existentes responden a diferentes necesidades que se presentaron con el uso del sistema y fueron desarrollados aprovechando la extensibilidad del mismo. Podemos clasicarlas segn dos criterios distintos pero para nada disjuntos: inclusin en el sistema rea que extendien. Contrario a lo que es usual, ser el primero el principal criterio de divisin utilizado -dejando el otro para una subclasicacin -debido a que este documento est pensado para facilitar el uso del sistema. Es de destacar que, en algunos casos ser necesario explicitar el deseo de uso de alguna de dichas extensin por medio de la opcin: verb+-m extension+ En otros casos, sin embargo, esto puede ser omitido y la aplicacin cargar la extensin automticamente. Para saber cules son las extensiones de las que disponemos, nada ms sencillo que buscar entre los mdulos de kernel con el comando lsmod o simplemente listar las libreras que guran en /lib/iptables
UDP por su parte, slo agrega dos opciones capaces de ayudarnos a ltrar por puerto o rango de puertos y si es el puerto de origen destino con: sport y dport. Finalmente TCP es la ms completa ya que, adems de las opciones brindadas por la extensin UDP, provee dos ltros adicionales: tcp-option y tcp-ags que permite distinguir el valor del campo de opcin de la cabecera TCP y saber qu ags estn activadas. Sobre ste ltimo, necesita de dos valores: una mscara una lista separada por comas de uno o ms de SYN, ACK, FIN, RST, URG y PSH o bien ALL como una forma corta de agregar todas las opciones NONE para no indicar ninguna un ltro otra lista separada por comas de aquellas opciones que aparecen en la mscara que deben de estar activadas para que coincida el paquete mac Algo tambin de gran inters para asegurar una red privada es el ltro para comparar paquetes segn direcciones Ethernet (MAC). Es de destacar, sin 2 embargo, que slo puede ltrar por direccin entrante por lo que slo se lo puede utilizar en las cadenas PREROUTING e INPUT. Necesita de ser utilizado explcitamente mediante -m mac y provee, de esa forma, slo de la opcin mac-source. Sus resultados son obvios. limit
Este mdulo debe ser especicado explcitamente con -m limit y se utiliza para restringir la tasa de coincidencias indicando una mxima cantidad de paquetes por unidad de tiempo que seguirn esa regla. Agotada dicha cantidad de paquetes, las reglas que contengan este condicionador actuarn como si tuviesen un destino DROP.
Provee de dos opciones con las que trabajar: limit-burst y limit. La primera indica la cantidad mxima de paquetes a analizar antes de comenzar a descartarlos (5 paquetes por defecto) y la segunda indica la tasa de recuperacin de coincidencias por unidad de tiempo (3 paquetes por hora Se puede, por defecto).adems, especicar la unidad de tiempo utilizando diferentes unidades como second, minute, hour oday. Acepta inclusive abreviaciones: (5/second es lo mismo que 5/s). Ntese sin embargo, que no es posible crear una regla en la que se se especique una tasa de recuperacin multiplicada por el lmite de paquetes deber ser menor a 59 horas. La combinacin de estas opciones permite indicar una tasa mxima. En el caso por defecto (5 de mxima, recuperando 3 paquetes por hora) cada paquete que coincida disminuir la mxima y sta aumentar en 1 por cada 20 minutos (3
2
Esto se debe a que estamos trabajando a nivel de capa de red, donde un paquete est dirigido a la direccin mac del dispositivo siguiente en la ruta. Lo que quiere decir que todos los paquetes que pasen por una PC estarn dirigidos a su direccin mac, ms no necesariamente a su direccin IP
por hora). En cuanto a las limitaciones de contabilizacin, si se desea establecer una tasa de 1/da el mximo deber ser menor a 3 (1/day con limit de 3 fuerza la contabilizacin de 72 horas continuas). mark y MARK
Existe un mdulo especial que provee tanto de una opcin para ltrar paquetes como un destino. Est restringido a la tabla mangle ya que modica los paquetes: los marca. Utilizndolo como destino provee de las opciones setmark, and-mark y or-mark que establecen el valor de la marca u operan con un y lgico u lgico segn el parmetro pasado.
Sabiendo, adems, que la evaluacin de las reglas no se detendra es posible utilizar las marcas como una forma de agrupar paquetes y luego actuar sobre ellos mediante el ltro mark (notar que en este caso es necesario cargar la extensin con -m mark). Tambin, la aplicacin iproute2 es capaz de leer las marcas para, gracias a iptables, modicar el ruteo de los paquetes. CLASSIFY De la misma forma que la extensin mark puede ayudarnos a agrupar paquetes, existe esta otra capaz de clasicarlos. La diferencia, sin embargo, es las aplicaciones para las que dicha clasicacin es til. El destino CLASSIFY provee la opcin set-class que acepta dos nmeros separados por dos puntos (:). Esta clasicacin luego puede ser leda por la aplicacin tc para poder hacer trac shaping. Correctamente implementado evitara el tener que indicar tambin a tc rangos de IP, mac, etc. para poder dividir redes o ltrar servicios de una forma ms especca evitando la reprogramacin de accesos y permisos NOTRACK En algunos casos, la performance del sistema es crtica y, por lo tanto, los recursos disponibles deben de ser aprovechados al mximo. A tal efecto, disponemos del destino NOTRACK, que simplemente evita el seguimiento de una conexin. Esto libera recursos para los paquetes de conexiones que no se deseen controlar. Su uso sencillo ya que no toma opciones y su utilidad es evidente en grandes redes con varias sub-redes que se encargan de seguir sus propias conexiones REDIRECT El poder hacer NAT muchas veces no es suciente. A veces slo necesitamos cambiar el puerto de una conexin entrante ya que el presupuesto no nos permite tener dos equipose separados con los puertos por defecto funcionando. O tal vez queremos utilizar un cach de forma transparente. A tal efecto, el la extensin de destino REDIRECT aade la opcin to-ports que permite hacer el cambio pertinente.
REJECT
Como se haba mencionado, el sistema de iptables por defecto slo puede descartar paquetes mediante DROP. Este paquete agrega un nuevo destino para los paquetes con un comportamiento similar. No slo descarta el paquete sino que, adems, genera un paquete de error ICMP y lo enva de vuelta al origen del paquete ltrado.
Permite, adems, congurar el tipo de paquete de error ICMP que se enva. Por defecto es port unreachable pero puede cambiarse con la opcin rejectwith seguida del tipo deseado. LOG Cualquier administrador de sistemas sabe que algo tan importante como la informacin que contienen sus sistemas son los registros logs generados por funcionamiento de los mismos. Estos contienen informacin sobre toda la el actividad que se desarrolla en los mismos. La activida de red, actualmente, es una de las ms importantes. No slo por la cantidad de sistemas que dependen de la red para funcionar, sino tambin por el simple hecho de que es la principal puerta para ataques. Un sistema indefenso se caracteriza por permitir un acceso sencillo al sistema por medio de la red. Si no se lo desea, se debe utilizar algn tipo de ltrado para evitarlo y, lo que es ms importante, nunca est de ms registrar cuando dichos intentos suceden. iptables contiene una extensin para generar logs de una forma sencilla. Simplemente se agrega una regla cuyo destino sea LOG. Este destino es especial, a diferencia de las dems reglas, aquellas con ste destino no concluirn la evaluacin de reglas. De esta forma, si se quiere rechazar o descartar un paquete y loguearlo se debe de poner la regla que lo loguee primero; de lo contrario, el paquete se desechar y jams llegar hasta la regla que lo loguee. El logueo se realiza en conjunto con los dems logs del sistema operativo y es posible especicar el nivel de logueo con log-level e inclusive una cadena de hasta 29 caracteres que servirn de prejo con log-prex. Esto posibilita el diferenciar la cadena utilizada para cada paquete logueado. Existen otras opciones que permiten loguear opciones, nmeros de secuencia o el ID de usuario del socket ustilizado. Es de notar que, para una PC conectada a internet, los registros pueden volverse muy extensos; especialmente si se intenta reducir el trco al mnimo. Por ello, es necesario un buen manejo de los logs del sistema operativo para evitar agotar el espacio del disco duro. La extensin limit descripta anteriormente puede ser de gran ayuda. MASQUERADE Con el transcurso del tiempo, la difusin de redes locales fue cada vez mayor... al igual que el deseo de interconectarlas. Obviamente, el conectar cada dispositivo con todos los dems sera no slo engorroso sino tambin costoso.
Por ello, toda red local dispone de uno o ms dispositivos que sirve como puerta de enlace hacia las dems redes. Sin embargo esto plantea un problema sencillo en cuanto a comunicacin de dos equipos en la seccin interna de cada red. Si slo dichas puertas de enlace pueden comunicarse directamente, se necesita de una forma de simular una conexin entre los dispositivos de las redes locales. Para ello existe el enmascaramiento (masquerading). Como las reglas para poder manejar estos casos son en exceso complicadas debido a los cambios que se deben de realizar en los paquetes, se cre un destino especco a tal efecto. Cualquier paquete que atraviese algn punto de la tabla nat puede tener MASQ como destino, implicando tal accin. Esto implica no tener que utilizar toda una serie complicada de reglas para controlarlo
Es ste mdulo que permite la existencia del mdulo state, capaz de ltrar paquetes segn el estado de su conexin (ledo directamente de la informacin que mantiene conntrack). Debe de ser explcito en su uso mediante -m state y ofrece slo una opcin: state que toma como parmetro una lista separada por comas de los siguientes valores: NEW Conexiones nuevas, por lo general, el primer paquete que entra o sale ESTABLISHED Todos los dems paquetes de una conexin despus del primero INVALID Un paquete cuya conexin no pudo ser identicada, ya sea por cuestiones de memoria o paquetes ICMP que no correspondieron a ninguna conexin
RELATED Paquetes que no son parte de una conexin, pero derivan de ella (como paquetes ICMP) ftp A pesar de todos los mdulos y extensiones de los que ya hemos hablado. Sigue habiendo un problema: las conexiones FTP. Sucede que el protocolo FTP utiliza una conexin de control pero otra conexin completamente bierto sera un despropsito datos. distinta para la transmisin de para unEsta ultima no es permanente y rewall. mantener el puerto Es por eso que netlter pone a nuestra disposicin dos mdulos ms: ip conntrack ftp e ipt nat ftp. El primero se encarga de que el mdulo de seguimiento de conexiones pueda relacionar las dos conexiones que acabamos de mencionar sobre el protocolo FTP. El segundo en cambio, se encarga de sgonear en los paquetes que pasan por las cadenas de la tabla nat para poder hacer lo mismo. Sin estos mdulos, no hay forma alguna en la que se pueda utilizar dicho modo de FTP teniendo un rewall restrictivo al mismo tiempo. De la misma forma, existen mdulos para muchos otros protocolos con inconvenientes similares como H.323, IRC, amanda, PPTP, TFPT, etc.
Captulo 3
Prctica
La teora de construccin de rewalls es muy sencilla, simplemente es aprender la sintxis o mtodos de conguracin de la aplicacin deseada y punto. Nada que no pueda encontrarse en las pginas de manual o repartido en varias pginas de internet. Lo que s cuesta es encontrar las herramientas que nos ayudan a hacer el trabajo ms sencillo o guas sobre las prcticas ms usuales.
segundos, en cambio, no simplican la sintxis sino que slo la cambian por otra que puede (o no) resultarnos ms cmoda o familiar. Constructores De todas formas podemos tener un rewall sin tener la ms remota idea de iptables. Para ello existen, pululando por internet sistemas completos en los que uno selecciona servicios, puertos y topologa de la red y ste nos devuelve las reglas de iptables necesarias para implementarlo. Uno de ellos. y a mi criterio el ms completo, es el On-line FireWall generator . Con unos cuantos clicks nos brinda las reglas capaces de manejar un equipo aislado o un servidor que funcionar de puerta de enlace hacia internet para una red completa o brindar uno que otro servicio. Si bien est en ingls, provee de una extensa ayuda sobre cada opcin congurable para un mejor entendimiento de lo que se est haciendo. Como si esto fuese poco, el cdigo generado (que no es ms que un script de shell) est muy bien organizado y es fcilmente entendible. Lo que es ms, los extensos comentarios sobre el mismo hace casi innecesario tener conocimiento alguno sobre iptables para saber qu es lo que hace cada lnea.
1
Para utilizarlo basta con ejecutarlos y redireccionando la entrada o salida a un archivo correspondiente. La opcin -c es la que controla el tema de los contadores, -t sirve para indicar la tabla a guardar y -n evita el vaciado de las tablas al restaurar el rewall. Sin embargo, es algo tedioso de hacer a mano cada vez; ni hablar cuando se trata de un servidor remoto y autnomo que puede llegar a sufrir de cortes de luz o inconvenientes inesperados similares. Denitivamente no queremos que quede sin rewall. Carga al arranque Una solucin posible sera generar un script que sea ejecutado automticamente durante el arranque de la PC. Dicho script no hara ms que invocar la
1
aplicacin iptables-restore leyendo desde un archivo en el que hayamos guardado previamente nuestras reglas de rewall con la aplicacin Obviamente esto puede complicarse un poco ms, modularizando el rewall iptables-saveguardando cada tabla por separado. O ms an, utilizando scripts propios que ejecuten una por una las instrucciones para reconstruir nuestro rewall. La idea es siempre la misma y es aquella utilizada por defecto en la mayora de los sistemas agregando dicho script a la lista de scripts ejecutados al iniciar la PC en el directorio /etc/init.d/ con algn nombre apropiado. Carga junto con la red
La solucin anterior es la correcta y la necesaria para sistemas que necesitan de un rewall corriendo permanentemente ya que estn siempre conectadas a internet o funcionan como server o puerta de enlace para una red. Para un equipo personal que no est conectado permanentemente a internet, eso puede ser no slo un despropsito sino tambin un desperdicio de recursos.
Para ello se puede congurar el sistema para que ejecute el script al levantar una interfase de red. Esto sera extremadamente similar a lo anteriormente descripto, slo que los scripts deberan de ubicarse o referenciarse de otra forma. En sistemas Debian o similares, esto podra ser en /etc/network/if-up.d/.
3.2. Respaldos
Es importante siempre tener copias de respaldo de las reglas del rewall. Esto es porque, con el tiempo, los servicios que uno va abriendo o cerrando, las reglas y mdulos que utiliza. En casos crticos, la informacin que se respalda son siempre los datos del sistema de archivos, los usuarios y servicios brindados por la PC... rara vez incluye el rewall.
Esto puede ser extremadamente engorroso ya que nos obliga a recurrir a un rewall deciente e improvisado. Lo que es ms, causa incesantes dolores de cabeza sobre las cosas que se fueron modicando sobre la marcha y que deben de ser realizadas nuevamente.
3.2.1. Actualizaciones
De la misma manera, al momento de hacer una actualizacin al rewall, la versin corriente debe de estar correctamente respaldada y algn tipo de medida de contingencia. Esto nos permitir actuar de manera rpida y eciente en caso que alguna modicacin no resultare como esperamos. Es de vital importancia considerar dos casos completamente separados. El primero sera cuando uno est trabajando directamente sobre la PC en la que funciona el rewall, cuando uno est frente al hardware en cuestin. En dichos casos, la solucin a este tipo de problemas puede ser tan sencillo como eliminar todas las reglas y poner las polticas a DROP hasta tanto el rewall est nuevamente en funcionamiento.
El segundo caso es cuando uno est trabajando de forma remota. En estos casos uno no puede hacer lo mismo que antes se mencion por la simple razn de que ello bloqueara permanentemente cualquier tipo de conexin desde el exterior... incluso la que estaba utilizando para ingresar al servidor.
3.3. Frontends
Otra solucin a los problemas de iptables en cuanto a su complejidad son los frontends. Estos consisten en simplemente una interfaz grca para un entorno X que ayudar a la administracin del rewall. Algunos de ellos son:
3.3.1. Firestarter
Sitio ocial: [Link] El rewall manager de GNOME. Lo he utilizado y es extremadamente sencillo, inclusive para manejar una PC que funcione como puerta de enlace. Se encarga de cargar todos los mdulos necesarios y brinda excelentes opciones de personalizacin del rewall. Utiliza las reglas de logueo para mostrar en tiempo real las conexiones existentes, los paquetes rechazados y mucha otra informacin til. Permite prender y apagar el rewall o modicarlo en caliente quedando como residente para un mejor control en tiempo real. Muy recomendado para usuarios novatos, o aquellos que no tienen muchas ganas de ponerse a aprender sintxis.
3.3.2. KNetFilter
Sitio ocial: [Link] Es la versin de KDE de Firestarter. No la he utilizado y no he podido encontrar referencia alguna que indique su funcionamiento en kernels posteriores a 2.4. Se vea bien en los screenshots sin embargo.
3.4. Wrappers
As como existen interfases grcas para implementar iptables, existen tambin sistemas completos que se encargan de proveer de una nueva forma de congurar el rewall (y alguna que otra cosa tambin). Estos sistemas se encargan de parsear estas conguraciones y traducirlas a las reglas de iptables necesarias.
Muchas veces proveen de ms utilidades al integrarse tambin con otras aplicaciones. Proveen, adems, de un estndar en cuanto al almacenamiento de conguraciones del rewall y no lo dejan librado al gusto del administrador. Sin embargo, sus sintxis de conguracin pueden ser tanto o ms complicadas que las de iptables; pero eso queda a criterio de cada uno.
3.4.1. Shorewall
Sitio ocial: [Link] Uno de los ms populares y mejor documentados. Con una sintxis de conguracin sencilla pero con parmetros sospechosamente similares a aquellos que podemos utilizar en iptables. Se basa en la conguracin de zonas y sus polticas de seguridad. Conguramos qu se permite y que no para cada zona y las conexiones que corresponden a cada una. Permite integracin con tc para hacer trac shaping desde el mismo archivo de conguracin. Tiene la gran ventaja de que una extensa porcin de su documentacin tambin puede encontrarse en espaol.
3.4.2. Ferm
Sitio ocial: [Link]
Un proyecto cuyo nombre proviene del acrnimo de Para la Simple Creacin de Reglas (del ingls For Easy Rule Making). Al igual que Shorewall, sus parmetros de conguracin son sospechosamente similares a los que se pueden encontrar en iptables; pero su conguracin se realiza mediante una sintaxis muy parecida a cdigo C.
Permite utilizar nombres de protocolos en lugar de los nmeros de puerto por stos utilizados. Adems de poder agrupar reglas, utilizar variables, funciones, bloques, etc para un mejor control.
3.4.3. gShield
Sitio ocial: [Link] Es un potente sistema que toma scripts de shell y los transforma en reglas de iptables. Excelentemente documentado y muy potente. Como si fuese 2 poco, cuenta con una completa interfase grca: gShieldConf . Aprovechando la potencia del lenguaje bash permite construir conguraciones complicadas con
2
sencillos scripts para quienes tengan el conocimiento necesario o la utilizacin de la interfase grca para quienes quieran algo ms sencillo.
3.5. Otros
3.5.1. Auto FireWall
Sitio ocial: [Link] Este es una aplicacin completa que genera reglas de ruteo y un rewall muy decente para el usuario promedio. Basta con correr la aplicacin para que sta auto-detecte el estado del sistema y se congure a s misma. No es la mejor solucin, pero una de las mejores que existen que funcionan bien as como vienen. Especialmente recomendado para usuarios nveles que quieren conectarse a internet y olvidarse del asunto. Eso s, deben recordar ejecutarla manualmente al conectarse (o antes).
Captulo 4
Enlaces
ADMLogger: una herramienta que parsea logs de iptables [Link] Auto FireWall [Link] Comparacin entre distintos wrappers de iptables [Link] Ferm [Link] FireStarter [Link] Firewall Builder [Link] Floppy FireWall [Link] gShield [Link] gShieldConf [Link] kNetlter [Link] Mdulos raros y no tanto de iptables [Link] 20050717 164535 On-line Firewall Generator [Link] Shorewall [Link]