Compartir internet con Iptables y NAT

Este pequeño tutorial intentará ser muy concreto y practico a la hora de configurar un servidor que tiene dos tarjetas de red, una que esta conectada directamente a internet y tiene dirección IP publica fija, y la otra está pegada a la red local de la empresa.

En este ejemplo vamos aprovechar las capacidades de control de conexiones que tienen las iptables. Lo primero, hay que tener en cuenta que el forwarding debe estar habilitado:

echo 1 > /proc/sys/net/ipv4/ip_forward

Y también recordar que para cambiar las reglas, primero hay que “borrar” las anteriores, por ejemplo:

iptables -Fiptables -t nat -F

Ahora veamos un ejemplo particular, suponemos que las direcciones de nuestra red privada son 192.168.0.0/24 (es decir la máscara es de 24 bits: 255.255.255.0).

Creamos un archivo que sera el script de las reglas iptables que vamos a configurar, en mi caso fue /etc/nat.sh. Una vez creado agregamos las siguientes lineas al archivo:

# Habilito el NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQUERADE
# Dejo pasar los paquetes ICMP
iptables -A INPUT -i eth1 -p ICMP -j ACCEPT
# Permito conexiones al puerto 80 (HTTP)
iptables -A INPUT -i eth1 -p TCP –dport 80 -m state –state NEW -j ACCEPT
# Permito conexiones al puerto 25 (SMTP)
iptables -A INPUT -i eth1 -p TCP –dport 25 -m state –state NEW -j ACCEPT
# Permito conexiones al puerto 10000 (Webmin)
iptables -A INPUT -i eth1 -p TCP –dport 10000 -m state –state NEW -j ACCEPT
# Permito conexiones al puerto 53 (DNS)
iptables -A INPUT -i eth1 -p TCP –dport 53 -m state –state NEW -j ACCEPT
# Permito conexiones al puerto 22 (SSH)
iptables -A INPUT -i eth1 -p TCP –dport 22 -m state –state NEW -j ACCEPT
# Acepto paquetes de conexiones ya establecidas
iptables -A INPUT -p TCP -m state –state RELATED -j ACCEPT
# Rechazamos paquetes de conexiones nuevas
iptables -A INPUT -i eth1 -m state –state NEW,INVALID -j DROP
# Rechazamos paquetes de forwarding de conexiones no establecidas
iptables -A FORWARD -i eth1 -m state –state NEW,INVALID -j DROP

Como podemos ver en la primera línea habilitamos el NAT para la red local, en la segunda linea habilitamos el tráfico ICMP para poder realizar pings, también permitimos el acceso a algunos servicios propios que tiene este servidor, como SMTP, HTTP, Webmin, SSH, pero ustedes habilitan los que realmente necesiten en sus maquinas.

Listo eso es todo loque necesitamos, en mi caso tenia 10 estaciones de trabajo y un servidor y ahora todos salen a internet por este servidor con esta configuracion.

Lo unico que queda es poner a ejecutar este script automaticamente cada vez que inicie la maquina. Para esto les recomiendo un vistazo a los scripts iptables-save e iptables-restore, que podrian ser de buena ayuda para luego poner a ejecutarlos automaticamente.

Para que ste blog siga creciendo:


Visitenos en:

Instagram