Iptables NAT (snat y dnat) dport y balanceo

Continuamos con nuestra pequeña revisión de las capacidades de iptables en cuanto a la gestión de paquetes tcp/udp.

A día de hoy está tan extendido su uso, que entiendo que cualquier firewall implementa una variable de linux con iptables con un frontend de apache y una pequeña base de datos.

images (1)

Entre sus funcionalidades nos encontramos que podemos redirigir tráfico destinado a un puerto hacia otro, quedando una regla de ejemplo para aclararlo como la que sigue:

descarga (2)

iptables -A PREROUTING -t nat -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080

Con la anterior regla estamos diciendo al sistema que todas las peticiones que vengan al puerto 80 sean enviadas al 8080 de la máquina. Esto mismo es lo que hace apache con un módulo que envía las peticiones que recibe apache (mod_jk) y las manda a tomcat.

También nos permite hacer NAT (o network adress translation) lo que muchas veces nos salvará cuando sólo dispongamos de una ip pública, montar una infraestructura de varias máquinas con ips internas bien mediante una máquina linux con iptables bien con un firewall de otras marcas.

Dentro de nat, existen diferentes tipos, como por ejemplo, hacer nat desde el origen (source nat o snat), que es lo que sucede cuando utilizamos el adsl de nuestra casa. Nuestra ip de rango privado 192.168.X.X es convertida “misteriosamente” en rango público. Esto se puede implementar con firewalls o linux con iptables que trabajan en capa 3. Las reglas para implementar un cambio de este tipo serían del estilo:

descarga

## Cambiar la dirección de origen por 192.168.2.1
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 192.168.2.1
## Cambiar la dirección de origen a 192.168.2.1, 192.168.2.2 o 192.168.2.3
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 192.168.2.1-192.168.2.3
## Cambiar la dirección de origen por 192.168.2.1, puertos 1-1023
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT –to 192.168.2.1:1-1023

Existe también un tipo de nat que permite hacer nat en el destino (dnat). Las reglas aplicables en ese caso:

## Cambia la dirección de destino por 192.168.2.1
# iptables -t nat -A PREROUTING -i eth1 -j DNAT –to 192.168.2.1

## Cambia la dirección de destino por 192.168.2.1, 192.168.2.2 o 192.168.2.3.
# iptables -t nat -A PREROUTING -i eth1 -j DNAT –to 192.168.2.1-192.168.2.3

## Cambia la dirección de destino del tráfico web por 192.168.2.1,
## puerto 8080.
# iptables -t nat -A PREROUTING -p tcp –dport 80 -i eth1 \
-j DNAT –to 192.168.2.1:8080

También es posible hacer dnat no sólo de todo el tráfico que entra, sino de una interfaz hacia otra:
iptables -t nat -A OUTPUT -p tcp -d 192.168.0.74 –dport 80 -j DNAT –to-destination 192.168.0.17:80

Con esta regla estamos indicando que todo el tráfico que venga por la interfaz de salida del propio firewall con ip 192.168.0.74 al puerto 80 vaya hacia la ip 192.168.0.17 al puerto 80.

Otras variantes de lo explicado anteriormente es la realización de dnat y dport al mismo tiempo, cambiamos la ip y puerto origen a ip y puertos destino :
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.2 –sport 12345:12356 -d 123.123.123.123 –dport 22 […]

Estamos indicando que el tráfico que provenga de la ip 192.168.1.2 del rango de puertos 12345 hasta el 12356 vayan hacia la ip 123.123.123.123 al puerto 22. Con eso no sólo hacemos un dnat, sino también un dport.

Esto es porque iptables trabaja en capa 3, lo cual también lo habilita para hacer funciones de balanceo, como en los siguientes ejemplos:

Para aplicar estas reglas de balanceo, se necesita la extensión de iptables nth.
Los siguientes ejemplos balancean el tráfico https a 3 direcciones ips diferentes. Por cada tercer paquete, este se balancea al servidor apropiado:

iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 0 -j DNAT –to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 1 -j DNAT –to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state –state NEW -m nth –counter 0 –every 3 –packet 2 -j DNAT –to-destination 192.168.1.103:443

Las referencias empleadas en el desarrollo del artículo podemos encontrarlas en:
http://www.netfilter.org/documentation/HOWTO/es/NAT-HOWTO-7.html
http://www.karlrupp.net/en/computer/nat_tutorial
http://www.blissend.com/?q=node/7

Nos veremos en el próximo capítulo que tratará sobre reglas antiescaneo y un pequeño compendio que deberíamos tener en nuestro firewall.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s