Hace un par de años, cuando empezaba a dar mis primeros pasos en Linux (en los cuales todavia estoy), escuchaba a algunas personas que hablaban de IPTables como algo dificil y complicado, no muy facil de entender por los simples mortales. Hasta que me toco (al mas simple de los mortales) empezar a estudiar sobre IPTables y note que no existia tal complejidad, claro, afortunadamente antes de empezar a "meter mano" con IPTables ya habia aprendido algo de redes y sobre todo de TCP/IP, entonces me di cuenta de que talves la razon por la que algunas personas encuentran complicado IPTables es porque no saben como trabaja TCP/IP o saben muy poco sobre el protocolo. Asi que creo que antes de empezar a hablar de IPTables debemos entender lo basico TCP/IP y entender como viajan los datos a traves de la red, asi entenderemos el trabajo de IPTables y veremos que el configurar sus reglas no es nada del otro mundo.
Empecemos entonces con lo basico, una breve y resumida explicacion de TCP/IP. TCP/IP es un conjunto de protocolos que permite la transmision de datos en una red. Este es el protocolo en el cual esta basado Internet. En las redes TCP/IP la informacion es transmitida en "paquetes", o sea, los datos que se van a transmitir por la red son separados en "pedacitos" y transmitidos a traves del cable. TCP/IP esta divido en 4 capas, en cada una de estas capas de agrupan diferentes protocolos (de ahi el hecho de que es un "Conjunto" de protocolos). La primera capa (de arriba hacia abajo) es la capa de aplicacion, esta es la capa donde se generan los datos. Se encuentran los protocolos HTTP, POP3, FTP, DNS, etc. como pueden ver, son los protocolos que a diario utilizamos para navegar, descargar emails, descargar o transmitir archivos, etc. Luego se encuentra la capa de "Transporte". Esta capa se encargar de gestionar el transporte de los datos y asegurarse de que no hayan errores en la transmision, se encarga de crear una especie de "circuito virtual" con el equipo que recibira o transmitira la informacion. En esta capa se encuentran los protocolos TCP y UDP. Luego sigue la capa de "Red". Esta capa se encarga del enrutamiento o encaminamiento de los paquetes y de su direccionamiento. En esta capa trabaja el procolo IP (me imagino que muchos de ustedes han configurado "direcciones IP"). Por ultimo, se encuentra la capa de "Acceso al medio" o capa "Fisica". Esta es la capa que se encarga de, digamos, "escribir" los datos en el cable. En esta capa se encuentra, por ejemplo, el protocolo Ethernet.
A medida que los paquetes pasan de una capa a la otra, los protocolos que trabajan en las capas le agregan informacion al paquete, la cual sera leida por los protocolos de la misma capa del equipo que recibira el paquete que se esta enviando. A esta informacion se le llama "header" o "cabecera". Cada capa "encapsula" o "reempaqueta" la data que proviene de la capa de aplicacion dentro de otro paquete que contiene la cabecera del protocolo de la capa.
Por ejemplo, TCP, en la capa de transporte, utiliza el concepto de "numero de puerto" para diferenciar las aplicaciones de la capa superior, de esta forma es que podemos recibir informacion desde diferentes sitios de internet hacia diferentes aplicaciones en nuestros equipos, de esta forma TCP sabe a cual aplicacion enviar los datos que recibe desde la red, ya sea al browser de Internet, al cliente de email o a nuestro programa de Chat. Y como TCP necesita esta informacion (entre otras mas), agrega un "numero de puerto de origen", que es el puerto que le asigna a la aplicacion que solicita o transmite la informacion desde nuestra computadora, y un "numero de puerto de destino", que es el puerto de la aplicacion al que va dirigido el paquete en el equipo remoto. De esta forma de establece una especie de circuito entre los 2 puertos (origen y destino). Pero ademas de esto, TCP tambien numera los paquetes para establecer una secuencia y mantener control sobre la transmision, asi que tambien agrega dentro de la cabecera un "numero de secuencia". A continuacion un grafico que muestra la cabecera que agrega TCP al paquete original con todos sus campos.
Por ejemplo, TCP, en la capa de transporte, utiliza el concepto de "numero de puerto" para diferenciar las aplicaciones de la capa superior, de esta forma es que podemos recibir informacion desde diferentes sitios de internet hacia diferentes aplicaciones en nuestros equipos, de esta forma TCP sabe a cual aplicacion enviar los datos que recibe desde la red, ya sea al browser de Internet, al cliente de email o a nuestro programa de Chat. Y como TCP necesita esta informacion (entre otras mas), agrega un "numero de puerto de origen", que es el puerto que le asigna a la aplicacion que solicita o transmite la informacion desde nuestra computadora, y un "numero de puerto de destino", que es el puerto de la aplicacion al que va dirigido el paquete en el equipo remoto. De esta forma de establece una especie de circuito entre los 2 puertos (origen y destino). Pero ademas de esto, TCP tambien numera los paquetes para establecer una secuencia y mantener control sobre la transmision, asi que tambien agrega dentro de la cabecera un "numero de secuencia". A continuacion un grafico que muestra la cabecera que agrega TCP al paquete original con todos sus campos.
Como pueden ver, luego de todos los campos de la cabecera TCP se encuentra la Data del paquete. Luego que el paquete sale de la capa de transporte, se dirige a la capa de red, donde el protocolo IP se encarga tambien de agregar otra cabecera al paquete, pero esta vez con informacion concerniente a IP. Como mencionamos anteriormente una de las funciones de IP es direccionar los paquetes, por esto la informacion que agrega al paquete es informacion que se utilizara para hacer llegar el paquete hacia el equipo destino y tambien informara cual equipo envio el paquete, de modo que el equipo receptor pueda contestar o confirmar su recepcion. Parte de la informacion que se encuentra en la cabecera IP es, por ejemplo, la direccion IP del equipo al que va dirigido el paquete (IP Destino) y la direccion IP del equipo que emite el paquete (IP origen), entre otros. A continuacion la cabecera IP con todos sus campos:
Cuando el paquete sale de esta capa, pasa a la capa fisica. En esta capa tambien se agrega otra cabecera al paquete, pero esta vez lo hace el protocolo Ethernet (para el caso de las redes Ethernet, que son las mas comunes hoy dia). Entre la informacion que le agrega este protocolo al paquete se encuentra el MAC Address de origen y el MAC Address de destino. Como saben el MAC Address es la direccion fisica y unica de cada tarjeta de red. No abundaremos mucho en esta capa, ya que mayormente trabajaremos con IPTables con las capas de Tranporte (TCP y UDP) y la capa de Red (IP).
Ahora que ya sabemos como viajan los datos a traves de la red, podemos empezar a hablar sobre IPTables. IPTables es capaz de leer toda la informacion en la cabecera de los paquetes segun van entrando al equipo, incluso antes de que la misma pila TCP/IP pueda tener acceso a ellos. Entonces, al ser capaz de leer y analizar toda la informacion de cabecera del paquete, como IP de origen y destino, puerto de origen y destino, tipo de protocolo (TCP o UDP), y practicamente todos los otros campos de cabecera, pueden establecerse "reglas" o "filtros" en base a esa informacion. De esa forma, podemos hacer que IPTables bloquee o no permita el acceso de paquetes que en su cabecera TCP indiquen que se dirigen hacia un "puerto 80" de algun equipo remoto, o que en la cabecera IP indique que se dirige a un IP destino en especifico.
Bueno, creo que por ahora esta bien como introduccion a IPTables, basicamente porque ya me esta ganando el sueño (son las 1 y tanto de la mañana) y porque se haria muy extenso este post. En el proximo post hablaremos en mas detalle de que es IPTables, su funcionamiento y como configurarlo.
Un Poco de IPTables (Parte 2)
Ahora que ya sabemos como viajan los datos a traves de la red, podemos empezar a hablar sobre IPTables. IPTables es capaz de leer toda la informacion en la cabecera de los paquetes segun van entrando al equipo, incluso antes de que la misma pila TCP/IP pueda tener acceso a ellos. Entonces, al ser capaz de leer y analizar toda la informacion de cabecera del paquete, como IP de origen y destino, puerto de origen y destino, tipo de protocolo (TCP o UDP), y practicamente todos los otros campos de cabecera, pueden establecerse "reglas" o "filtros" en base a esa informacion. De esa forma, podemos hacer que IPTables bloquee o no permita el acceso de paquetes que en su cabecera TCP indiquen que se dirigen hacia un "puerto 80" de algun equipo remoto, o que en la cabecera IP indique que se dirige a un IP destino en especifico.
Bueno, creo que por ahora esta bien como introduccion a IPTables, basicamente porque ya me esta ganando el sueño (son las 1 y tanto de la mañana) y porque se haria muy extenso este post. En el proximo post hablaremos en mas detalle de que es IPTables, su funcionamiento y como configurarlo.
Un Poco de IPTables (Parte 2)