La semana pasada tuve que mapear un puerto de una ip del firewall para que llegase a una máquina de una subred interna que tenía como puerta de enlace una ip de la subred interna del firewall. Accediendo desde afuera de nuestra red el puerto funcionaba sin problemas haciendo la redirección con rinetd o con las siguientes reglas en iptables.
iptables -A INPUT -i INTERFAZ_PUBLICO_FIREWALL -p tcp –dport PUERTO_PUBLICO_FIREWALL -j ACCEPT
iptables -A PREROUTING -i INTERFAZ_PUBLICO_FIREWALL -t nat -p tcp –dport PUERTO_PUBLICO_FIREWALL -j DNAT –to IP_SERVICIO_RED_INTERNA:PUERTO_SERVICIO_RED_INTERNA
iptables -A FORWARD -i INTERFAZ_PUBLICO_FIREWALL -p tcp -d IP_SERVICIO_RED_INTERNA –dport PUERTO_SERVICIO_RED_INTERNA -j ACCEPT
De esta manera todos los paquetes que vengan de Internet al puerto publico de mi firewall irán al puerto del servicio que está corriendo en la ip de la máquina de la subred interna. El problema es cuando te intentas conectar desde un host de la misma red local a la que pertenece el servidor interno (conectándote a la ip pública del firewall) . No se puede. Es un problema de enrutado: comenzaremos estudiando lo que ocurre en el caso normal. Veamos que ocurre paso a paso:
.
Una solución es hacer una traducción SNAT a todos los paquetes que entren al cortafuegos y a los que sabemos que también se les va a aplicar la traducción DNAT. Por ej., vamos a efectuar una traducción SNAT a los paquetes que entren al firewall y estén destinados a la ip interna de nuestro servicio en el puerto correspondiente, de forma que parecerá que provengan de la ip de la subred interna del firewall. Ésto forzará al servidor interno a devolver los paquetes a través del cortafuegos, que invertirá la traducción DNAT y los reenviará al cliente.
iptables -A INPUT -i INTERFAZ_PUBLICO_FIREWALL -p tcp –dport PUERTO_PUBLICO_FIREWALL -j ACCEPT
iptables -t nat -A PREROUTING –dst IP_PUBLICA_FIREWALL -p tcp –dport PUERTO_PUBLICO_FIREWALL -j DNAT –to-destination IP_SERVIDOR_INTERNO:PUERTO_SERVICIO_INTERNO
iptables -t nat -A POSTROUTING -p tcp –dst IP_SERVIDOR_INTERNO –dport IP_SERVICIO_INTERNO -j SNAT –to-source IP_INTERNA_FIREWALL
iptables -t nat -A OUTPUT –dst IP_PUBLICA_FIREWALL -p tcp –dport PUERTO_PUBLICO_FIREWALL -j DNAT –to-destination IP_SERVIDOR_INTERNO:PUERTO_SERVICIO_INTERNO
iptables -A FORWARD -i INTERFAZ_PUBLICO_FIREWALL -p tcp -d IP_SERVIDOR_INTERNO –dport PUERTO_SERVICIO_INTERNO -j ACCEPT
No sé si lo he explicado claro y si hay alguna forma mejor de hacerlo, pero a mi me ha funcionado.
En los últimos años, el comportamiento del consumidor hacia las compras online ha experimentado un…
Es cierto que la barra de herramientas es muy útil para buscar las tareas principales…
Cada día que pasa nacen nuevas Apps. Algunas son bastante innecesarias y no siempre están…
Entre las múltiples tareas que podemos hacer con nuestro Smartphone o Tablet Android. Se ha…
Seguramente recuerdes el método para capturar la pantalla que todos alguna vez hemos utilizado. Si…
El navegador Google Chrome es uno de lo más utilizados a día de hoy. Ya…