Cortafuegos en Linux con iptables (segunda parte)
Esta segunda entrada sobre cortafuegos en Linux con iptables nos vamos a centrar en la parte del NAT. Si queréis, antes de continuar, podéis consultar la primera parte, donde os explico que es iptables, en qué consiste y su uso básico, con algunos ejemplos. Pero antes de nada, aclaremos algunos conceptos.
¿Qué es un NAT?
NAT (traducción de direcciones de red) se encarga de realizar una reescritura de las cabeceras IP de los paquetes que viajan entre la red pública a un red privada y viceversa. Hay que tener en cuenta que las direccones privadas, de las redes locales, no se pueden enrutar por Internet.
Para solventar NAT permite salir de una red privada reemplazando la dirección IP privada del emisor por la dirección IP pública del router. El reemplazo de las direcciones privadas se realiza gracias al puerto emisor utilizado, ya que por cada conexión el router guardar en memoria el puerto emisor empleado. Cuando llega el paquete de respuesta el router se encarga de cazar el puerto utilizado en la emisión, para así averiguar fácilmente a que dirección privada debe enviarlo.
NAT con iptables
NAT gestiona una tabla específica llamada con el mismo nombre. Esta tabla trabaja con las cadenas: PREROUTING, POSTROUTING y OUPUT, que representan el tráfico que hay que modificar antes del enrutamiento, después del enrutamiento o directamente en la salida.
Podemos visualizar la información de NAT de la siguiente manera:
sudo iptables -t nat -L sudo iptables -t nat -S
Conectar una red privada a una red pública
El caso de conectar una red privada a una red pública suele ser el más habitual. La dirección IP del emisor en la red privada se reemplazará por la dirección pública del router NAT.
Su formato es el siguiente:
sudo iptables -t nat -A POSROUTING -o tarjeta_externa -j acción_de_nat
Veamos con más detalles:
- -t nat : La regla afecta a la tabla NAT
- -A POSTROUTING : Se añade una regla a la cadena POSTROUTING, para el procesado después del enrutamiento
- -o tarjeta_externa : Identifica la tarjeta de red por la cual salen los paquetes del cortafuegos
- -j acción_de_nat : Identifica el modo de acción de NAT, soporta dos opciones, SNAT si la dirección pública es fija y MASQUERADA si la dirección pública es dinámica
Veamos un ejemplo:
sudo iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
En el ejemplo eth2 es la interfaz conectada a la red pública.
Ejemplo de guión de iptables
Como guinda al pastel veamos un ejemplo de un guión o script para levantar un cortafuegos:
#!/bin/bash # Nombre del fichero: levantar_cortafuegos.sh # Empezamos por lo básico sudo iptables -P INPUT DROP sudo iptables -P OUTPUT DROP sudo iptables -P FORWARD DROP # NAT con eth1 como red interna y eth2 como externa, con una IP estática pública sudo iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to--source 84.120.55.89 # Gestionamos los paquetes devueltos sudo iptables -A FORWARND -i eth2 -o eth1 -m state ESTABLISHED,RELATED -j ACCEPT # Tráfico saliente que autorizamos sudo iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport 80 -j ACCEPT sudo iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport 443 -j ACCEPT
Una vez hecho esto solo hemos de guardar el fichero y asignarle permisos de fichero ejecutable:
sudo chmod +x levantar_cortafuegos.sh
Si por alguna razón queremos borrar todas las reglas:
sudo iptables -F #Hacemos un flush de las reglas
Y esto es todo, espero que esta entrada os sea de utilidad en algún momento.