8.3. rc.DMZ.firewall.txt

El script rc.DMZ.firewall.txt va destinado a aquellos que tienen una Red Interna de Confianza (Trusted Internal Network), una Zona "Desmilitarizada" (De-Militarized Zone) y una Conexión a Internet (Internet Connection). La Zona Desmilitarizada en este caso es "NAT-eada" 1-a-1 y requiere que hagas algo de solapamiento (aliasing) en tu cortafuegos, ésto es, debes conseguir que la máquina reconozca paquetes de más de una IP. Hay varias formas de conseguirlo: una es establecer la traducción NAT de 1 a 1; si dispones de una subred completa, otra forma sería crear una subred, dándole al cortafuegos una IP a la vez interna y externa. A partir de aquí, puedes establecer las IPs en las máquinas de la zona DMZ tal como desees. Sin embargo, ten encuenta que este sistema te "robará" dos IPs: una para la dirección de difusión (broadcast) y otra más para la dirección de red. Al final es decisión tuya qué implementar, pero este tutorial sólo te dará las herramientas para conseguir configurar la parte del cortafuegos y del NAT, siendo el resto tarea tuya, puesto que no te indicará qué debes hacer a partir de ahí (ésto se sale fuera de la intención del tutorial).

El script rc.DMZ.firewall.txt requiere las siguientes opciones compiladas en el núcleo, bien de forma estática, bien en forma de módulos. Sin estas opciones al menos disponibles en el núcleo, no serás capaz de utilizar la funcionalidad del script. O sea, que obtendrás un montón de errores respecto a módulos, objetivos/saltos o comparaciones no encontrados. Si tienes en mente efectuar un control del tráfico o algo similar, debes asegurarte que también tienes todas las opciones necesarias compiladas en el núcleo.

Como puedes ver en la imagen, necesitas tener dos redes internas con este script. Una utiliza el rango IP 192.168.0.0/24 y se trata de una Red Interna de Confianza. La otra utiliza el rango IP 192.168.1.0/24, tratándose de la Zona Desmilitarizada a la que le efectuaremos la traducción NAT 1-a-1. Por ejemplo, si alguien desde Internet envía un paquete a nuestra DNS_IP, utilizaremos DNAT para enviar el paquete a nuestro DNS en la red DMZ. Cuando el DNS comprueba el paquete, lo envía a la dirección IP del DNS de la red interna y no a la IP del DNS externo. Si el paquete no hubiera sido traducido, el DNS nunca hubiera respondido al paquete. Veamos a continuación un pequeño ejemplo del aspecto del código DNAT:

$IPTABLES -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $DNS_IP \
--dport 53 -j DNAT --to-destination $DMZ_DNS_IP
    

Ésto viene a significar los siguiente: para empezar, la traducción DNAT sólo se puede efectuar en la cadena PREROUTING de la tabla nat. Después, buscamos el protocolo TCP en nuestra interfaz $INET_IFACE con la IP de destino que coincida con nuestra $DNS_IP y que esté dirigido al puerto 53, que es el puerto TCP para las transferencias de zona entre servidores de nombres. Si tenemos un paquete con estas características, hacemos que efectúe un salto DNAT. En resumen, efectuamos un DNAT. Después de ésto especificamos dónde queremos que vaya el paquete mediante la opción --to-destination y le damos el valor $DMZ_DNS_IP (la IP del DNS de nuestra red DMZ). Así es como trabaja básicamente el DNAT. Cuando la respuesta al paquete "DNATeado" se envía a través del cortafuegos, automáticamente se "des-DNATea".

Llegados a este punto, deberías comprender suficientemente bien cómo funciona todo, de manera que no te suponga ningún problema importante comprender bastante bien este script. Si hay algo que no entiendes y no ha sido tratado en el resto del tutorial, envíame un correo, pues probablemente sea un fallo por mi parte.