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.
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_NAT
CONFIG_IP_NF_TARGET_LOG
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.