ASEGURANDO TU RED CON IPTABLES – PROXY – NAT – IDS

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:
Este contenido es basado en el libro “Linux – Administración del sistema y explotación de los servicios de red” – Sébastien BOBILLIER

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.
router
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.
Captura de pantalla de 2014-09-30 18:23:06
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.
Captura de pantalla de 2014-09-30 18:31:35
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  natpara 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 oACCEPT. 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:
  1. Permitir todo el tráfico excepto, o
  2. 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.
Captura de pantalla de 2014-09-30 18:53:23

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
Si aplican estas políticas no tendrán ningún tipo de conexión
.
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:

Captura de pantalla de 2014-09-30 19:26:41
Se aplican las políticas de TODO restringido.
Captura de pantalla de 2014-09-30 19:27:42
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é.
Al poner OUTPUT en las reglas, esto solo aplica para el equipo en cuestión, si estamos usando nuestro equipo como router para permitir estas conexiones, debemos cambiar OUTPUT por FORWARD. Dado que el tráfico pasa por el equipo pero no es iniciado por él
Todas estas reglas se borran luego del reinicio, por eso hay que crear scripts para que se inicien por defecto.  Pero esto lo veremos en la próxima

ASEGURANDO TU RED CON IPTABLES – PROXY – NAT – IDS ASEGURANDO TU RED CON IPTABLES – PROXY – NAT – IDS Reviewed by PDFREEBOOK on 2:09 Rating: 5

No hay comentarios

Los Comentarios emitidos en cada uno de los contenidos deberan ajustarse al tema tratado durante el post de lo contrario sera Eliminado