11.3. Configuración del enmascaramiento IP

Después de leer los capítulos sobre cortafuegos y auditoría IP, probablemente no sea sorprendente que los programas ipfwadm, ipchains, e iptables se utilicen para configurar también las reglas de enmascaramiento IP.

Las reglas de enmascaramiento son una clase especial de reglas de filtrado. Sólamente se puede enmascarar datagramas que se reciban por una interfaz y que vayan a ser encaminados por otra. Una regla de enmascaramiento se construye de forma parecida a una regla de encaminamiento de cortafuegos, pero incluyendo unas opciones especiales que le dicen al núcleo que debe enmascarar el datagrama IP. El programa ipfwadm utiliza la opción -m, ipchains utiliza -j MASQ, e iptables, -j MASQUERADE para indicar que los datagramas que cumplan las condiciones especificadas por la regla deben ser enmascarados.

Veamos un ejemplo. Una estudiante de informática de la Universidad Groucho Marx tiene unas cuantas máquinas en casa interconectadas en una pequeña red local ethernet. Ha decidido utilizar uno de los rangos privados de direcciones IP para su red. Comparte el lugar con otras estudiantes, todas las cuales tienen interés en usar Internet. Dado que las residentes no gozan de una economía especialmente boyante, no se plantean costearse una conexión permanente a Internet. En su lugar utilizan una conexión PPP telefónica. A todas ellas las gustaría poder compartir la conexión para chatear en el IRC, navegar por la Web y bajarse ficheros por FTP directamente a cada una de sus computadoras. El enmascaramiento IP es la respuesta.

Nuestra estudiante primeramente configura una máquina GNU/Linux para que se encargue del enlace telefónico y para que actúe como encaminador de la red local. La dirección IP que le asignan cuando se conecta telefónicamente no es importante. Configura el encaminador GNU/Linux para que haga enmascaramiento IP y usa uno de los rangos privados de direcciones IP para la red local: 192.168.1.0. Se asegura de que todas las computadoras de la red tengan como ruta por defecto una que apunte al encaminador GNU/Linux.

Todo lo que se necesita para que el enmascaramiento funcione en ese escenario son las siguientes invocaciones del programa ipfwadm:
    # ipfwadm -F -p deny
    # ipfwadm -F -a accept -m -S 192.168.1.0/24 -D 0/0
o, utilizando ipchains:
    # ipchains -P forward -j deny
    # ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ
o con iptables:
    # iptables -t nat -P POSTROUTING DROP
    # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
Ahora simpre que alguna de las máquinas de la red local trate de acceder a un servicio en una máquina remota, sus datagramas serán automáticamente enmascarados por el encaminador enmascarador GNU/Linux. La primera regla en cada uno de los ejemplos impide que la máquina GNU/Linux encamine cualquier otro datagrama y proporciona cierta seguridad.

Para listar las reglas de enmascaramiento que se hayan creado, se utiliza la opción -l para el programa ipfwadm, exactamente como se dijo ya al referirnos a los cortafuegos.

Para listar la regla que creamos previamente se utiliza:
    # ipfwadm -F -l -e
tras lo que debe aparecer algo como:
    # ipfwadm -F -l -e
    IP firewall forward rules, default policy: accept
     pkts bytes type  prot opt  tosa tosx ifname  ifaddress  …
        0     0 acc/m all  ---- 0xFF 0x00 any     any        …
La “/m” indica que se trata de una regla de enmascaramiento.

Para listar las reglas de enmascaramiento con ipchains, se utiliza la opción -L. Si listamos las reglas creadas previamente con ipchains, la salida sería algo como:
    # ipchains -L
    Chain input (policy ACCEPT):
    Chain forward (policy ACCEPT):
    target     prot opt     source                destination           ports
    MASQ       all  ------  192.168.1.0/24        anywhere              n/a
    
    Chain output (policy ACCEPT):

Cualquier regla en la que como objetivo aparezca MASQ es una regla de enmascaramiento.

Finalmente, para listar las reglas mediante iptables hay que usar:
    # iptables -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy DROP)
    target     prot opt source               destination         
    MASQUERADE  all  --  anywhere             anywhere           MASQUERADE 
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
Las reglas de enmascaramiento aparecen aquí también con MASQUERADE como objetivo.

11.3.1. Configuración de parámetros temporales

Cuando se establece una nueva conexión, el software de enmascaramiento IP crea una asociación en memoria entre cada una de las máquinas implicadas. Tales asociaciones se pueden ver en cualquier momento inspeccionando el fichero /proc/net/ip_masquerade. Las asociaciones caducan tras un período de inactividad.

Los valores de máximo tiempo de inactividad se pueden configurar mediante ipfwadm. La sintaxis es:
    ipfwadm -M -s <tcp> <tcpfin> <udp>

con ipchains sería:
    ipchains -M -S <tcp> <tcpfin> <udp>

La implementación de iptables incluye unos valores por defecto mucho mayores que no permite cambiar.

Cada uno de esos valores representa un contador usado por el software de enmascaramiento IP y están dados en segundos. La siguiente tabla muestra un resumen de los contadores y sus significados: