14
Tema 07: Interconexión de redes privadas con redes públicas en Linux. Tema 07: Interconexión de redes privadas con redes públicas en Linux. 7.1 Introducción. 7.2. Cortafuegos iptables y sus tablas. 7.3. Encaminamiento y NAT en Linux. 7.4. Filtrado de paquetes en iptables. 7.5. Proxy squid. 7.6. Configuración mínima. 7.7. Redes gestionadas. 7.8. Denegar sitios Web por url. 7.9. Denegar sitios Web por palabras clave en url. 7.10. Control de acceso por MAC. 7.1 Introducción. Netfilter es un conjunto de programas disponibles en el núcleo Linux que permiten interceptar y manipular paquetes de red en diferentes estados del procesamiento. Por otro lado, Netfilter es, a su vez, el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux. El componente más popular construido sobre Netfilter es iptables, el cortafuegos más popular, completo y estandarizado bajo sistemas operativos GNU/Linux. 7.2. Cortafuegos iptables y sus tablas. La elección de iptables como cortafuegos se debe principalmente a dos causas: - Es software GPL, lo que quiere decir que está al alcance de cualquiera de manera totalmente gratuita y que se distribuye el código fuente, - Las múltiples posibilidades de configuración que admite, lo que confiere seguridad el sistema. Permite la construcción de reglas precisas para el buen aprovechamiento de los recursos, integrando funcionalidades de NAT y de manipulación de tramas, así como el almacenamiento de registros o logs. La estructura de Iptables es básicamente una cola: cuando un paquete llega, este es validado contra cada una de las reglas del firewall, en el momento que alguna regla casa (match) , se ejecuta la acción que haya sido definida en la regla (descartar el paquete, acceptarlo, enrutarlo, etc). La estructura de un comando iptables es la siguiente : iptables [-t tabla] -{LFADIP} tipo_regla criterio -j acción Página: 1 de 14

Tema 07 Interconexion redes privadas con publicas (Linux)

Embed Size (px)

Citation preview

Page 1: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

7.1 Introducción.7.2. Cortafuegos iptables y sus tablas.7.3. Encaminamiento y NAT en Linux.7.4. Filtrado de paquetes en iptables.7.5. Proxy squid.7.6. Configuración mínima.7.7. Redes gestionadas.7.8. Denegar sitios Web por url.7.9. Denegar sitios Web por palabras clave en url.7.10. Control de acceso por MAC.

7.1 Introducción.Netfilter es un conjunto de programas disponibles en el núcleo Linux que permiten interceptar y manipular paquetes de red en diferentes estados del procesamiento.

Por otro lado, Netfilter es, a su vez, el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

El componente más popular construido sobre Netfilter es iptables, el cortafuegos más popular, completo y estandarizado bajo sistemas operativos GNU/Linux.

7.2. Cortafuegos iptables y sus tablas.La elección de iptables como cortafuegos se debe principalmente a dos causas:

- Es software GPL, lo que quiere decir que está al alcance de cualquiera de manera totalmente gratuita y que se distribuye el código fuente,

- Las múltiples posibilidades de configuración que admite, lo que confiere seguridad el sistema. Permite la construcción de reglas precisas para el buen aprovechamiento de los recursos, integrando funcionalidades de NAT y de manipulación de tramas, así como el almacenamiento de registros o logs.

La estructura de Iptables es básicamente una cola: cuando un paquete llega, este es validado contra cada una de las reglas del firewall, en el momento que alguna regla casa (match) , se ejecuta la acción que haya sido definida en la regla (descartar el paquete, acceptarlo, enrutarlo, etc).

La estructura de un comando iptables es la siguiente :

iptables [-t tabla] -{LFADIP} tipo_regla criterio -j acción

Pero ahora nos fijaremos en alguna de ellas únicamente:

iptables [-t tabla].- Especifica la tabla de trabajo de iptables. Iptables se basa en la utilización de listas a distintos niveles, por lo que se dice que utiliza tablas de reglas. Para determinar sobre que tabla queremos trabajar, se define el parámetro opcional -t, de forma que con iptables –t tabla especificaremos la tabla de trabajo.

Las tablas disponibles son filter, nat, mangle y raw, cuyo uso es el siguiente:

- Filter: En la tabla filter se lleva a cabo la funcionalidad principal de iptables, el filtrado de paquetes. Es la tabla que se aplica por defecto en caso de no especificar ninguna.

- Nat: La tabla nat se utiliza para configurar el protocolo de Network Address Translation. Tiene tres opciones sobre las que podemos añadir reglas.

Página: 1 de 12

Page 2: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

PREROUTING se utiliza para alterar la IP de los paquetes nada más llegar al cortafuegos, la opción OUTPUT, se utiliza para alterar los paquetes generados localmente en el cortafuegos antes de tomar ninguna decisión de encaminamiento y finalmente tenemos la cadena POSTROUTING para alterar los paquetes que salen del cortafuegos. Esta última opción es la que utilizaremos para la configuración básica del NAT.

- Mangle: La tabla mangle permite modificar el TTL (Time To Live o Tiempo de vida del paquete), el TOS (Type Of Service o Tipo de servicio), etc. No suele tener demasiada utilidad.

- Raw: No suele utilizarse nunca. Tiene la funcionalidad de evitar el seguimiento de un paquete. Al impedir el seguimiento, se reduce el consumo de recurso a cambio de no poder realizar análisis del estado del paquete.

Podemos consultar las reglas especificadas para cada tabla mediante la opción -L (--list):

iptables -t nat -L y también iptables –t nat --listiptables -t filter -L y también iptables -t filter --listiptables -t mangle -L y también iptables -t mangle --listiptables -t raw -L y también iptables -t raw --list

También podemos limpiar las reglas especificadas mediante la opción -F (--flush):

iptables -t nat -F y también iptables –t nat --flushiptables -t filter -F y también iptables -t filter --flushiptables -t mangle -F y también iptables -t mangle --flushiptables -t raw -F y también iptables -t raw --flush

Nota: En algunas versiones de Linux, como en las últimas versiones de Ubuntu, es necesario especificar que los cambios se validen para que se tengan en cuenta, por lo que tras la ejecución de los comandos de reglas deseados se deberá ejecutar el comando de validación, es decir, el comando iptables-save.

7.3. Encaminamiento y NAT en Linux.El sistema operativo Linux permite configurar las mismas características de encaminamiento que un router, además de permitir la configuración de un NAT.

Para posibilitar que nuestro servidor Linux sea capaz de comportarse como un router y hacer de puerta de enlace para los PCs de nuestra red local, será necesario ejecutar una serie de comandos de configuración o crear un script que configure el encaminamiento de una red a otra.

Para activar el enrutamiento en un sistema Linux, tan solo basta con poner a '1' la variable ip_forward del sistema operativo, pudiéndolo hacer de dos formas distintas:

1.) Para la sesión actual mediante un comando de consola: Podemos activar el enrutamiento con el valor “1” y desactivarlo con el valor “0”.

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

Nota: ¡Cuidado, ya que debe haber un espacio en blanco entre el cierre de comillas y el signo mayor que!

2.) Añadiéndolo manualmente al fichero de configuración que utiliza el arranque del sistema (/etc/sysctl.conf), es decir, editar el fichero con el usuario root y añadir o quitar el comentario de net.ipv4.ip_forward=1.

Página: 2 de 12

Page 3: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

Nota 1: Deberás reiniciar el sistema para que actualice los cambios.Nota 2: Observa que también se puede hacer para IPv6.

Una vez que nuestro ordenador con sistema operativo Linux actúa como router, lo único que nos queda por hacer es su configuración como NAT.

Para el router NAT existen múltiples opciones de configuración como:

- Filtrar la red por donde entren los paquetes.- Filtrar por el equipo de origen.- Filtrar por el protocolo de comunicación utilizado.- Diferenciar SNAT (Source NAT o NAT de origen) y DNAT (Destination NAT o NAT de

destino).- Cambiar la dirección IP de la red local por una de las varias que puede llegar a tener la

interfaz de salida.- Diferenciar SNAT (Source NAT o NAT de origen) y DNAT (Destination NAT o NAT de

destino).- Mapeo de puertos.- Etc.

Ejemplos de posibles configuraciones de entre las muchas opciones existentes:

1.) Router NAT que comunica un con dos servidores HTTP (eth0 y eth1) de nuestra empresa con Internet, pero con la salvedad de que uno (eth0) escucha por el puerto 8080 en lugar del 80. En este caso el NAT del destino (DNAT) debería modificar el puerto de destino de las tramas TCP dirigidas al puerto de destino 80 por el 8080:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.4:8080

2.) Router NAT que permite salir a Internet únicamente a los equipos de la red privada 192.168.1.0 de entre las otras cinco disponibles y sólo para el protocolo TCP en su puerto 80, es decir, sólo permite conexiones por HTTP, no permitiendo, por ejemplo, conexiones a FTP de Internet:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j MASQUERADE

Aunque existen muchas posibles opciones configurables en el NAT, normalmente los routers disponen de un NAT sencillo para realizar el servicio básico, ya que la situación habitual es filtrar los paquetes mediante la opción por la tabla de filtrado (-t filter).

Así, lo normal es que nuestro router NAT enmascare todo lo que salga por cualquiera de sus interfaces de red sin poner ningún tipo de restricciones al NAT y posteriormente, mediante -t filter se decidirá que dejar pasar y que no, siendo el comando para dicho NAT:

iptables -t nat -A POSTROUTING -j MASQUERADE

7.4. Filtrado de paquetes en iptables.Un cortafuegos inspecciona el contenido de los paquetes que le llegan por cualquiera de sus interfaces de red (eth0, eth1, etc.) y en base a las reglas de filtrado establecidas o programadas en él toma una acción entre tres posibles.

-j acción.- Se debe especificar un de los tres valores siguientes ACCEPT, DROP o REJECT.

ACCEPT: Acepta el paquete.DROP: Deniega el paquete.REJECT: Rechaza el paquete, diferenciándose del caso anterior en que cuando se deniega no se ofrece ningún tipo de explicación al emisor del paquete, y en cambio se hace cuando se rechaza.

Página: 3 de 12

Page 4: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

Por otra parte, un cortafuegos implementado mediante iptables dispone de tres tipos de reglas de filtrado en su tabla filter, siendo: INPUT, OUTPUT y FORWARD.

-{LFADIP} tipo_regla.- Indica el tipo de paquetes que se verán afectados por la regla, teniendo en cuenta que los valores a utilizar son:

INPUT.- Afecta a todos los paquetes que entran al cortafuegos y le tienen a él como dirección de destino. Es importante recordar que no todos los paquetes que entran a nuestro equipo van destinados a él, como en el caso de desempeñar funciones de puerta de enlace, en el que el destinatario de los paquetes será otro equipo.

OUTPUT.- Afecta a todos los paquetes que salen del cortafuegos y tienen su origen en él. Parecido al caso anterior, si el mismo equipo que hace de cortafuegos hace de puerta de enlace, los paquetes podrán salir sin ningún tipo de restricción por parte de estas reglas.

FORWARD.- Afecta sólo a los paquetes que son para reenvíar por el cortafuegos.

Una vez vistas los tres tipos de reglas, es importante hacer notar que cuando el cortafuegos está configurado en un servidor de aplicaciones, se utilizarán principalmente las reglas INPUT y OUTPUT y cuando el cortafuegos hace de NAT, lo normal es no configurarlo en un servidor de aplicación y dedicarlo única y exclusivamente a la labor de puerta de enlace, por lo que para realizar el reenvío utilizará principalmente reglas FORWARD.

Opciones para configurar reglas de filtrado:

Hay 6 opciones básicas con las que se puede jugar en esta apartado del comando. Estas opciones básicas son las siguientes:

-L (--list) : Permite listar las reglas de cada una de las tablas. Ya vista con anterioridad.

-F (--flush): Borrar reglas de la tabla especificada. Ya vista con anterioridad.

-A (--append): Tiene como funcionalidad añadir una regla a continuación de las existentes para la tabla indicada. Una vez realizado un estudio de la que se desea filtrar iremos añadiendo una a una las reglas de filtrado mediante la opción A. Como parte del formato se deberá especificar el tipo de regla a añadir una entrada.

Ejemplo: Permitir acceso a cualquier trama entrante por la interfaz eth0 y que deba ser redirigida.

iptables -A FORWARD -i eth0 -j ACCEPT

Ejemplo: Denegar el acceso a cualquier trama entrante por la interfaz eth1 y que deba ser redirigida.

iptables -A FORWARD -i eth1 -j DROP

-D (--delete): Elimina la regla de la posición indicada de la lista de reglas de filtrado. Como parte del formato se deberá especificar el tipo de regla del que se eliminará la entrada. Para conocer el orden de las reglas en la lista podemos ejecutar un listado de las mismas con la opción -L.

Ejemplo: Eliminar la segunda regla de reenvío en el filtrado:

iIptables -D FORWARD 2

-I (--insert): Permite añadir una nueva regla pero en la posición indicada, es decir, inserta la regla dentro de la lista. Como parte del formato se deberá especificar el tipo de regla del que se insertará una entrada. Para conocer el orden de las reglas en la

Página: 4 de 12

Page 5: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

lista y poder insertar en la posición adecuada, podemos ejecutar un listado de las mismas con la opción -L.

Ejemplo: Teniendo en cuenta que ya existen reglas de filtrado, insertar una nueva como primera de la lista:

iptables -I FORWARD 1 -i eth1 -j DROP

-P (--pollicy): Establece la política o acción a aplicar por defecto en el cortafuegos. Se debe tener en cuenta que por defecto, la acción a tomar es aceptar todas las conexiones. Como parte del formato se deberá especificar el tipo de reglas de las que se indicará la acción por defecto. En caso de no especificarse se aplicará a todos los tipos de reglas.

Nota: En el formato no se especificará -j delante del valor a asignar por defecto (ver ejemplo).

Ejemplo: Especificar que por defecto se deniegue el acceso a todos los paquetes que se reenvíen en el cortafuegos:

iptables -P FORWARD DROP

En relación a la sintaxis a cumplir a la hora de especificar un criterio concreto de filtrado para la regla, existen multitud de parámetros. criterio.- Especifica las características del tipo de paquete que casará con esta regla. Para establecer reglas sencillas podemos operar con las siguientes opciones :

-i interfaz_entrada y -o interfaz_salida.- Indican el criterio a seguir por la regla para especificar la interfaz de entrada de los paquetes y/o la interfaz de salida de los mismos.

Ejemplo: Permitir la redirección de los paquetes que accedan por la interfaz eth1 y salgan por la interfaz eth3:

iptables -A FORWARD -i eth1 -o eth3 -j ACCEPT

-s ip_origen/máscar y -d ip_destino/máscar.- Permiten especificar direcciones IP´s de origen o destino a las que afectará la regla. Se puede especificar una IP concreta, una subred o una red completa.

Ejemplo: Admitir los paquetes provenientes de la red 192.168.121.0 con máscara 255.255.255.0.

iptables -A INPUT -s 192.168.121.0/24 -j ACCEPTiptables -A INPUT -s 192.168.121.0 -j ACCEPT

-p protocolo, --sport puerto_origen, --dport puerto_destino.- Permite filtrar en función del protocolo utilizado y del puerto de origen o destino de la trama. Los valores admitidos de protocolo son: tcp, udp, icmp, or all. Se puede especificar un puerto o un rango de puertos (puerto_inicial:puerto_final).

Ejemplo: Denegar la redirección a los paquetes que intenten acceder al protocolo HTTP entrando por la interfaz eth2.

iptables -A FORWARD -i eth2 -p tcp --dport 80 -j DROP

-m mac --mac-source mac_origen.- Permite especificar una MAC de origen de la información para el filtrado.

Página: 5 de 12

Page 6: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

Ejemplo: Permitir la redirección a los paquetes que lleguen desde la dirección física BB:1C:75:25:A8:00.

iptables -A FORWARD -m mac --mac-source BB:1C:75:25:A8:00 -j ACCEPT

7.5 Proxy squid.El programa Proxy squid existe libre y gratuito para Windows y Linux. En nuestro caso lo trataremos e instalaremos en Linux, su sistema operativo de origen, pero en Windows dispone de las mismas funcionalidades e igual configuración.

Lo instalaremos desde el repositorio de Synaptic, por lo que se debe tener conexión a Internet. Se debe tener en cuenta que se deberá recargar previa instalación.

Tras su instalación y desde la línea de comandos podemos iniciar, parar o reiniciar el servicio. Para ello, ejecutaremos como root los siguientes comandos:

service squid start Inicia el servicio.service squid stop Detiene el servicio.service squid restart Reinicia el servicio.

El fichero de configuración inicial y donde debemos añadir y/o modificar la configuración es:

/etc/squid/squid.conf

Antes de modificar o añadir cualquier valor en dicho fichero, deberíamos hacer una copia de seguridad.

El principal funcionamiento del proxy squid son las listas de acceso, creando una lista de acceso para cada situación que deseamos controlar, teniendo en cuenta que para cada lista de acceso deberá existir una regla de aceptación (allow) o denegación (deny).

El orden de evaluación de las listas de acceso no viene indicado por las propias listas de acceso, sino por las reglas de acceso al protocolo que se deberán indicar posteriormente. Una regla de acceso al protocolo por cada lista de acceso.

La práctica totalidad de las listas de acceso utilizan el protocolo http.

Otra cosa a tener en cuenta es el puerto de escucha, que por defecto es 3128, pero podemos indicar el deseado con el comando http_port numero_puerto-

7.6. Configuración mínima.Partimos de la utilización de las listas de acceso básicas para una configuración mínima correcta:

acl all src 0.0.0.0/0.0.0.0acl manager proto cache_object

Página: 6 de 12

Page 7: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

acl localhost src 127.0.0.1/255.255.255.255acl localnet src 192.168.0.0/255.255.255.0

La primera lista de acceso (acl all src 0.0.0.0/0.0.0.0), denominada all (nombre obligatorio), comprende todas las redes y se debe incluir siempre. Normalmente deberá ser asociada con la última regla de acceso denegándola, con la funcionalidad de, por defecto, denegar el acceso a cualquier equipo de cualquier red que llegue al Proxy y no haya sido atendido por ninguna regla anterior.

La segunda lista de acceso (acl manager proto cache_object) establece el protocolo a utilizar en el tratamiento de la memoria cache. Deberá aparecer como denegada para todo aquel que no sea el propio ordenador donde está instalado el servidor proxy, es decir, localhost.

La tercera lista de acceso (acl localhost src 127.0.0.1/255.255.255.255) identifica la máquina local. Aparecerá en la regla anterior, cuando se deniega el acceso a la cache a todo aquel que no sea localhost y en aparecerá expresamente en otra regla que le prmitirá el acceso a Internet.

La cuarta lista de acceso (acl localnet src 192.168.0.0/255.255.255.0) identifica la red local a la que dará acceso a Internet el Proxy, por lo que aparecera como permitida en la regla correspondiente.

Las reglas correspondientes a las listas de acceso anteriores deberían ser:

http_access allow localhosthttp_access allow localnethttp_access deny manager !localhosthttp_access deny all

7.7. Redes gestionadas.Al instalar squid, el instalador detecta todas las redes a las que tengo acceso y añade listas de acceso para cada una de ellas, por lo que deberé comentar las redes que el Proxy no dará servicio.

7.8. Denegar sitios Web por url.1.) Se deberá añadir una lista de acceso para sitios denegados.

Página: 7 de 12

Page 8: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

El fichero puede tener cualquier nombre, en nuestro ejemplo denydomains, pero deberá localizarse dentro de /etd/squid. Deberá ser un fichero de texto plano en el que aparezcan las url´s que deseamos denegar.

2.) Añadimos la regla de acceso para el protocolo http del fichero de sitios denegados. Nota: Tener en cuenta de añadirlo por encima del resto de sitios admitidos por defecto.

3.) Guardamos los cambios, ejecutamos como root los comandos service squid stop y service squid start.

4.) Desde el cliente configuramos el navegador para que utilice el Proxy en su salida por Internet.

Página: 8 de 12

Page 9: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

5.) Comprobamos el acceso a Internet:

6.) Comprobamos que al intentar acceder a alguno de los sitios denegados no podrá:

Página: 9 de 12

Page 10: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

7.9. Denegar sitios Web por palabras clave en url.1.) De forma parecida al caso anterior, se deberá añadir un fichero con las palabras clave que, en caso de aparecer en la url no serán permitidas su acceso por el Proxy.

El fichero puede tener cualquier nombre, en nuestro ejemplo denywords, pero deberá localizarse dentro de /etd/squid. Deberá ser un fichero de texto plano en el que pondremos las palabras clave que, en caso de aparecer en la url´s deseamos denegar su acceso.

Página: 10 de 12

Page 11: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

2.) Añadimos la regla de acceso para el protocolo http del fichero de palabras denegadas. Nota: Tener en cuenta de añadirlo por encima del resto de sitios admitidos por defecto.

3.) Guardamos los cambios, ejecutamos como root los comandos service squid stop y service squid start. Por último no debemos asegurar que el cliente está configurado para acceder a Internet por el proxy.

4.) Comprobamos que no se proporciona acceso al intentar acceder a alguno de los sitios denegados por palabra clave:

7.10. Control de acceso por MAC.Entre muchas otras opciones, también podemos controlar el acceso por la dirección MAC del equipo cliente. Para ello una lista de acceso con el formato:

acl nombre_lista arp MAC

Ejemplo: Denegar el acceso a la MAC 00:15:AF:B6:86:4C.

…acl controlmac arp 00:15:AF:B6:86:4C…

http_access allow pequeshttp_access allow localhost

Página: 11 de 12

Page 12: Tema 07 Interconexion redes privadas con publicas (Linux)

Tema 07: Interconexión de redes privadas con redes públicas en Linux.

http_access deny controlmachttp_access deny all…

Página: 12 de 12