10 minute read

Ej. Práctico 3.2.1: Proxy No Trasparente con Autenticación Básica Solución Ej. Pr. 3.2.1.I.- Configuración de un Proxy No Transparente Auth. Basic .........................................................................................................................................94

Práctica Nº3.-Proxy HTTP Caché. Squid

Ej. Práctico 3.2.1: Proxy No Trasparente con Autenticación Básica

Advertisement

Siguiendo con el esquema de red mostrado en la anterior figura, formado por un equipo cliente (máquina física u otra máquina virtual) y un equipo servidor (gateway, DNS y Proxy HTTP, que puede ser una máquina virtual o por ejemplo, una Raspberry Pi), a continuación se implementará una primera configuración de nuestro Proxy squid como Proxy no transparente.

Esto significa que el usuario final o cliente Web debe saber que para poder navegar a través de Internet necesita atravesar un equipo en la red que hace de intermediario entre él y el servidor al que trata de acceder llamado Proxy, y que este controla en todo momento que es posible hacer. En concreto, el cliente requerirá configurar su navegador para informarle de la dirección IP del Proxy y de su puerto de servicio a su navegador. A modo de ejemplo, el Proxy caché HTTP a implementar deberá cumplir las siguientes características:

Puertos de Servicio

Cantidad Memoria RAM Directorio Caché

Tamaño Caché

Nº Directorios y Subdirectorios

Tamaño máximo de archivo a cachear URLs no permitidas

Auditoria Caché

Auditoria Objetos Cacheados Autenticación

Usuarios permitidos

Equipos permitidos y no permitidos

Auditoria acceso

3128 y 8088 32 MB /var/spool/squid3 1GB 16/256 128MB

www.marca.com www.sport.es www.as.com *youtube* *porn* *sex* cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log Sí usuproxy1, usuproxy2 y usuproxy3 192.168.2.0/24 a excepción del 192.168.2.101 (p.e.) access_log /var/log/squid3/access.log

¡¡Importante!! Antes de llevar a cabo la autenticación de usuarios en el servicio Proxy HTTP, deberíamos tener claro dos aspectos: 1) Donde almacenar las cuentas de usuario del servicio y sus contraseñas (un fichero plano, una base de datos, usuarios del sistema, LDAP, etc.). 2) Decidir la forma en que queremos que viajen las claves o contraseñas introducidas por los usuarios desde sus equipos clientes hacia el servidor proxy: sin cifrar (basic) o cifradas (digest).

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 93

Práctica Nº3.-Proxy HTTP Caché. Squid

En relación a los problemas prácticos de configuración del Proxy squid que se han planteado y resuelto en el presente capítulo, por cuestiones de sencillez, y evitar de esta forma el tener que introducir un nuevo servicio (p.e. mysql para la autenticación mediante el uso de una base de datos de usuarios), se hará uso de un fichero plano para guardar los usuarios y sus contraseñas (las contraseñas quedarán almacenadas de manera cifrada), y se mostrará de que manera configurar squid para que las contraseñas viajen del cliente al servidor, tanto sin cifrar, como de manera cifrada.

En concreto, para la configuración de los aspectos de autenticación de squid haremos uso de la directiva "auth_param", la cual adoptará el siguiente aspecto en la resolución de los casos prácticos aquí planteados:

Directiva Tipo Subprograma de Squid encargado de realizar la Autenticación de Usuarios Ruta del Fichero Plano donde se almacenan Usuarios y Contraseñas

auth_param basic digest program /usr/lib/squid3/ncsa_auth

/etc/squid3/claves.dat /usr/lib/squid3/digest_pw_auth -c /etc/squid3/claves-digest.dat - ncsa_auth: programa o librería de squid que nos permite corroborar si el login y password introducidos por un cliente son válidos, ante una autenticación de tipo "basic". Para generar el fichero plano que almacenará la lista de usuarios y contraseñas válidos utilizaremos el comando "htpasswd" disponible tras la instalación del software servidor HTTP apache2 (apt-get install apache2). - digest_pw_auth: programa o librería de squid que nos permite corroborar si el login y password introducidos por un cliente son válidos, ante una autenticación de tipo "digest". Para generar el fichero plano que almacenará la lista de usuarios y contraseñas válidos utilizaremos el comando "htdigest" disponible tras la instalación del software servidor HTTP apache2 (apt-get install apache2), o mediante "md5sum", tal como se mostrará posteriormente.

Otro aspecto a tener en cuenta en toda zona de autenticación, es la definición identificador de la zona, o realm, que le diferenciará de cualquier otra zona de autenticación que pueda estar implementada en el entorno de red donde nos encontremos. Este identificativo es sumamente importante sobre todo en autenticación de tipo "digest", ya que este identificador es usado en la generación de cada una de las contraseñas cifradas asociadas a cada uno de los usuarios que se irán almacenando en el fichero plano encargado de almacenar la lista de usuarios. Esto significa, que cada zona de autenticación de tipo "digest" tendrá sus propios usuarios, no pudiendo compartirse las cuentas de usuario y contraseñas por varias zonas de autenticación (aspecto que si que se permite en autenticación de tipo "basic"). Solución Ej. Pr. 3.2.1.I.- Configuración de un Proxy No Transparente Auth. Basic

Antes de nada, instalaremos el software "squid" el cuál convertirá nuestro equipo servidor en un Proxy HTTP: [root@mv1]# apt-get install squid3

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 94

Práctica Nº3.-Proxy HTTP Caché. Squid

Después pasaremos a su configuración editando el archivo de configuración del servicio "squid.conf" (podemos editarlo de cero): ¡¡Aclaración!! Para la realización del presente ejercicio práctico partiremos de un fichero de configuración vacío. Para no eliminar el fichero "squid.conf" que viene por defecto, lo renombraremos. En el caso de querer estudiar cual es comportamiento por defecto del Proxy squid tras su instalación, puede ejecutarse el siguiente comando (filtramos el contenido del archivo original evitando que nos muestre todas aquellas líneas que empiezan por "#", ya que se encuentra altamente comentado):

[root@mv1]# grep -v '^#' squid.conf | grep . | more

[root@mv1]# cd /etc/squid3 [root@mv1:/etc/squid3]# mv squid.conf squid-anterior.conf [root@mv1:/etc/squid3]# nano squid.conf # Directivas globales # Nombre del servidor proxy visible en los mensajes informativos enviados al cliente Web: visible_hostname miproxy # Puertos de servicio del proxy. Podemos hacer que escuche por más de un puerto simultáneamente: http_port 3128 http_port 8088 # Datos de la Cache: ## Cantidad de memoria RAM que reservamos para este servicio proxy HTTP (p.e.): 32 MB cache_mem 32 MB # Cuidado, debe haber un espacio entre el "32" y el "MB"!!! ## Ruta absoluta del directorio de nuestro sistema de almacenamiento donde se swapearán los sitios Web visitados, su tamaño 1024MB, y el número de directorios (16) y subdirectorios (256) cache_dir ufs /var/spool/squid3 1024 16 256 ## Máximo tamaño del archivo que una vez descargado será cacheado (p.e.): 128 MB maximum_object_size_in_memory 128 MB # Archivos de auditoría en relación con los accesos, contenidos visitados y almacenados: access_log /var/log/squid3/access.log cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log # Autenticación de usuarios: ## Método de autenticación: ncsa_auth, y archivo de usuarios y contraseñas: claves.dat auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/claves.dat ## Cantidad de procesos hijos de squid involucrados en la autenticación auth_param basic children 5 ## Nombre realm identificativo de la zona de autenticación. Si contiene espacios en blanco, hay que indicarlo entre comillas simples o dobles para acotarlo auth_param basic realm "Servidor HTTP Proxy – Modulo Seguridad" ## Periodo de validez de la autenticación. Trascurrido ese tiempo se requerirá de nuevo auth_param basic credentialsttl 2 hours # Definición de Listas de Control de Acceso, ACLs ## Definición de ACL para asegurar la autenticación declarada anteriormente acl autenticacion proxy_auth REQUIRED

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 95

Práctica Nº3.-Proxy HTTP Caché. Squid

## Definición de ACLs para controlar el acceso a máquinas acl cualquier_maquina src all acl maquina1 src 192.168.2.101 ## Definición de ACLs para filtrar URLs de determinados sitios Web por nombre de dominio: acl websprohibidas1 dstdomain "/etc/squid3/websprohibidas1.dat" ## Definción de ACLs para filtrar URLs Web según expresiones regulares y palabras clave: acl websprohibidas2 url_regex "/etc/squid3/websprohibidas2.dat" # Filtrado en base a las ACLs definidas anteriormente: http_access deny maquina1 http_access allow cualquier_maquina autenticacion !websprohibidas1 !websprohibidas2

Una vez configurado el servicio Proxy, antes de reiniciar el servicio para que surtan efecto los cambios, editaremos los ficheros indicados en la configuración anterior: "claves.dat", "websprohibidas1.dat" y "websprohibidas2.dat".

Respecto al fichero de autenticación de usuarios "claves.dat", haremos uso de la herramienta software "htpasswd", tal como utilizábamos para la autenticación de zonas no anónimas en Apache. A modo de ejemplo, crearemos a continuación un fichero que contendrá tres usuarios válidos (login/password) llamado "usuproxy1", "usuproxy2" y "usuproxy3" (la opción "-c" crea el fichero de usuarios, y por tanto, sólo se incluye al crear el fichero para el primer usuario): [root@mv1]# htpasswd -c /etc/squid3/claves.dat usuproxy1 [root@mv1]# htpasswd /etc/squid3/claves.dat usuproxy2 [root@mv1]# htpasswd /etc/squid3/claves.dat usuproxy3

¡¡Aclaración!! El comando "htpasswd" que nos permite crear las cuentas de usuario sólo estará disponible si esta instalado previamente "apache2", ya que es una de sus utilidades. Por tanto, en caso de no disponer de "apache2", habrá que instalarlo: "apt-get install apache2". Estas cuentas de usuario que permitirán autenticarse al Proxy HTTP Caché no son cuentas de usuario del sistema, sino cuentas de usuario pensadas para ser usadas por otro software como "squid" o "apache2".

En relación a los ficheros donde le indicaremos las URLs no permitidas y contenidos que serán filtrados: [root@mv1]# nano /etc/squid3/websprohibidas1.dat # Para evitar acceder a determinadas URLs www.marca.com www.sport.es www.as.com

¡¡Aclaración!! Es importante resaltar que el filtrado de las Web a través de sus URLs también lo podríamos haber obtenido mediante el firewall "iptables". Por ejemplo: [root@raspberry]# iptables -t filter -A FORWARD -s 192.168.2.0/24 -d www.sport.es \ -j DROP

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 96

Práctica Nº3.-Proxy HTTP Caché. Squid

[root@mv1]# nano /etc/squid3/websprohibidas2.dat # Se denegará el acceso a aquellas URLs que contengan una de las siguientes cadenas de caracteres, patrones de búsqueda o palabras clave: youtube porn sex ...

Después de todo lo anterior tan sólo nos quedará reiniciar el servicio para que surtan efecto los cambios en la configuración, aunque antes comprobaremos que no hayamos cometido algún error sintáctico o semántico ("-k check" o "-k parse" nos proporcionan información equivalente): [root@mv1]# squid3 -k check [root@mv1]# squid3 -k parse [root@mv1]# /etc/init.d/squid3 restart

¡¡Importante!! Antes de comprobar el correcto funcionamiento del Proxy desde el equipo cliente, comprobarás que el cliente navega sin necesidad de Proxy, ya que el equipo servidor hace de gateway y reenvía por defecto las solicitudes de conexión dirigidas a los servicios HTTP tcp/80 o HTTPS tcp/443 hacia el servidor de Internet que corresponda . Para forzar al navegador del cliente a tener que configurar el Proxy para poder navegar, deberíamos añadir reglas de filtrado en el servidor/firewall para que corte el tráfico TCP/IP que vaya dirigido a los servicios HTTP tcp/80 o HTTPS tcp/443, evitando que puedan navegar sin configuración de Proxy: [root@mv1]# iptables -A FORWARD -p tcp --dport 80 -s 192.168.2.0/24 -j DROP [root@mv1]# iptables -A FORWARD -p tcp --dport 443 -s 192.168.2.0/24 -j DROP

De igual forma, si tenemos en cuenta que todos los navegadores Web actuales también son clientes FTP, podemos forzar a utilizar este tipo de cliente, y por tanto, a configurar el Proxy en el navegador para este tipo de conexiones cerrando igualmente su puerto por defecto tcp/udp/21: [root@mv1]# iptables -A FORWARD -p tcp --dport 21 -s 192.168.2.0/24 -j DROP [root@mv1]# iptables -A FORWARD -p udp --dport 21 -s 192.168.2.0/24 -j DROP

Una vez configurado nuestra máquina virtual como servidor Proxy, al tratarse de un Proxy no transparente deberemos configurar a los equipos clientes para advertirles de ello. En concreto, deberemos configurar el navegador predeterminado de cada uno de los clientes indicando la dirección IP y puerto de escucha del Proxy. ¡¡Observación!! Normalmente, cuando se habla de configurar el Proxy HTTP en un equipo cliente, se suele asociar al cliente con un equipo que tenga interfaz gráfica, ya sea GNU/Linux (entorno GNOME, KDE, etc.) o Windows. No obstante, no debemos olvidarnos de que hay equipos sin interfaz gráfica, como puede ser un equipo servidor con Ubuntu Server, que aunque no disponen de una navegador Web donde configurar el Proxy, este sí es necesario para poder instalar y actualizar software de los repositorios, al ser muchos de ellos repositorios Web HTTP.

A modo de ejemplo, si quisiéramos configurar el Proxy en un Ubuntu Server tan sólo tendríamos que definir las variables del sistema http_proxy y https_proxy:

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 97

Práctica Nº3.-Proxy HTTP Caché. Squid

[root@mv1]# export http_proxy=http://dirección_ip_proxy:puerto_servicio/ [root@mv1]# export https_proxy=https://dirección_ip_proxy:puerto_servicio/

En el caso de que queramos que la configuración persista ante reinicios del sistema, deberemos definir dichas variables en algún fichero de configuración del sistema (p.e. /etc/environment): [root@mv1]# nano /etc/environment # Añadimos las siguientes líneas: export http_proxy=http://dirección_ip_proxy:puerto_servicio/ export https_proxy=https://dirección_ip_proxy:puerto_servicio/ ...

Por ejemplo, en el caso de estar utilizando Mozilla como navegador deberíamos ir a "Preferencias", y en "Avanzado", en su pestaña "Red" pulsaríamos sobre el botón "Configuración …", y allí ya podremos indicar todo lo relativo al Proxy:

¡¡Aclaración!! Cada cliente o navegador Web (incluso cada versión de cada navegador) configura el Proxy de manera diferente. Deberás comprobar en que opción del menú de tu navegador preferido se configura el Proxy para poderlo probar.

Una vez establecida la conexión podremos comprobar tanto la necesidad de autenticación como el filtrado de contenidos:

Seguridad Informática y Alta Disponibilidad – amartinromero@gmail.com 98

This article is from: