7.4. Reglas FORWARD y NAT

La mayoría de las organizaciones se les asigna un número limitado de direcciones IP públicas enrutables desde sus ISP. Debido a esta limitación en la asignación, los administradores deben buscar formas creativas de compartir el acceso a los servicios de Internet sin otorgar las limitadas direcciones IP públicas a todos los nodos en la LAN. El uso de direcciones IP privadas es la forma común de permitir a todos los nodos en una LAN acceder apropiadamente a los servicios de redes internos y externos. Los enrutadores en las puntas de la red (tales como cortafuegos), pueden recibir las transmisiones entrantes desde la Internet y enrutar los paquetes al nodo objetivo en la LAN; al mismo tiempo los cortafuegos/puertas de enlace pueden enrutar peticiones salientes desde un nodo LAN al servicio Internet remoto. Este reenvío del tráfico de la red se puede volver peligroso a veces, especialmente con la disponibilidad de herramientas modernas para violar redes que pueden engañar direcciones IP internas y hacer que la máquina remota del atacante actúe como un nodo en su propia LAN. Para prevenir esto, iptables proporciona políticas de enrutamiento y reenvío que se pueden implementar para prevenir el uso inadecuado de los recursos de la red.

La política FORWARD permite al administrador controlar donde se enviaran los paquetes dentro de una LAN. Por ejemplo, para permitir el reenvío a la LAN completa (asumiendo que el cortafuegos/puerta de enlace tiene una dirección IP interna en eth1), se pueden configurar las reglas siguientes:

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

Esta regla dá a los sistemas detrás del cortafuegos/puerta de enlace acceso a la red interna. La puerta de enlace enruta los paquetes desde un nodo de la LAN hasta su nodo destino, pasando todos los paquetes a través del dispositivo eth1.

NotaNota
 

Por defecto, la política IPv4 en los kernels Red Hat Enterprise Linux desactivan el soporte para el reenvío IP, lo cual previene que las cajas ejecutando Red Hat Enterprise Linux funcionen como enrutadores de bordes de la red dedicados. Para activar el reenvío IP, ejecute el comando siguiente:

sysctl -w net.ipv4.ip_forward=1

Si este comando se ejecuta a través del indicador de comandos, entonces este valor no se recuerda luego de un reinicio. Puede configurar el reenvío de forma permanente modificando el archivo /etc/sysctl.conf. Busque y modifique la línea siguiente, reemplazando 0 con 1:

net.ipv4.ip_forward = 0

Ejecute el comando siguiente para activar el cambio al archivo sysctl.conf:

sysctl -p /etc/sysctl.conf

El aceptar paquetes reenviados a través del dispositivo interno IP interno del cortafuegos permite a los nodos LAN comunicarse entre ellos; sin embargo, no se les permite comunicarse externamente (por ejemplo, a la Internet). Para permitir a los nodos de la LAN que tengan una dirección IP privada comunicarse con redes públicas externas, configure el cortafuegos para el enmascaramiento IP, lo cual coloca máscaras en las peticiones desde los nodos LAN con la dirección IP del dispositivo externo del cortafuegos (en este caso, eth0):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

La regla utiliza la tabla de coincidencias de paquetes NAT (-t nat) y especifica la cadena incorporada de POSTROUTING para NAT (-A POSTROUTING) en el dispositivo de red externo del cortafuegos (-o eth0). POSTROUTING permite la alteración de los paquetes a medida que dejan el dispositivo externo del cortafuegos. Se especifica el objetivo de -j MASQUERADE para enmascarar la dirección IP privada de un nodo con la dirección IP del cortafuegos/puerta de enlace.

Si tiene un servidor en su red interna que desea colocar disponible de forma externa, puede utilizar el objetivo -j DNAT de la cadena PREROUTING en NAT para especificar una dirección IP destino y un puerto donde se pueden reenviar los paquetes entrantes solicitando una conexión a su servicio interno. Por ejemplo, si desea reenviar las peticiones HTTP entrantes a su sistema servidor Servidor Apache HTTP dedicado en 172.31.0.23, ejecute el comando siguiente:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
      --to 172.31.0.23:80

Esta regla especifica que la tabla NAT utiliza la cadena incorporada PREROUTING para reenviar las peticiones HTTP entrantes exclusivamente a la dirección IP listada 172.31.0.23.

NotaNota
 

Si tiene una política por defecto de DROP en su cadena FORWARD, debe anexar una regla para permitir el reenvío de peticiones HTTP entrantes para que sea posible el enrutamiento NAT. Para lograr esto, ejecute el comando siguiente:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT

Esta regla permite el reenvio de peticiones HTTP entrantes desde el cortafuegos a su servidor Servidor Apache HTTP destino detrás del cortafuegos.

7.4.1. DMZs y iptables

Se puede establecer reglas iptables para enrutar el tráfico a ciertas máquinas, tales como a un servidor HTTP o FTP dedicado, en una zona desmilitarizada (DMZ) — una subred local especial dedicada a proporcionar servicios en un transportador público como la Internet. Por ejemplo, para configurar una regla para el enrutamiento de todas las peticiones HTTP entrantes a un servidor HTTP dedicado en la dirección 10.0.4.2 (fuera del intervalo 192.168.1.0/24 de la LAN), la traducción de direcciones de red (NAT) llama una tabla PREROUTING para reenviar los paquetes al destino correcto:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	    --to-destination 10.0.4.2:80

Con este comando, todas las conexiones HTTP al puerto 80 desde afuera de la LAN son enrutadas al servidor HTTP en una red separada del resto de la red interna. Esta forma de segmentación de la red es más segura que permitir conexiones HTTP a una máquina en la red. Si el servidor HTTP es configurado para aceptar conexiones seguras, entonces se debe también redirigir el puerto 443.