3.2. El sistema NAT.Enmascaramiento y filtrado de direcciones IP

Todo el proceso descrito en la Secci�n 3.1ocurre al conectarnos de manera sencilla con nuestro ordenador, un m�dem y una cuenta de acceso a Internet. Ahora bien, cuando tenemos una red y deseamos navegar desde cualquier equipo de la misma, la cuesti�n es diferente.

Imaginemos que el ordenador n� 3 del aula de inform�tica, info3, con direcci�n IP 192.168.1.103 quiere consultar una documentaci�n sobre linux en castellano y, para ello, realiza una petici�n al puerto 80 de la m�quina es.tldp.org tecleando en su navegador http://es.tldp.org

Cuando el servidor de nombres le proporcione la IP adecuada y descubra que no pertenece a su red local, encaminar� su petici�n a trav�s de gato y �ste redirigir� la petici�n al servidor es.tldp.org que la recibir� procedente de la IP 20.20.20.20 y, en consecuencia, le responder� a gato que tiene que saber, de alguna manera servirle esta informaci�n a info3 que fue, en realidad, quien solicit� esta p�gina. Para ello, gato marca el paquete que recibe de info3 asign�ndole un dato m�s que identifica el remitente de la petici�n, de modo que, al recibir la respuesta, sepa que no es para ella y redirigirla a quien la solicit�, en este caso info3.

Todo este proceso que realiza gato se conoce con el nombre de enmascaramiento o masquerading y es una caracter�stica del n�cleo de linux, a partir de su versi�n 2.0 que permite la navegaci�n a toda una red local con una sola conexi�n a internet sin necesidad de usar un proxy. Es una de las posibilidades que nos ofrece el sistema NAT (Network Address Translation) o Traducci�n de Direcciones de Red.

Puede ampliarse la informaci�n relativa al funcionamiento de NAT en el siguiente documento en castellano, aunque los sitios oficiales del proyecto NAT se encuentran en Penguin Computing, el equipo Samba y SGI y, por �ltimo, el mantenido por Harald Welte.

3.2.1. Filtrado de paquetes

Una red nunca es segura. Esta es la principal idea que nunca debe abandonar un administrador de red. Por lo tanto, con esa premisa, si permitimos el tr�fico en nuestra red debemos tomar todas las precauciones a nuestro alcance para que impedir que los paquetes con c�digo malicioso o no deseado circulen y que nos ocasionen alg�n quebradero de cabeza.

Un filtro es, pues, un software que examina las cabeceras de los paquetes y decide su suerte conforme a unas reglas fijadas por el usuario. Este software est� situado en el propio n�cleo de Linux y se conoce con el nombre de netfilter, mientras que la herramienta encargada de su gesti�n, iptables es la que se comunica con el n�cleo y le proporciona las reglas de filtrado de los paquetes. B�sicamente son dos las acciones para con los paquetes examinados: DROP (Descartarlo y hacer como si no se hubiera recibido, con lo que el paquete se pierde irremediablemente) o ACCEPT (Dejar que pase y alcance su destino), aunque el abanico de posibilidades de uso de esta herramienta es tan sumamente amplio y poderoso que la creaci�n de un buen cortafuegos es objeto de sesudos tratados y aquellos capaces de construirlos con robustez, son muy pocos y muy bien pagados.

Aquellas mentes inquietas que quieran sumergirse en este apasionante mundo de la seguridad en las redes pueden comenzar con este documento en castellano. Los sitios oficiales son los mismos que para el enmascaramiento, ya apuntados en la Secci�n 3.2.

Importante

La utilidad iptables a�ade y elimina reglas de la tabla de filtrado del n�cleo, es decir, cualquier pol�tica que establezcamos con ella se perder� al reiniciar el sistema, a menos que las establezcamos como "permanentes" para que Linux las reconozca en el siguiente arranque.

3.2.2. Enmascarando y filtrando con gato

Con Linux ha sido posible el enmascaramiento desde los arcaicos n�cleos de la serie 1.1, aunque las herramientas han evolucionado y a partir de las versi�n 2.4 del n�cleo se utiliza iptables para controlar todo el proceso.

Es normal que todo pueda resultar algo farragoso e incluso demasiado complicado, pero para nuestro objetivo, trataremos de simplificar al m�ximo y conseguiremos de una forma sencilla que nuestro equipo sea capaz de enmascarar nuestra red local para navegar por internet.

En primer lugar hemos de hacer que gato tenga habilitado el reenvio de paquetes, esto se consigue con la orden:

[root@gato root]#  echo 1 > /proc/sys/net/ipv4/ip_forward

Esta instrucci�n escribe el archivo /proc/sys/net/ipv4/ip_forward que es un fichero de texto que s�lo contiene el car�cter "1".

Ahora nos disponemos a limpiar todas las reglas de filtrado que pudieran existir en nuestra m�quina, para ello ejecutamos:

[root@gato root]# iptables --flush
[root@gato root]# iptables --table nat --flush
[root@gato root]# iptables --delete-chain
[root@gato root]# iptables --table nat --delete-chain

Y, por �ltimo vamos a enmascarar nuestra red local y permitir que navegue con las dos instrucciones siguientes:

[root@gato root]# iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
[root@gato root]# iptables --append FORWARD --in-interface eth0 -j ACCEPT

Se observa que las �rdenes son bastante intuitivas. En la primera estamos diciendo que enmascare y enrute los paquetes a trav�s de la segunda tarjeta de red que ya configuramos para comunicarnos con Internet. En la segunda, establecemos la pol�tica de aceptar los paquetes que reciba por la primera tarjeta de red (la que comunica con la red local) y los reenv�e.

Hemos de aclarar que todo este montaje tambi�n sirve si queremos sacar nuestra red local a Internet aunque no dispongamos de ADSL sino de un m�dem convencional. El �nico cambio ser�a sustituir la eth1, que es la tarjeta dedicada a conectar con el router, por ppp0 que es la interfaz del m�dem. Es decir, en caso de disponer de un m�dem para conectar a Internet, las instrucciones ser�an:

[root@gato root]# iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
[root@gato root]# iptables --append FORWARD --in-interface eth0 -j ACCEPT

Llegado a este punto, ya estamos en condiciones de comprobar que cualquier ordenador de nuestra red local es capaz de comunicarse con cualquier equipo externo que posea una IP p�blica. Podr�amos comprobarlo usando simplemente:

[usuario@info5 usuario]$ ping www.um.es

Deber�amos ver

PING araneus.um.es (155.54.1.244) from 62.201.10.34 : 56(84) bytes of data.
64 bytes from araneus.um.es (155.54.1.244): icmp_seq=1 ttl=245 time=220 ms
64 bytes from araneus.um.es (155.54.1.244): icmp_seq=2 ttl=245 time=206 ms
64 bytes from araneus.um.es (155.54.1.244): icmp_seq=3 ttl=245 time=210 ms
64 bytes from araneus.um.es (155.54.1.244): icmp_seq=4 ttl=245 time=197 ms

--- araneus.um.es ping statistics ---
5 packets transmitted, 4 received, 20% loss, time 4007ms
rtt min/avg/max/mdev = 197.133/208.841/220.496/8.386 ms

Esto probar�a, no s�lo que el ordenador n�mero de cinco del aula de inform�tica ha sido capaz de comunicarse con el servidor de la Universidad de Murcia, sino tambi�n, que funciona la resoluci�n de nombres, por lo que navegar�amos ya sin problemas. Adem�s, descubrimos que la m�quina que sirve web se llama araneus con IP p�blica 155.54.1.244 y que nuestro proveedor de Internet nos ha asignado la IP 62.201.10.34 para esta sesi�n.