Introducción a IptablesEn este tutorial intentaremos ver los aspectos fundamentales de la herramienta Iptables. Su uso es muy flexible y complejo, y ni mucho menos intentaremos explicar toda su funcionalidad en este tutorial. Nos centraremos en cómo protejer un máquina y en el método general para establecer reglas de filtrado.Empezando con IptablesIptables es una herramienta que utiliza Netfilter (viene en el kernel) para establecer reglas de filtrado de paquetes. Con ella podemos definir reglas que restrinjan el acceso a nuestra máquina, que nos permitan hacer nat, que nos permitan, junto con otras herramientas, implementar un QoS, etc. Es una herramienta muy compleja, y tremendamente configurable, pero aquí vamos a aprender cómo podemos establecer reglas de filtrado para filtrar por IP y por puerto los paquetes que pasen por nuestra máquina.En iptables, tenemos varios tipos de reglas: reglas de filtrado, reglas de nat, reglas de mangle (para manipular paquetes)... Nosotros nos centraremos en las reglas de filtrado, para poder filtrar tráfico y implementar nuestro firewall. Estas reglas se definen en la tabla filter (que es la tabla por defecto de iptables). Esta tabla tiene 3 cadenas: INPUT: es para filtrar paquetes que vienen hacia nuestra máquina. OUTPUT: es para filtrar paquetes generados por nuestra máquina. FORWARD: es para filtrar aquellos paquetes que llegan a nuestra máquina pero no son para nosotros, es decir, que llegan para que nuestra máquina los reencamine. Sintaxis básica de IptablesLa sintaxis que seguiremos para añadir reglas a cada una de las cadenas anteriores será del estilo:
Los parámetros que utilizaremos para filtrar son los siguientes:
Nuestro primer cortafuegos con IptablesVisto esto podemos empezar ya a diseñar nuestro cortafuegos, ya que Iptables se aprende mucho mejor viendo ejemplos que con líneas y líneas de explicacion. Lo que haremos será crear un fichero, y en él colocar una detrás de otra todas las reglas de filtrado que queramos poner, teniendo en cuenta el orden, ya que cuando una regla puede ser aplicada, se aplica esa y no se revisan el resto. Vamos a ver un primer ejemplo de script de iptables.Supondremos que tenemos un servidor web y un ftp al que queremos dejar acceso a todo el mundo, y también un servidor mysql al que sólo queremos dejar acceso a un amigo que nos ayuda a administrar la base de datos. #!/bin/bashecho "Aplicando reglas del firewall..."# Borramos las reglas que ya pudieran existir, y los contadoresiptables -Fiptables -Xiptables -Z# Establecemos las políticas por defectoiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD DROP### Filtrado de paquetes #### Permitimos acceso desde la propia máquinaiptables -A INPUT -i lo -j ACCEPT# Permitimos acceso a los puertos 80 (web), 20 y 21 (ftp)iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPTiptables -A INPUT -i eth0 -p tcp --dport 20:21 -j ACCEPT# permitimos a nuestro amigo el acceso a mysql (puerto 3306)iptables -A INPUT -i eth0 -p tcp -s 80.37.45.123 --dport 3306 -j ACCEPT# Ahora cerramos los puertos de gestión típicosiptables -A INPUT -i eth0 -p tcp --dport 1:1024 -j DROPiptables -A INPUT -i eth0 -p udp --dport 1:1024 -j DROP# Cerramos el puerto de mysql para que nadie más pueda accederiptables -A INPUT -i eth0 -p tcp --dpost 3306 -j DROP# Cerramos el peurto de webminiptables -A INPUT -i eth0 -p tcp --dport 10000 -j DROPBueno, aquí termina nuestro primer ejemplo de cortafuegos. Para ver si las reglas han quedado bien aplicadas, podemos utilizar el comando:
Expliquemos un poco más el scriptPrimero borramos todas las reglas de iptables que pudiera haber cargadas. Esto es importante si no sabemos si el operativo o alguna ejecución nuestra anterior nos han dejado reglas ya cargadas.Lo segundo que hacemos (y muy importante) es establecer las políticas por defecto. Estas políticas definen la acción que se realizará con el paquete si ninguna regla especificada llega a cumplirse. Nosotros, por defecto, hemos aceptado todo lo de la cadena OUTPUT (dejamos salir todo), aceptamos por defecto todo lo de la cadena INPUT, ya filtraremos luego lo que no nos interese, y no dejamos pasar los paquetes de FORWARD (ya que esto solo debería permitirse en equipos que van a hacer de routers de una red). Podríamos haber establecido la política de INPUT a DROP por defecto, así no permitiríamos nada, y luego establecer reglas para permitir el acceso a todo aquello que queramos; pero eso ya va a elección de cada uno. Luego ya empezamos a filtrar. Lo primero que hacemos es dejar a localhost acceso a todo, ya que desde nuestro PC podremos iniciar conexiones al servidor web local, etc. Estas conexiones irán por la interfaz de lo (loopback). Luego permitimos explícitamente acceso a los puertos 20,21 y 80. Esto es necesario ya que en las siguientes reglas cerramos el acceso a los peurtos del 1 al 1024. Puede parecer contradictorio, pero tiene sentido ya que las reglas se miran en orden, y si un paqeute coincide, por ejemplo, con la regla del puerto 80, se admitirá y no se mirarán más reglas. Seguidamente permitimos el acceso a mysql (puerto 3306) sólo a una ip en concreto (la de nuestro amigo). Luego ya cerramos los puertos típicos de gestión (1:1024), el de webmin (10000) y el de mysql, ya que no queremos que nadie más acceda a él.
Pautas generales para cortafuegos básicosHabiendo entendido el script vamos a resumir los pasos que deberían seguirse a la hora de configurar un cortafuegos básico como este. Evidentemente, cualquier variación para adaptarlo a las necesidades de cada uno es perfectamente válida.
Para terminarPues esto es un script básico de iptables. Una vez lo hemos creado guardaremos el fichero y le daremos permiso de ejecución (con el comando$ chmod u+x fichero) para poder ejecutarlo.Una cosa importante es que las reglas de iptables no se guardan; cuando reiniciemos la máquina, esas reglas no permanecerán, así que si queremos que se apliquen las reglas cada vez que el ordenador arranque podremos poner este script como demonio, tal y como se explica en el tutorial de demonios de este mismo wiki. Últimas palabrasComo podemos apreciar, existe una gran flexibilidad a la hora de definir reglas. Podemos hacer un firewall más o menos restrictivo en función de la política por defecto y las reglas que luego apliquemos. Este tutorial no pretendía dar, ni mucho menos, el mejor modelo a seguir para diseñar un cortafuegos; simplemente mostrar el uso de iptables para filtrar tráfico, y las muchas posibilidades que esta herramienta nos ofrece. El uso y diseño del cortafuegos está completamente abierto a las necesidades de cada uno.Tutorial elaborado por Nacx para ADSLAyuda.com |
HerramientasADSLPublicidadEncuestaRedes 2.0Entrevistas
Artículos de opinión
Routers WirelessRouters EthernetCategorias |