Para saber cómo funciona un cortafuegos hay que entender primero
cómo funciona una conexión y el trafico en general. Lo comentaré muy someramente:
Cuando nos conectamos a internet nos estamos conectando a una red inmensa de ordenadores, es decir, tenemos acceso directo a todo aquel que está conectado en ese mismo momento.
Para establecer la comunicación
se abren una serie de
puertos de comunicación en los ordenadores en donde los programas se ponen a
"hablar y escuchar" para interactuar.
- Así, por ejemplo, un ordenador que ofrece una página web (un servidor web) , se pone a escuchar y atender solicitudes en el puerto 80.
- Cuando se establece una solicitud, el servidor web dialoga con el cliente y si se cumple el proceso, la comunicación se establece y se muestra la página web.
Lo que ocurre es que
los sistemas operativos actuales, e infinidad de programas, por defecto abren puertos sin notificar al usuario y por tanto
estamos con unos puertos abiertos y expuestos a que alguien le dé por mirar qué es lo que ofreces sin tú saberlo.
Y justo en el proceso de comunicación, o para ser exactos,
cuando se intenta establecer una conexión, es cuando entra en juego iptables, que se pone por delante de nuestros puertos y
decide qué paquete de información puede pasar, según unos criterios.
Estos
criterios se almacenan en unas tablas, con
reglas en Orden descendente donde la última siempre será la última regla en aplicarse, antes de que se aplique la regla por defecto. Esto es así sempre que no sea interceptada por una regla anterior.
Entendedlo así, el paquete entra por la parte superior de la tabla: se encuentra con la primera regla de filtrado, se decide la acción analizando el paquete: dejarlo pasar o no. Si se deja, siguiente regla, si no, para fuera. Es así de sencillo.
Iptables consiste básicamente de
tres tablas:
- tabla FILTER: usado para implementar el firewall. Aquí se produce el filtrado de paquetes.
- tabla NAT:**//(masquerading) para hacer que otros ordenadores se conecten a través del nuestro a una serie de servicios pero con nuestra ip, pareciendo que esas conexiones vienen de nuestro equipo.
- tabla MANGLE: sirve para alterar el estado de un paquete. No la comentaremos por ahora.
Tenemos dentro de la tabla FILTER:
INPUT:
todo el tráfico entrante
OUTPUT:
todo el tráfico saliente
FORWARDING:
para enrutar tráfico a través de nuestro ordenador hacia otro ordenador. Se supone que este tráfico no es para nosotros
Dentro de la tabla NAT
tenemos:
PREROUTING:
para alterar el tráfico así como llegue a nosotros
POSTROUTING:
para alterar paquetes generados localmente antes de enrutarlos
OUTPUT:
alterar paquetes justo antes de que salgan
Si además tenemos el módulo ipt_conntrack
disponible, dispondremos de herramientas para controlar el estado de la conexión
. Podemos añadir entonces:
NEW:
nuevo paquete que viene hacia nosotros
RELATED:
paquetes nuevos pero que ya están relacionados con una conexión existente.
EJEMPLO: cuando usamos un ftp se abren varias conexiones para poder bajar correctamente lo que necesitamos. Si no lo activamos, sólo sería posible la primera conexión y los demás paquetes, aunque relacionados con la primera conexión, no se dejarían pasar y la transferencia se interrumpirá.
ESTABLISHED:
paquetes asociados a una conexión nueva
INVALID:
todos los demás paquetes, que no coincidan con ninguno de los estados descritos