INSTALACION Y CONFIGURACION DE SERVICIO PROXY TRANSPARENTE MANUEL ELISEO OSORIO JAIMES CÓDIGO: 1150715 UNIVERSIDAD FRANCISCO DE PAULA SANTANDER PROGRAMA DE INGENIERIA INGENIERIA DE SISTEMAS 2016 INSTALACION Y CONFIGURACION DE SERVICIO PROXY TRANSPARENTE MANUEL ELISEO OSORIO JAIMES CÓDIGO: 1150715 PROFESOR: JEAN POLO SQUEDA OLAGO UNIVERSIDAD FRANCISCO DE PAULA SANTANDER PROGRAMA DE INGENIERIA INGENIERIA DE SISTEMAS 2016 TABLA DE CONTENIDO INTRODUCCION 4 OBJETIVOS 5 CONCEPTO DE PROXY 6 INTRODUCCION A ARCHIVOS PAC 7 INTRODUCCION A WPAD 8 INSTALACION 11 CONFIGURACION BÁSICA 12 CONFIGURACION DE LAS IPTABLES 19 CONFIGURACION DE WPAD 20 CONFIGURACION DEL SERVIDOR APACHE 22 CONFIGURACION DEL DNS 24 PRUEBA DEL SERVIDOR PROXY 25 BIBLIOGRAFIA 27 INTRODUCCIÓN Proxy es un servicio que funciona de intermediario entre los clientes a otro servidor, de tal forma que el tráfico de las peticiones del cliente a las maquinas externas pasa por el servidor intermedio, esto provoca una situación estratégica que ofrece muchas alternativas de manejo del tráfico como son: control de acceso, registro del tráfico, restricción a determinados tipos de tráfico, mejora de rendimiento, anonimato de la comunicación, caché web, etc. Dependiendo del contexto, la intermediación que realiza el proxy puede ser considerada por los usuarios, administradores o proveedores como legítima o delictiva y su uso es frecuentemente discutido. Un servicio proxy ofrece más efectividad si es transparente. Transparente significa que el usuario en la máquina del cliente no puede saber si su máquina está conectada a un proxy ya que no tiene nada que le indique que esté conectado uno, por lo que se puede manejar mejor en caso incurra en una artimaña para conectarse directamente. La instalación y configuración de un proxy transparente se hace mediante tecnologías como squid sumado a la configuración del protocolo WPAD, que a su vez esta se basa en la utilización de servicios como DHCP y DNS para funcionar. En este Trabajo se verá la instalación y configuración de un web-proxy transparente utilizando la tecnología squid y valiéndose del protocolo WPAD en una máquina virtual utilizando la distribución de GNU/LINUX fedora en su versión server 23.de 64 bits. OBJETIVOS Del presente documento se tienen como objetivos: Definir y entender el concepto de Proxy, Proxy Web Trasparente e identificar sus usos y los beneficios que trae su aplicación. Conocer y analizar el funcionamiento del servidor web Squid en Fedora 23 para su aplicación como servicio. Realizar el proceso de instalación de Squid en Fedora 23. Realizar las pruebas pertinentes al servicio para mirar su funcionamiento. CONCEPTO DE PROXY El término en ingles «Proxy» tiene un significado muy general y al mismo tiempo ambiguo, aunque invariablemente se considera un sinónimo del concepto de «Intermediario». Se suele traducir, en el sentido estricto, como delegado o apoderado (el que tiene poder sobre otro). Un Servidor Intermediario o Proxy se define como una computadora o dispositivo que ofrece un servicio de red que consiste en permitir a los clientes realizar conexiones de red indirectas hacia otros servicios de red. Durante el proceso ocurre lo siguiente: Cliente se conecta hacia un Servidor Proxy. Cliente solicita una conexión, archivo u otro recurso disponible en un servidor distinto. Servidor Intermediario proporciona el recurso ya sea conectándose hacia el servidor especificado o sirviendo éste desde un caché. En algunos casos el Servidor Intermediario puede alterar la solicitud del cliente o bien la respuesta del servidor para diversos propósitos. Los Servidores Proxy generalmente se hacen trabajar simultáneamente como muro cortafuegos operando en el Nivel de Red, actuando como filtro de paquetes, como en el caso de iptables, o bien operando en el Nivel de Aplicación, controlando diversos servicios, como es el caso de TCP Wrapper. Dependiendo del contexto, el muro cortafuegos también se conoce como BPD o Border Protection Device o simplemente filtro de paquetes. Una aplicación común de los Servidores Proxy es funcionar como caché de contenido de Red (principalmente HTTP), proporcionando en la proximidad de los clientes un caché de páginas y archivos disponibles a través de la Red en servidores HTTP remotos, permitiendo a los clientes de la red local acceder hacia éstos de forma más rápida y confiable. Cuando se recibe una petición para un recurso de Red especificado en un URL (Uniform Resource Locator) el Servidor Intermediario busca el resultado del URL dentro del caché. Si éste es encontrado, el Servidor Intermediario responde al cliente proporcionado inmediatamente el contenido solicitado. Si el contenido solicitado estuviera ausente en el caché, el Servidor Intermediario lo traerá desde servidor remoto, entregándolo al cliente que lo solicitó y guardando una copia en el caché. El contenido en el caché es eliminado luego a través de un algoritmo de expiración de acuerdo a la antigüedad, tamaño e historial de respuestas a solicitudes (hits) (ejemplos: LRU, LFUDA y GDSF). Los Servidores Proxy para contenido de Red (Web Proxies) también pueden actuar como filtros del contenido servido, aplicando políticas de censura de acuerdo a criterios arbitrarios. Un proxy transparente combina un servidor proxy con NAT (Network Address Translation) de manera que las conexiones son enrutadas dentro del proxy sin configuración por parte del cliente, y habitualmente sin que el propio cliente conozca de su existencia. Este es el tipo de proxy que utilizan los proveedores de servicios de internet (ISP). Introducción a archivos PAC ¿Qué es un archivo PAC? Una configuración automática de proxy (PAC) es archivo contiene un conjunto de reglas codificadas en JavaScript que permite a un navegador web para determinar si se debe enviar el tráfico de Internet directamente a Internet o ser enviados a través de un servidor proxy. Los archivos PAC pueden controlar cómo maneja un navegador web HTTP, HTTPS y FTP,además proporcionan flexibilidad y redundancia de una manera que no es posible en la actualidad al configurar un proxy explícito. Un navegador que soporte PAC proporciona acceso a una lista de funciones como se define en la especificación original de Netscape. Cada navegador implementa la APA en una caja de arena, lo que permite el acceso sólo a aquellas funciones de JavaScript necesarios para operar y nada más. A modo de ejemplo, no es posible acceder a la cadena de agente de usuario del navegador en un archivo PAC, una cadena disponible a una página web normal. Las funciones soportadas y permitidas por el entorno de pruebas se documentan a continuación. Introducción a WPAD WPAD es una tecnología que ayuda a un navegador web para detectar automáticamente la ubicación de un archivo PAC mediante DNS o DHCP. Un navegador que soporte tanto DHCP y DNS primero intentará localizar un archivo PAC mediante DHCP, y no debe existir una configuración de DHCP conmutará por DNS Si ambos están configurados, un navegador dejará abierta. WPAD de DHCP DHCP de WPAD es un método para detectar la ubicación el aprovechamiento de la infraestructura local de DHCP. configurarse con una opción de almacenar la ubicación navegador web puede consultar. Una vez que se ha navegador web hará una petición para el archivo PAC. del archivo PAC mediante Un servidor DHCP puede del archivo PAC, que un encontrado la opción, el Requisitos previos incluyen un archivo PAC, el servidor web, servidor DHCP, y para cualquier computadora de usuario para ser configurados para obtener su información de la dirección IP de red del servidor DHCP. Ejemplo En el siguiente ejemplo, el nombre de red del ordenador del usuario es laptop01.us.division.company.com. Tras la carga, el navegador web emite una DHCPINFORM, solicitando que el servidor DHCP proporciona una lista de opciones y sus configuraciones. El servidor DHCP responde con un DHCP ACK mensaje, que contiene la lista de opciones y configuraciones Una de estas opciones, 252 , contiene la ubicación del archivo PAC. El navegador web puede realizar una solicitud para descargar el archivo PAC. WPAD de DNS DNS de WPAD es un método para detectar un archivo PAC a través de descubrimiento, aprovechando el nombre de red del ordenador del usuario y el uso de una configuración de DNS coherente y PAC nombre de archivo de secuencia de comandos. DNS de WPAD es el método más ampliamente apoyado, con el apoyo en todos los principales navegadores y sistemas operativos. Requisitos previos incluyen un archivo PAC, el servidor web y un nombre de host DNS de acceso a nivel local para que apunte al servidor web. Ejemplo En el siguiente ejemplo, el nombre de red del ordenador del usuario es laptop01.us.division.company.com. Un archivo PAC con el nombre de archivo wpad.dat está siendo servido por un servidor web en el host wpad.company.com. Un navegador habilitado WPAD de DNS se eliminará el nombre de la máquina (laptop01), aplique wpad al nombre de red, y aplicar como sufijo el recurso de archivo /wpad.dat, por ejemplo, http: // wpad .us.division.company.com / wpad.dat . El navegador intentará descargar el archivo http://wpad.us.division.company.com/wpad.dat. PAC desde la ubicación Si el navegador web no puede resolver el host wpad.us.division.company.com, progresará a través de la jerarquía de nodos sub-dominio y tratar de descargar el archivo desde el host wpad.dat wpad.division.company.com, y así sucesivamente hasta que se alcanza el nodo válido más bajo, wpad.company.com. INSTALACIÓN Y CONFIGURACIÓN DE UN SERVIDOR PROXY TRANSPARENTE CON SQUID El proceso de instalación y configuración se hizo sobre una máquina virtual con GNU/Linux Fedora 23 INSTALACIÓN Para realizar el proceso de instalación abra una terminal y estando registrado como súper-usuario (en caso de que no esté registrado como súper-usuario escriba use el comando “su” y posteriormente escriba su contraseña de root) y escribir el siguiente comando y posteriormente de enter [root@nombreHost Directorio]# dnf install squid Una vez instalado los archivos de configuración se instalarán en el directorio /etc/squid/, en esta carpeta se encuentra el archivo principal de configuración llamado squid.conf. CONFIGURACION BÁSICA12 Lo siguiente es establecer una configuración para nuestro servidor proxy. Existe un gran número de parámetros, pero se recomienda utilizar los siguientes Al menos una lista de control de acceso Al menos una regla de control de acceso http_port cache_dir error_directory, sólo si van a personalizar mensajes de error Controles de acceso Para poder controlar el tráfico de los clientes hacia Internet, es necesario establecer Listas de Control de Acceso que definan una red o bien ciertos anfitriones en particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso a Squid. Listas de control de acceso De modo predeterminado Squid habilita el acceso a todas las redes locales, definidas en el RFC1918. Es decir, permite el acceso a 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7 y fe80::/10. Regularmente una lista de control de acceso se establece con la siguiente sintaxis: acl [nombre de la lista] src [lo que compone a la lista] Si se desea establecer una lista de control de acceso que abarque a toda la red local, basta definir la IP correspondiente a la red y la máscara de la sub-red. Por ejemplo, si se tiene una red donde los anfitriones tienen direcciones del segmento IP 192.168.1.0/24, se puede utilizar lo siguiente: acl localnet src 192.168.1.0/24 También puede definirse una Lista de Control de Acceso especificando un archivo localizado en cualquier parte del disco duro y la cual contiene una lista de direcciones IP. Ejemplo: acl lista1 src “/etc/squid/listas/lista1.conf” También se puede bloquear o permitir dominios y extensiones en las listas de control de acceso con la siguiente sintaxis: para dominios: acl prohibidas url_regex “/etc/squid/listas/prohibidas.txt” este archivo se crearía posteriormente en la dirección /etc/squid/ y su contenido sería dominios por ej: youtube.com, ufps.edu.co, etc. para extensiones: acl palabras urlpath_regex “/etc/squid/listas/palabras.txt” este archivo se crearía posteriormente en la dirección /etc/squid/ y su contenido serían extensiones escritas de esta forma: \. (la extensión) $ por ej: \.exe$ como se puede ver estos archivos están ubicados en una carpeta que se creó llamada listas esto se hace con el comando: #mkdir listas El contenido de cada uno de estos archivos es el siguiente. ya creados los archivos procedemos a abrir el archivo ubicado en el directorio /etc/squid/ y puesto que ya estamos en esa ubicación (confirmarlo con el comando pwd) escribimos el comando nano squid.conf posteriormente se crean las reglas de control de acceso que son: acl redLan src 192.168.1.0/24 acl palabras url_regex "/etc/squid/listas/palabras.txt" acl prohibidas url_regex "/etc/squid/listas/prohibidas.txt" Luego nos disponemos a hacer las reglas de control de acceso: Reglas de Control de Acceso Estas definen si se permite o deniega acceso hacia Squid. Se aplican a las Listas de Control de Acceso. Deben colocarse en la sección de reglas de control de acceso definidas por el administrador, es decir, a partir de donde se localiza la siguiente leyenda: # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # La sintaxis básica de una regla de control de acceso es la siguiente: http_access [deny o allow] [lista de control de acceso](En donde deny son las listas denegadas o prohibidas y allow son las permitidas) Para desactivar la configuración predeterminada y poder utilizar una diferente, localice La línea que incluye http_access allow localnet. en nuestro caso vamos a utilizar una configuración diferente por lo tanto vamos a desactivarla comentando, esto se hace anteponiendo un numeral a la línea de esta forma También nos disponemos a crear las reglas de control de acceso para cada uno de las listas: Otras configuraciones: Opción http_port Este opción es utilizado para indicar el puerto a través del cual escuchará peticiones Squid. EL valor predeterminado es 3128. El puerto estándar designado para servidores de caché de Internet (webcache) es el puerto 8080. http_port 8080 La opción permite establecer también si se quiere utilizar una dirección IP en particular. Esto añade mayor seguridad al servicio, pues si se tiene dos tarjetas de red, una con una dirección IP pública y otra con una dirección IP privada, se puede establecer que Squid solo permita conexiones desde la dirección IP privada. http_port :8080 Si se necesita configurar un servidor proxy en modo transparente, solo es necesario añadir la opción intercept http_port intercept En nuestro caso se escuchará por el puerto por defecto 8080 y lo colocaremos como transparente Opción cache_mgr Esta opción es de carácter informativo. De modo predeterminado, si algo ocurre con el caché, como por ejemplo que muera el proceso, se enviará un mensaje de aviso a la cuenta web master del servidor. Puede especificarse una distinta si acaso se considera conveniente. Opción cache_mem. La opción cache_mem establece la cantidad ideal de memoria para lo siguiente: Objetos en tránsito. Objetos frecuentemente utilizados (Hot). Objetos negativamente almacenados en el caché. Los datos de estos objetos se almacenan en bloques de 4 Kb. La opción cache_mem especifica un límite máximo en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor prioridad. Sin embargo, los objetos frecuentemente utilizados (Hot) y aquellos negativamente almacenados en el caché, podrán utilizar la memoria sin utilizar hasta que esta sea requerida. De ser necesario, si un objeto en tránsito es mayor a la cantidad de memoria especificada, Squid excederá lo que sea necesario para satisfacer la petición. De modo predeterminado, desde la versión 3.1 de Squid, se establecen 256 MB, que es más que suficiente para las necesidades de redes de área local con pocos anfitriones. Puede especificar una cantidad menor para obtener un mejor rendimiento, pues conviene utilizar la memoria disponible para hacer cache en memoria de muchos objetos pequeños que son frecuentemente visitados, que hacer cache de unos pocos objetos grandes que sólo unos pocos usuarios aprovecharán. En nuestro caso se establecieron 512 MB por lo tanto la sintaxis seria: cache_mem 512 Opción cache_dir Este opción se utiliza para establecer que tamaño se desea que utilice Squid para almacenamiento de caché en el disco duro. De modo predeterminado Squid utilizará el formato ufs para crear en el directorio /var/spool/squid un caché de 200 MB, dividido en jerarquías de 16 directorios subordinados, hasta 256 niveles cada uno: cache_dir ufs /var/spool/squid 200 16 256 por defecto el cache_dir está comentado procedemos a des comentar quitando el # Con todos estos cambios ya tendríamos nuestro servidor proxy configurado, procedemos a presionar Ctrl+x y posteriormente escribimos s y damos enter. Por ahora solo tenemos el proxy configurado de manera ordinaria y no transparente, es decir, para que funcione en los host clientes que tiene que configurarse la dirección del servidor proxy y su puerto (en nuestro caso seria 192.168.1.47 por el puerto 8080) Iniciando, reiniciando y añadiendo el servicio al arranque del sistema. Una vez terminada la configuración, ejecute el siguiente mandato para iniciar por primera vez Squid: service squid start Si necesita volver a cargar la configuración para probar cambios realizados, sin detener el servicio, ejecute lo siguiente: service squid reload Si necesita reiniciar para probar cambios hechos en la configuración, considerando que este proceso puede llegar a demorar algunos minutos, ejecute lo siguiente: service squid restart Si desea que Squid inicie de manera automática la próxima vez que inicie el sistema, ejecute lo siguiente: chkconfig squid on Lo anterior habilitará a Squid en todos los niveles de ejecución Configuración de las IPTABLES Ejecutamos la orden # nano /etc/sysconfig/iptables Esta es la configuración por defecto Para comentar una línea utilizamos el comodin “#” , comentamos las que estan marcadas. Ingresamos estas reglas Como configuramos Squid para escuchar peticiones por el puerto 8080 y que la red de área local corresponde a 192.168.1.0/24, abrimos los puertos 80/TCP (http) y 8080/TCP (webcache) del servidor y cerramos la salida desde la red de área local hacia los puertos 20 (ftp-data), 21 (ftp), 22 (ssh) y 443 (https) en el exterior. Guardamos los cambios (al salir del editor nano) Posteriormente guardamos los cambios con systemctl restart squid.service CONFIGURACION DE WPAD Se crea el directorio /var/www/wpad con permisos de acceso y escritura para usuario y de acceso para grupo y otros (rwxr-xr-x). mkdir -m 0755 /var/www/wpad Se crea el archivo /var/www/wpad/wpad.dat y se modifica según sus configuraciones de DNS e IP’s. function FindProxyForURL(url, host) { if ( isInNet(host, "192.168.1.0", "255.255.255.0") || isInNet(host, "127.0.0.0", "255.0.0.0") || shExpMatch(host, "192.168.1.*") || shExpMatch(host, "127.*" ) || shExpMatch(host, "localhost") || shExpMatch(host, "*.osornet.asor") || isPlainHostName(host) || dnsDomainIs(host, ". osornet.asor") ){ return "DIRECT"; } else { return "PROXY dns1.osornet. asor:8080"; } } Es indispensable que el archivo /var/www/wpad/wpad.dat tenga permisos de lectura para todos, de otro modo será imposible compartirlo a través del servicio httpd. chmod a+r /var/www/wpad/wpad.dat CONFIGURACION DEL SERVIDOR APACHE Se crea el archivo wpad.conf nano /etc/httpd/conf.d/wpad.conf los valores resaltados se cambian según sus configuraciones de DNS e IP’s <VirtualHost *:80> ServerName wpad.osornet.asor ServerAlias wpad DocumentRoot /var/www/wpad ErrorLog logs/wpad-error_log22 CustomLog logs/wpad-access_log combined <Directory "/var/www/wpad"> AddType application/x-ns-proxy-autoconfig .dat DirectoryIndex wpad.dat <IfModule mod_authz_core.c> # Apache 2.4 Require local Require ip 192.168.1.0/24 </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from all Allow from 127.0.0.0/8 192.168.1.0/24 </IfModule> </Directory> </VirtualHost> Se reinicia el servicio: systemctl restart httpd CONFIGURACION DEL SERVIDOR DNS Agregamos las siguientes lineas para que el servidor resuelva el nombre de wpad.ajar.asor.local nano /var/named/osornet.asor.zona PRUEBA DEL SERVIDOR PROXY Para probar los funcionamientos de squid vaya al navegador y escriba los dominios a probar en la barra de direcciones, en este caso probaremos con los prohibidos que están en el archivo /var/squid/listas/prohibidas.txt, si el servicio squid funciona bien entonces no debería poder acceder a estas direcciones. Bibliografía: Servidor proxy. (2016). Es.wikipedia.org. https://es.wikipedia.org/wiki/Servidor_proxy Retrieved 10 May 2016, from Web Proxy Autodiscovery Protocol. (2016). Wikipedia. Retrieved 10 May 2016, from https://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol Web Proxy Autodiscovery Protocol. (2016). Wikipedia. Retrieved 10 May 2016, from https://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol FindProxyForURL. (2016). http://findproxyforurl.com/ Findproxyforurl.com. Retrieved 10 May 2016, from