Este post intenta esclarecer un poco de como funcionan las redes y como convertir nuestro equipo Linux en un Router que nos asegure un poco mรกs nuestra red, ya sea de hogar e incluso empresarial.ย Asรญ que vamos al tema:
Enrutamiento y filtrado
Para hablar y entender sobre el enrutamiento podemos definir primero ยฟcual es la funciรณn del router?. Para ello podemos decir que un router, ademรกs de crear una red y permitir conexiรณn con otros equipos (sabiendo que esto lo podemos hacer con un AP, Switch, Hub u otros) tiene la capacidad de conectar dos redes diferentes entre si.
Como lo podemos ver en la imagen, existe una red local ยซ10.0.1.0ยป que es creada por el router, y llega a una de sus dos interfaces.ย Luego el router en su otra interfaz, tiene otra red, con su IP pรบblica con la cual puede conectar a Internet. La funciรณn de enrutamiento bรกsicamente es servir de intermediario entre estas dos redes para que puedan comunicarse.
Linux como router.
De forma natural, el Kernel de Linux ya tiene la capacidad de hacer ยซforwardingยป,ย pero por defecto viene desactivado, entonces si queremos que nuestro linux pueda hacer este trabajo debemos ir al archivo.
/proc/sys/net/ipv4/ip_forward
Allรญ encontraremos que es un archivo que lo รบnico que contiene es un cero ยซ0ยป, lo que debemos hacer es cambiarlo por un uno ยซ1ยป para activar este comportamiento. Esto por desgracia se borra cuando reiniciemos el equipo, para dejarlo por defecto activado debemos utilizar el comando:
sysctl net.ipv4.ip_forward=1
O editarlo directamente en el archivo /etc/sysctl.conf. Dependiendo de la distribuciรณn esta configuraciรณn tambiรฉn puede estar en un archivo enย /etc/sysctl.d/.
Por defecto nuestro Linux debe tener una tabla de enrutamiento, que generalmente es la configuraciรณn de nuestra red lan y conexiรณn con el router. Si queremos ver este enrutamiento podemos usar dos comandos:
route -n
o
netstat -nr
Ambos comandos deberรญan devolver lo mismo.
En general, esta configuraciรณn es suficiente para que tu Linux sirva como Gateway y otros equipos puedan navegar a travรฉs de nuestro equipo. Ahora bien, si queremos que por ejemplo, nuestro Linux conecte dos o mรกs redes ya sean locales o no, podemos hacer uso de las rutas estรกticas.
Supongamos que mi Linux tiene dos interfaces de red,ย en la primera tiene salida a Internet cuya red es 172.26.0.0 y en la segunda (10.0.0.0) hay unos equipos de otra red local.ย Si queremos enrutar paquetes a esa otra red podemos usar:
route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8
De forma general es:
route add -net REDDESTINO netmask MASCARA gw IPDELLINUX
si damos route -n independientemente de que esta red exista o no, estarรก fijado este enrutamiento en nuestra tabla.
Si queremos eliminar dicho enrutamiento podemos usar
route del -net 10.0.0.0 netmask 255.0.0.0
Iptables.
Bรกsicamente iptables es usado para el filtrado de paquetes, salientes, entrantes u otros, esto hace que se convierta en una gran herramienta para administrar el trรกfico de nuestra red. Pues iptables asรญ como nos permite filtrar el trรกfico del mismo equipo, tambiรฉn permite filtrar el trรกfico que pasada a travรฉs de รฉl. (Forwarding). Iptables puede dividirse en tablas, cadenas, y acciones.
- Tablas:ย bรกsicamente pueden haber dos tablas, filter, para filtrar paquetes yย nat para traducir direcciones, es decir, para pasar de una red a otra.
- Cadenas: La cadena se refiere al tipo de trรกfico que deseamos filtrar o natear,ย es decir, ยฟa cual trรกfico vamos aplicar las tablas?. y pueden ser:ย INPUT: Trรกfico entrante, OUTPUT: trรกfico saliente o FORWARD: Trรกfico que pasa a travรฉs de รฉl, pero no es una conexiรณn propia.
- Tambiรฉn puede aparecer POSTROUTING, que se usa para tratar el paquete de un modo determinado luego de haber sido enrutado.
- Acciones: Las acciones bรกsicamente es la acciรณn que se va realizar con la cadena. Esta acciรณn puede ser DROP, que simplemente destruye ese trรกfico o ACCEPT. que permite al trรกfico hacer dicha acciรณn.
Las reglas de IPTABLES se guardan y ejecutan en el orden que fueron creadas, y si una regla suprime a una regla anterior, siempre queda aplicada la ultima regla en el orden.
Polรญticas de Cortafuegos.
En general, de forma natural los cortafuegos trabajan de dos maneras:
- Permitir todo el trรกfico excepto, o
- No permitir ningรบn trรกfico exceptoโฆ
Para aplicar politicas se usa IPTABLES โ P CADENA ACCION
Donde la cadena representa el tipo de trรกfico (INPUT, OUTPUT, FORWARD, POSTROUTINGโฆ) y la acciรณn es DROP O ACCEPT.
Veamos un ejemplo.
Aquรญ vemos que en principio pude hacer ping, luego le dije a IPTABLES que todo el trรกfico OUTPUT (Saliente) fuera DROP o no permitido. Luego le dije a IPTABLES que lo aceptara.
Si vamos a construir un cortafuegos desde cero debemos siempre aplicar las reglas de (No permitir ningรบn trรกfico exceptoโฆย ย Para esto entonces aplicamos las reglas
iptables -P INPUT DROP iptablesย -P OUTPUT DROP iptablesย -P FORWARD DROP
Para regresar escribimos lo mismo y reemplazamos DROP por ACCEPT.
En este punto, ya que todo el trรกfico estรก denegado, comenzamos a decirle a nuestro IPTABLES cual es el trรกfico que si puede tener.
La sintaxis es:
iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acciรณn
Donde:
Cadena = INPUT, OUTPUT o FORWARD
ip_origen = Origen de los paquetes, esto puede ser una sola IP o una red y en este caso debemos especificar la mascara ).
ip_destino = hacia donde se dirigen los paquetes. esto puede ser una sola IP o una red y en este caso debemos especificar la mascara ).
protocolo = indica el protocolo que usan los paquetes (icmp, tcp, udpโฆ)
puerto = puerto destino del trรกfico.
acciรณn = DROP o ACCEPT.
Ejemplo:
Se aplican las polรญticas de TODO restringido.
Luego aรฑadimos las reglas para poder tener trรกfico por el puerto 80 HTTP y 443 HTTPS, con el protocolo TCP.ย Luego el puerto 53 Se aplica para que el cliente DNS pues a resolver los dominios, de lo contrario no navegarรกs. Esto funciona con protocolo udp.
La linea:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Es por lo siguiente: Cuando haces una peticiรณn HTTP por ejemplo, tu te conectas al puerto 80 del servidor, pero el servidor para devolverte la informaciรณn necesita conectar contigo por un puerto cualquiera. (Generalmente superior a 1024).
Como todos nuestros puertos estรกn cerrados esto no se lograrรกย a menos que abramos todos los puertos superiores a 1024 (Mala idea). Lo que esto dice es que se acepta todo el trรกfico entrante que provenga de una conexiรณn que yo mismo establecรญ. Osea una conexiรณn que en principio yo iniciรฉ.
Espero que esta informaciรณn les haya gustado. En la prรณxima les hablarรฉ de NAT, Proxy y scripts para el Firewal.
Esta es la base que toman muchos emprendedores para fabricar sus propios firewalls, por eso hay en el mercado tantas y tantas marcas de firewalls con linux embebido, algunas buenos y otras no tanto.
Excelente artรญculo. Espero ansioso la segunda parte.
Muy buena explicaciรณn, me sirviรณ para entender el proxy de mi trabajo. Gracias
Hola Jlcmux,
Excelente, me gusto mucho, cuando estara disponible la otra parte?
Un saludos y gracias por compartir
Gracias por el comentario.
Yo mande la otra parte ayer, en el transcurso del dรญa creo que la estarรกn publicando.
Saludos.
Muy buen articulo amigo @Jlcmux,de veras q aprendi con el ya que me esclarecio algunas dudas que tenia desde hace algun tiempo,por cierto no te molestaria compartir el libro de la fuente del articulo,el de Sรฉbastien BOBILLIER, bueno slau2s y ahora a ver la 2da parte, salu2s .
Hola Gracias por comentar Israel.
Resulta que el libro lo tengo en fรญsico. Pero encontrรฉ este link en Google Books. http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=
Creo que estรก completo.
Muy buen artรญculo, agrego una consulta: ยฟCuรกl serรญa la ventaja de utilizar linux como router, si es que existe alguna, con respecto a un hardware dedicado a ello? ยฟO es solo a modo de ejercicio? Se que hay distros dedicadas pero no se si estรกn para rescatar viejas pcs o provee una mayor flexibilidad en la configuraciรณn.
Bueno, pienso que las ventajas y desventajas dependen del escenario donde vayas a implementar esto. Porque seguramente no vas a comprar un UTM o algo asรญ para tu casa? Y quizรก para una empresa pequeรฑa que no pueda pagarlo tampoco. Igualmente a modo de ejercicio es bueno, pues te ayuda a entender toda la logica de esto y puedes configurar mejor un FWall dedicado. Ademรกs de que casi todos estos aparatos realmente lo que tienen es Linux Embebido.
Saludos.
Hola, una pregunta, se puede generar una interfaz ยซartificialยป en linux para similar enrutamiento entre redes? (al estilo packet tracer) para trabajar con mรกquinas virtuales? ej si tengo eth0 (porque tengo una sola placa claro) puedo crear eth1 para hacer otra red? Muy bueno el tuto!
En Linux puedes crear interfaces virtuales, evidentemente. Si tienes eth0, puedes tener eth0:0, eth0:1, eth0:2… etc
Muy bueno, gracias por compartir