Ahora que ya se
conoce el funcionamiento general de iptables. Hablaré de otra tabla bastante
usada en Linux. Se trata de NAT(Network
Address Translation). Esta vez seré más breve que en el anterior manual
pues se supone que ya poseemos algunos conocimientos fundamentales. Por ello me
enfocaré en la materia en sí, que trata de lo que es capaz de hacer NAT y de
sus parámetros.
La tabla de NAT, es
la encargada del redireccionamiento y enmascaramiento de los paquetes de red.
Esto es realmente útil en servidores, equipos que actúan cómo firewall o
equipos de relevancia en la red.
La tabla NAT está
formada de tres cadenas:
- PREROUTING:Esta cadena redirige los paquetes entrantes antes de enroutarlos
- POSTROUTING: Esta cadena modifica los paquetes justo antes de enviarlos
- OUTPUT:
Sólo altera los
paquetes generados localmente por el propio equipo.
Cuidado con el orden
de las reglas escritas, pues la primera tiene prioridad. Es decir que si un
paquete encuentra una regla que lo define, aún habiendo más tarde otra que
también; ejecutará hará caso a la primera y hará lo que esta le diga.
Para que NAT pueda
hacer su tarea es necesario hacer una acción previa de importancia vital. No
importa que nuestras reglas estén escritas perfectamente pues no harán nada si
no escribimos el siguiente comando antes.
echo '1' > /proc/sys/net/ipv4/ip_forward
Este comando debe
hacerse cada vez que arranque el ordenador o sino editar el fichero /etc/systlc.conf y allí donde pone #net.ipv4.ip_forward=1 quitar # para que así hacer que dicho cambio sea permanente. Con ello nos aseguramos que en caso de que no haga caso de una regla, sea por que está mal escrita no porque nos falte algo por hacer.
NAT puede tomar tres acciones, las cuales dependen directamente de las cadenas que se usen, ya que algunas solo pueden ser usada con ciertas cadenas. Pero antes mostraré un esquema del entorno sobre el que se efectuará la explicación.
DNAT: Esta acción redirige todos los paquetes que
vayan al servidor hacia otra dirección. Esta acción solo puede realizarse en
las cadenas PREROUTING, pues trata los paquetes entrantes. DNAT siempre va
seguido de --to dirección de destino a la que queremos redirigir los paquetes.
Por ejemplo podemos hacer que un equipo de la red privada aloje un servicio
accesible desde Internet desde el puerto 4444. Por ejemplo que posea un
servicio instalado, el cual es accesible localmente por el puerto 880. En la
red local habría que escribir la dirección del equipo en un navegador. Ej:
172.25.1.5:880. Para poder acceder desde fuera de la red local, habría que
escribir lo siguiente.
iptables –t NAT –A
PREROUTING –p tcp --dport 444 –i eth0 –j DNAT --to 172.25.1.5:880
Con esta regla activada, escribiendo esto: 192.168.1.1:4444 desde el
exterior accederíamos al 172.25.1.5:880 de la red privada. Este caso es
puramente hipotético, ya que hay que tener más cosas en cuenta cómo el router
(que debería poseer NAT también), el cual habría que configurar también, pero
eso es un tema aparte. Este ejemplo solo es para explicar el funcionamiento de
DNAT.
SNAT: Esta acción hace que todos los paquetes
salientes que cumplan cierta regla adquieran la ip que nosotros le mandemos
“ocultando” su verdadera ip. Esta acción solo se puede hacer en las cadenas
OUTPUT o POSTROUTING, aunque por lo general es usado sólo para las cadenas
POSTROUTING. Esto es útil cuando tenemos ciertos equipos dentro de una red
privada que está oculta a la red pública. Por ejemplo hacemos que los paquetes
mandados desde equipos dentro de una red privada, se transformen en una ip que
pueda comunicarse con el exterior por la interfaz eth0 y que además puede
recibir respuesta. Es decir, que se pueda navegar por Internet o tener
comunicación con equipos fuera de la red privada. Para ello habría que hacer lo
siguiente:
iptables –t NAT –A POSTROUTING
–s 172.25.1.0/24 –o eth0 –j SNAT --to 192.168.1.1
En este caso hemos camuflado todos
los paquetes que vengan de la red privada con la ip de la tarjeta eth0 del
servidor.
MASQUERADE: Posee la misma funcionalidad que SNAT, pero
en este caso calcula automáticamente la ip de la tarjeta de salida. Es decir
que en vez de poner –j SNAT –to ip de la tarjeta de salida, si pusiésemos
MASQUERADE tendríamos el mismo resultado. ¿Entonces cuando saber si poner una u
otra? El calculo de la ip de la tarjeta de red por la que saldrán los paquetes,
consume una pequeña cantidad recursos del servidor, cosa que no siempre nos
interesa. MASQUERADE es útil si la tarjeta de red por la que salen los datos,
recibe su ip de un DHCP (Dynamic Host Configuration Protocol), ya que en algún momento dado, por las razones que sean, la tarjeta de red de
salida podría recibir una ip distinta, arruinando nuestra regla e impidiendo la
salida a Internet de los equipos de la red privada. Pongamos el anterior
ejemplo adaptado a MASQUERADE:
iptables –t NAT –A
POSTROUTING –s 172.25.1.0/24 –o eth0 –j MASQUERADE
MASQUERADE siempre enmascara los
paquetes con la ip de la tarjeta de red por la que salen los paquetes.
Cómo podéis ver el
manejo de la tabla NAT de iptables es relativamente fácil. Sólo se debe tener
bien claro lo que se desea hacer antes de plasmarlo en las reglas que queramos
escribir y podremos hacer lo que queramos. En este caso no haré un script, pues
aquí no existe un “Standard”, sino que todo depende de las necesidades de cada
uno. Recordad que todas las reglas que hagamos deben incluirse en un script de
inicio y que ip_foward debe ser igual a 1.
Las posibilidades de
esta tabla son infinitas, sólo se necesita un poco de imaginación.
Hola, mil gracias por tu conocimiento!
ResponderEliminar