Aviso de cookies

Estoy de acuerdo Este sitio web guarda pequeños fragmentos de información (cookies) en su dispositivo con la finalidad de ofrecer un mejor contenido y para finalidades estadísticas. Usted puede desactivar el uso de cookies modificando la configuración de su navegador. Navegar por nuestro sitio web sin cambiar la configuración del navegador hace que usted nos esté autorizando a guardar esta información en su dispositivo.

Enrutamiento e Iptables

19 de Septiembre de 2012 a las 17:00| seguridad , terminal

Algunas veces nos interesa tener un ordenador que funcione como un  router, para realizar esto necesitaremos varias tarjetas de red en el ordenador y nos permitirá controlar el acceso a una red local. En el ejemplo que se utilizara, tendremos una red local y otra red donde estará el router que nos conecta a Internet, el ordenador necesitara dos tarjetas de red. Cada una de esta redes tendrá un rango de direcciones IP diferentes, el servidor tiene instalado Debian 6 "squeeze".

Un pequeño esquema gráfico que nos presenta el escenario que utilizaremos como ejemplo.

Si la red local esta compuesta por pocos ordenadores, se pueden asignar la dirección IP de forma manual , deberán tener como puerta de enlace la dirección de eth1(192.168.3.15) que es la tarjeta de red que da servicio a la red local y también se le asigna una dirección DNS, la que yo suelo utilizar es la de google 8.8.8.8 .La segunda tarjeta de red(192.168.0.10) se conecta al router, esta tarjeta de red debe tener como puerta de enlace la dirección del router( 192.168.0.1). Si la red local esta compuesto por muchos ordenadores es aconsejable instalar en el servidor un servicio DHCP que asigne las direcciones IP.

Activar ip_forward

Necesitamos comunicar las dos tarjetas de red para que puedan enviar datos  entre ellas, de esta forma la red local podrá tener acceso a Internet. Para realizar esto es imprescindible  activar la variable ip_forward que activa el reenvió de datos entre las dos tarjetas, para comprobar si esa variable esta activa.

cat /proc/sys/net/ipv4/ip_forward

Si aparece “1” la variable esta activa y si aparece “0” no esta activa.

Para activarla, buscar la variable net.ipv4.ip_forward del fichero /etc/sysctl.conf, debe tener  asignado el valor a 1.

net.ipv4.ip_forward = 1

Es posible que la variable tenga ese valor pero que este comentada, en este caso solo descomentar la variable.

Como el servidor se encuentra situado entre las dos redes, lo utilizaremos también de cortafuegos para controlar los datos que entran o salen de la red local. Primero se definen las políticas por defecto, se escoge denegarlo todo que es mas segura

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Como todo el tráfico se deniega debemos dar acceso al tráfico que nos interesa. Lo primero es conseguir que el servidor tenga acceso a Internet,se tiene que aceptar el tráfico por los puertos 80(web),53(DNS) y 443(https, páginas seguras). Se deben abrir los puertos para el tráfico entrante y saliente.

iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

La opción –sport y –dport, especifican el puerto origen y puerto destino respectivamente. La primera regla especifica  “ todo el tráfico entrante en el servidor cuyo puerto origen sea el 80 se acepta” y la segunda regla especifica  “todo el tráfico saliente del servidor cuyo destino sea el puerto 80 se acepta”, los mismo con el puerto 53 y 443.

iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

El puerto para el DNS es del tipo udp.

iptables -A INPUT -p tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

Se aplican las reglas con:

iptables-apply

Para ver las reglas.

iptables -nL

Con esto, el servidor debe tener Internet, pero la red local no tiene Internet porque las dos tarjetas del servidor no están comunicadas, se debe configurar el reenvió con Iptables. Primero se crea una regla que permita el enrutamiento.

iptables -A POSTROUTING -t nat -s 192.168.3.0/24 -o eth2 -j MASQUERADE

Esta regla nos permite comunicar el tráfico que proviene de la red local (192.168.3.0/24) y que salga por la tarjeta eth2 . Esta regla se aplica después de realizar nat (POSTROUTING), la opción MASQUERADE se utiliza para indicar que se va a compartir una misma dirección IP entre un conjunto de ordenadores. Todos los ordenadores de la red local (con diversas dirección IP) utilizaran la misma dirección de la tarjeta eth2 para acceder al router que da acceso a internet.

Ahora se crean una serie de reglas para permitir el reenvió de datos(FORWARD) de la tarjeta eth1 a eth2 para los puertos 80,53 y 443.Para activar el reenvió por el puerto 80.

iptables -A FORWARD -i eth1 -s 192.168.3.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth2 -d 192.168.3.0/24 -p tcp --sport 80 -j ACCEPT

La primera regla, acepta el tráfico que entra por eth2 cuyo origen sea la red local y a través del puerto 80. La segunda regla, acepta el tráfico que entra por la tarjeta eth3 cuyo destino sea la red local y entra por el puerto 80. Lo mismo para el puerto 53 y 443.

iptables -A FORWARD -i eth1 -s 192.168.3.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth2 -d 192.168.3.0/24 -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.3.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth2 -d 192.168.3.0/24 -p tcp --sport 443 -j ACCEPT

Se aplican las reglas y la red local tendrá Internet. Si deseamos aceptar tráfico por otros puertos, debemos decidir si queremos abrir el puerto para el servidor, para la red local o para ambas.

Por ejemplo, si deseamos conectarnos por ssh(puerto 22) al servidor, debemos crear dos reglas.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

Se acepta todo el tráfico cuyo destino sea el puerto 22 y todo el tráfico que sale a través del puerto 22, ahora podemos acceder al servidor por el puerto ssh.

Generar PDF de Enrutamiento e Iptables