-
¿Es realmente complicado el cortafuegos de Linux?
IPTables, el cortafuegos de Linux, forma parte de una extensión del kernel llamada NetFilter. Podríamos decir que NetFilter e IPTables forman un equipo fabuloso. Para explicarlo a lo NiPeGun: NetFilter Gómez Mancuernas es un portero de discoteca todo ciclado que anda todo loco esperando que le den órdenes para hacer su trabajo. Lo único que quiere el señor Gómez es analizar y filtrar gente y se deprime si no le dan instrucciones. IPTables, por otro lado, es el jefe de NetFilter Gómez. En realidad es el dueño de la discoteca. En definitiva, es el que le da las órdenes a NetFilter. Le dice al portero quien debe pasar y quien no. Incluso también le dice que cuando venga un latino, ni lo eche ni lo deje pasar, sino que directamente lo mande a otra discoteca que también es suya pero en la que ponen reggaeton. Y esto es como todo en la vida, el jefe le puede dar todas las instrucciones que quiera, pero el que realmente realiza el trabajo es el portero llamado NetFilter Gómez Mancuernas.
Hay muchas y variadas formas gráficas de que IPTables configure la «hoja de instrucciones» para darle a NetFilter. Incluso las hay completamente manejables con el ratón. Pero normalmente sólo te dejan configurar reglas predefinidas y no gozan de la flexibilidad habitual de la línea de comandos. Además, como siempre me gusta decir, cuando aprendes a interactuar con la linea de comandos te haces una idea más acertada de que es lo que ocurre con los cambios que estás haciendo. Por eso, siempre es preferible manejar IPTables desde la cli (o interfaz de línea de comandos, como prefieras). Además, en el caso de querer proteger un servidor sin entorno grafico, no te servirá de nada saber manejar IPTables sólo gráficamente.
Las reglas de IPTables se «meten» en principio ordenadas en tres tablas predefinidas. La tabla filter, la tabla nat y la tabla mangle. Y digo en principio, porque existe la posibilidad de crear otras tablas además de esas tres. Pero con esas tres normalmente se satisfacen el 99% de las necesidades. Las reglas las metes en esas tres tablas usando cadenas y conceptos. Si te acuerdas siempre de TABLAS-CADENAS-CONCEPTOS tendrás siempre presente en la memoria como crear reglas. Pero antes de entender las cadenas y los conceptos vamos a ver cuales son esas tres
TABLAS
- FILTER: Es la tabla donde pones las reglas para decidir si bloqueas un tipo de paquete o si, por el contratrio, le permites continuar su camino. Toooodos los paquetes pasan por esta tabla. Todos toditos. Tiene 3 cadenas predefinidas: INPUT, OUTPUT y FORWARD.
- NAT: Es la tabla donde metes las instrucciones para compartir una IP pública con muchos otros dispositivos. Normalmente configuras esta tabla cuando quieres usar tu distro como router. Los paquetes que pasan por esta tabla irán a donde le específiques en sus reglas. Tiene 4 cadenas predefinidas: INPUT, PREROUTING, POSTROUTING y OUTPUT
- MANGLE: Es la tabla donde configuras el QoS, las opciones de los paquetes y donde configuras además su marcaje para la posterior destrucción. Algo así como el matadero de vacas. Contiene absolutamente todas las cadenas predefinidas. INPUT, OUTPUT, FORWARD, PREROUTING y POSTROUTING.
Como decía antes, una vez que ya sabes en que tabla tienes que poner tu regla, tienes que aprender como funcionan sus respectivas
CADENAS
- PREROUTING: Aunque estén en la table nat y en la mangle, en ambas se comportan diferente. Básicamente esta cadena se usa para los paquetes que llegan desde la red hasta el ordenador que está ejecutando iptables. tráfico entrante, justo antes de ingresar a la pila de red del kernel. Las reglas en esta cadena son procesadas antes de tomar cualquier decisión de ruteo respecto hacia dónde enviar el paquete
- INPUT: Todos los paquetes que tienen como destino al ordenador.tráfico entrante, luego de haber sido ruteado y destinado al sistema local.
- FORWARD: Todos los paquetes que no se originan en el ordenador pero que tampoco lo tienen como destino, sino que están de “paso” a través de él. Normalmente esta cadena se usa cuando usas el ordenador como router.ráfico entrante, luego de haber sido ruteado y destinado hacia otro host (reenviado).
- OUTPUT: Todos los paquetes que se originan en el ordenador.tráfico saliente originado en el sistema local, inmediatamente luego de haber ingresado a la pila de red del kernel.
- POSTROUTING: tráfico saliente originado en el sistema local o reenviado, luego de haber sido ruteado y justo antes de ser puesto en el cable.
CADENAS ORDENADAS POR ORDEN DE PASO POR LAS TABLAS
PREROUTING:
- raw
- mangle
- nat (DNAT)
INPUT:
- mangle
- filter
- security
- nat (SNAT)
FORWARD:
- mangle
- filter
- security
OUTPUT:
- raw
- mangle
- nat (DNAT)
- filter
- security
POSTROUTING:
- mangle
- nat (SNAT)
las cadenas se evalúan en el siguiente orden:
Tráfico entrante destinado al sistema local:
- PREROUTING
- INPUT
Tráfico entrante destinado a otro sistema (paquetes que se deben reenviar):
- PREROUTING
- FORWARD
- POSTROUTING
Tráfico originado desde el sistema local:
- OUTPUT
- POSTROUTING
El objetivo de las cadenas es poder controlar cuándo, a lo largo del flujo de un paquete a través del sistema y la pila de red, una regla es evaluada.
PROCESOS
- Direcciones IP
- Protocolos (tcp, udp, icmp)
- Puertos
Con todos los conceptos que se explicaron arriba se crean las
REGLAS
Una vez que creas una regla, ésta se agrega a la tabla que le hayas indicado y se pone en marcha inmediatamente. A partir del momento en el que la hayas creado todo el tráfico que pasa por el sistema empieza a filtrarse con esa regla. Pero claro, seguramente esa no será la única regla que tengas en las tablas. Las reglas se agregan una a una y se van ejecutando por turno empezando por la que esté más arriba. Si el paquete que está siendo procesado encaja con una regla específica, el paquete es procesado según la acción que marca la regla y ya no es procesado por las otras reglas en la cadena.
Si el paquete pasa por todas las reglas de la cadena y llega hasta abajo sin haber coincidido con ninguna regla, entonces netfilter toma la acción marcada por la
POLÍTICA POR DEFECTO
La política por defecto puede configurarse como aceptar (ACCEPT) o descartar (DROP) dependiendo de las necesidades de cada sistema. De hecho, eso es lo más importante a la hora de configurar el sistema. Si configuras una politica de descarte (DROP) descartas todos los paquetes que entran menos los que coincidan con alguna regla que hayas configurado para ser aceptados. Si configuras una politica de paso (ACCEPT), el sistema dejará entrar todos los paquetes menos los que específicamente marques como para que no pasen.
La política DROP es más segura, pero tardarás mucho más tiempo en configurarla porque, hasta que no hagas los cambios, los programas que usen la red no te funcionarán.
La política ACCEPT es más a prueba de fallos, porque funcionará todo. Pero no sabrás sobre un problema de seguridad que puedas tener en la red hasta que sea demasiado tardePara entenderlo a modo de resúmen: Cada uno de los paquetes de datos que quieran entrar, salir o pasar por nuestro sistema Linux es identificado, marcado, analizado, aceptado, rechazado, redirigido por NetFilter (siempre que se lo hayas mandado hacer). Y NetFilter cumplirá las órdenes al pie de la letra y hará con esos paquetes exactamente lo que le has ordenado. Por lo que, si eres bueno dando órdenes, tendrás con Linux el sistema más seguro que te hayas podido echar a la cara.
Search
Archives
- noviembre 2024
- octubre 2024
- septiembre 2024
- junio 2024
- mayo 2024
- abril 2024
- marzo 2024
- octubre 2023
- agosto 2023
- junio 2023
- mayo 2023
- abril 2023
- marzo 2023
- febrero 2023
- enero 2023
- diciembre 2022
- noviembre 2022
- octubre 2022
- septiembre 2022
- agosto 2022
- julio 2022
- junio 2022
- mayo 2022
- abril 2022
- febrero 2022
- enero 2022
- diciembre 2021
- noviembre 2021
- octubre 2021
- septiembre 2021
- julio 2021
- junio 2021
- mayo 2021
- abril 2021
- marzo 2021
- febrero 2021
- enero 2021
- diciembre 2020
- noviembre 2020
- octubre 2020
- septiembre 2020
- junio 2020
- mayo 2020
- abril 2020
- marzo 2020
- noviembre 2019
- septiembre 2019
- agosto 2019
- julio 2019
- junio 2019
- mayo 2019
- enero 2019
- noviembre 2018
- septiembre 2018
- agosto 2018
- junio 2018
- mayo 2018
- marzo 2018
- febrero 2018
- diciembre 2017
- octubre 2017
- septiembre 2017
- agosto 2017
- julio 2017
- junio 2017
- mayo 2017
- abril 2017
- marzo 2017
- febrero 2017
- diciembre 2016
- noviembre 2016
- octubre 2016
- septiembre 2016
- agosto 2016
- julio 2016
- mayo 2016
- abril 2016
- marzo 2016
- febrero 2016
- noviembre 2015
- octubre 2015
- agosto 2015
- julio 2015
- junio 2015
- mayo 2015
- abril 2015
- marzo 2015
- febrero 2015
- enero 2015
- diciembre 2014
- noviembre 2014
- octubre 2014
- septiembre 2014
- agosto 2014
- julio 2014
- junio 2014
- mayo 2014
- abril 2014
- marzo 2014
- febrero 2014
- enero 2014
- diciembre 2013
- noviembre 2013
- septiembre 2013
- julio 2013
- mayo 2013
- marzo 2013
- febrero 2013
- enero 2013
- diciembre 2012
- noviembre 2012
- agosto 2012
- julio 2012
- junio 2012
- mayo 2012
- abril 2012
- marzo 2012
- enero 2012
- noviembre 2011
- julio 2011
- junio 2011
- mayo 2011
- abril 2011
- marzo 2011
- enero 2011
- diciembre 2010
- septiembre 2010
- agosto 2010
- julio 2010
- febrero 2010
- enero 2010