Servidor Proxy:
Conocido también como servidor intermediario es una computadora o dispositivo que permite el ingreso de manera indirecta a las paginas Web, es decir, el trabaja como un muro de seguridad puesto que en el administrador ingresa todas aquellas paginas que no deseamos que se ejecuten.
Durante el proceso ocurre lo siguiente:
Cliente se conecta hacia un Servidor Intermediario (Proxy).
Cliente solicita una conexión, fichero u otro recurso disponible en un servidor distinto
Servidor Intermediario (Proxy) proporciona el recurso ya sea conectándose hacia el servidor especificado o sirviendo éste desde un caché.
En algunos casos el Servidor Intermediario (Proxy) puede alterar la solicitud del cliente o bien la respuesta del servidor para diversos propósitos.
El servidor intermediario opera en el nivel de red como filtro de paquetas y en el nivel de aplicación como controlador de diversos servicios. Trabaja como una memoria cache del contenido de red principalmente http, proporcionando al cliente un cache de páginas y ficheros disponibles y un acceso de forma 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 no estuviera disponible 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)
Squid:
Es un servidor intermediario utilizado en sistemas operativos como GNU/Linux y derivado de Unix. Es muy confiable, robusto y versátil y se distribuye bajo los términos de la Licencia Pública General GNU (GNU/GPL).
Squid puede funcionar como Servidor Intermediario (Proxy) y caché de contenido de Red para los protocolos HTTP, FTP, GOPHER y WAIS, Proxy de SSL, caché transparente, WWCP, aceleración HTTP, caché de consultas DNS y otras muchas más como filtración de contenido y control de acceso por IP y por usuario.
GOPHER: es un servicio de Internet consistente en el acceso a la información a través de menús. La información se organiza de forma arborescente: sólo los nodos contienen menús de acceso a otros menús o a hojas, mientras que las hojas contienen simplemente información textual. En cierto modo es un predecesor de la Web, aunque sólo se permiten enlaces desde nodos-menús hasta otros nodos-menús o a hojas, y las hojas no tienen ningún tipo de hiperenlaces.
WAIS: Siglas de Wide Area Information Servers. El WAIS es un servicio de búsqueda de información en la red por palabra clave o frases. Contrariamente a Gopher, que busca ficheros por sus títulos, los motores WAIS buscan en el texto completo de cada fichero y devuelve una lista de todos los documentos que contengan la palabra clave indicada. La mayor parte de los buscadores en el Web utiliza el método WAIS.
El squid consiste en un programa principal como servidor que proporciona la búsqueda en servidores DNS, contiene programas opcionales para reescribir solicitudes y autenticación y herramienta para administración y cliente. La búsqueda en servidores DNS reduce el tiempo de espera al cliente.
NOTA ESPECIAL: Squid no debe ser utilizado como Servidor Intermediario (Proxy) para protocolos como SMTP, POP3, TELNET, SSH, IRC, etc. Si se requiere intermediar para cualquier protocolo distinto a HTTP, HTTPS, FTP, GOPHER y WAIS se requerirá implementar obligatoriamente un enmascaramiento de IP o NAT (Network Address Translation) o bien hacer uso de un servidor SOCKS como Dante.
Por medio del parámetro cache_replacement_policy squid incluye soporte para los siguientes algoritmos para cache:
LRU: Acrónimo de Least Recently Used - Menos Recientemente Utilizado; este algoritmo elimina los accesos menos utilizado dejando en la cache las mas recientes.
LFUDA: Acrónimo de Least Frequently Used with Dynamic Aging – Menos Frecuentemente Utilizado con Envejecimiento Dinámico; en este algoritmos los mas utilizado permanecen en la cache sin importar su tamaño, de modo que un objeto grande que se solicite con mayor frecuencia impedirá que se pueda hacer caché de objetos pequeños que se soliciten con menor frecuencia.
GDSF: Acrónimo de GreedyDual Size Frequency - Frecuencia de tamaño GreedyDual (codicioso dual); este algoritmo optimiza la eficiencia permitiendo que en la cache se mantengan los objetos pequeños mas frecuentes, es decir, trabaja tiene una eficiencia por octeto menor al LFUDA por ello elimina los objetos mas grandes de la cache.
Para la utilización de squid se necesita la versión 2.5.STABLE6 ninguna anterior porque se considera que no son seguras. Squid no se instala de manera predeterminada a menos que especifique lo contrario durante la instalación del sistema operativo, sin embargo viene incluido en casi todas las distribuciones actuales. El procedimiento de instalación es exactamente el mismo que con cualquier otro sustento lógico.
Configuración:
Squid utiliza el fichero de configuración localizado en /etc/squid/squid.conf, y podrá trabajar sobre este utilizando su editor de texto simple preferido. Existen un gran número de parámetros, de los cuales recomendamos configurar los siguientes:
• http_port
• cache_dir
• Al menos una Lista de Control de Acceso
• Al menos una Regla de Control de Acceso
• httpd_accel_host
• httpd_accel_port
• httpd_accel_with_proxy
Parámetro http_port:
Según las asignaciones por IANA los Puertos Registrados para el servidor intermediario son 3128 o 8080 a través de TCP. Por defecto squid maneja el puerto 3128 para atender peticiones sin embargo se puede definir cualquier otro puerto u otros puertos disponibles.
Para servidores intermediarios transparente utiliza los puertos 80 o el 8000 se valdrá del re-direccionamiento de peticiones de modo tal que no habrá necesidad alguna de modificar la configuración de los clientes HTTP para utilizar el Servidor Intermediario (Proxy), esto bastara con utilizar en al puerta de enlace el servidor pero no se puede olvidar que le servidor http también utiliza dichos puertos por lo tanto será necesario volver a configurar el servidor http para asignarle otros puertos disponibles. En la actualidad los servidores intermediarios transparentes no son muy convenientes, por ello puede resultar mas conveniente configurar un servidor intermediario con restricciones por clave de acceso lo cual no puede realizarse con un servidor intermediario transparente debido a que se requiere un diálogo de nombre de usuario y clave de acceso.
Regularmente algunos programas que utilizan los usuarios comúnmente traen por defecto el puerto 8080 (servicio de cache WWW), podemos especificar que squid escuche peticiones en dicho puerto también utilizando http_port y se especifica lo siguiente:
# Default: http_port 3128
http_port 3128
http_port 8080
Si desea incrementar la seguridad, puede vincularse el servicio a una IP que solo se pueda acceder desde la red local. Así:#default: http_port 3128
http_port (dirección IP):3128
http_port (dirección IP):8080
Parámetro cache_men:
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 se almacenan en bloque de 4 Kb; y este parámetro especifica el límite del máximo del tamaño de los bloque acomodados, donde los objetos en tránsito tienen mayor prioridad, pero los objetos de los host utiliza la cache mientras que ese espacio no se necesite; en caso si un objeto en tránsito es mayor a la capacidad de la cache squid excederá lo que sea necesario para satisfacer la petición.
Si se posee un servidor con al menos 128 MB de RAM, establezca 16 MB como valor para este parámetro:
Cache_mem 16 MB
Parámetro cache_dir:
Este parámetro se utiliza para establecer que tamaño se desea que tenga el caché en el disco duro para Squid. Se puede incrementar el tamaño del caché hasta donde lo desee el administrador. Mientras más grande sea el caché, más objetos se almacenarán en éste y por lo tanto se utilizará menos el ancho de banda. Se utiliza el siguiente parámetro:
Cache_dir ufs/var/spool/squid 100 16 256
Los números 16 y 256 significan que el directorio del caché contendrá 16 directorios subordinados con 256 niveles cada uno. No modifique esto números, no hay necesidad de hacerlo. Es muy importante considerar que si se especifica un determinado tamaño de caché y éste excede al espacio real disponible en el disco duro, Squid se bloqueará inevitablemente. Sea cauteloso con el tamaño de caché especificado.
Parámetro ftp_user:
Al acceder a un servidor FTP de manera anónima, de modo predefinido Squid enviará como clave de acceso Squid@. Si se desea que el acceso anónimo a los servidores FTP sea más informativo, o bien si se desea acceder a servidores FTP que validan la autenticidad de la dirección de correo especificada como clave de acceso, puede especificarse la dirección de correo electrónico que uno considere pertinente.
ftp_user proxy@su-dominio. Net
Controles de acceso:
Es necesario establecer Listas de Control de Acceso que definan una red o bien ciertas máquinas en particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso a Squid.
Lista de control de acceso: 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.
acl miredlocal src (dirección ip)/(mascar de subred)
También puede definirse una Lista de Control de Acceso especificando un fichero localizado en cualquier parte del disco duro, y la cual contiene una lista de direcciones IP.
acl permitidos src “/etc/squid/permitidos”
El fichero /etc/squid/permitidos contendría algo como siguiente: 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.15 192.168.1.16 192.168.1.20 192.168.1.40 Reglas de control de acceso:Estas definen si se permite o no el 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 es la siguiente:http_access (deny o allow) (lista de control de acceso) Nota: También pueden definirse reglas valiéndose de la expresión !, la cual significa no. Este tipo de reglas son útiles cuando se tiene un gran grupo de IP dentro de un rango de red al que se debe permitir acceso, y otro grupo dentro de la misma red al que se debe denegar el acceso.
Parámetro cache_mgr:
De modo predefinido, si algo ocurre con el caché, como por ejemplo que muera el procesos, se enviará un mensaje de aviso a la cuenta webmaster del servidor. Puede especificarse una distinta si acaso se considera conveniente.cache_mgr joseperez@midominio.net
Parámetro cache_peer:
El parámetro cache_peer se utiliza para especificar otros Servidores Intermediarios (Proxies) con caché en una jerarquía como padres o como hermanos. Es decir, definir si hay un Servidor Intermediario (Proxy) adelante o en paralelo. La sintaxis básica es la siguiente:
Cache_peer (servidor) (tipo) (http_port) (icp_port) (opciones)
Para configurar como padre se utiliza:
Cache_peer (dirección ip) parent 8080 3128 proxy-only
Para configurar como hermano se utiliza:
Cache_peer (dirección ip) sibling 8080 3128 proxy-only
Cache con aceleración:
Cuando un usuario hace petición hacia un objeto en Internet, este es almacenado en el caché de Squid. Si otro usuario hace petición hacia el mismo objeto, y este no ha sufrido modificación alguna desde que lo accedió el usuario anterior, Squid mostrará el que ya se encuentra en el caché en lugar de volver a descargarlo desde Internet.
Esta función permite navegar rápidamente cuando los objetos ya están en el caché de Squid y además optimiza enormemente la utilización del ancho de banda.
En la sección HTTPD-ACCELERATOR OPTIONS deben habilitarse los siguientes parámetros:httpd_accel_host virtualhttpd_accel_port 0httpd_accel_with_proxy on Idioma: Squid incluye traducción a distintos idiomas de las distintas páginas de error e informativas que son desplegadas en un momento dado durante su operación. Dichas traducciones se pueden encontrar en /usr/share/squid/errors/. Para poder hacer uso de las páginas de error traducidas al español, es necesario cambiar un enlace simbólico localizado en /etc/squid/errors para que apunte hacia /usr/share/squid/errors/Spanish en lugar de hacerlo hacia /usr/share/squid/errors/English.Elimine primero el enlace simbólico actual:rm-f /etc/squid/errorsColoque un nuevo enlace simbólico apuntando hacia el directorio con los ficheros correspondientes a los errores traducidos al español.ln -s /usr/share/squid/errors/Spanish /etc/squid/errors
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 reiniciar para probar cambios hechos en la configuración, utilice lo siguiente: Service squid restart Si desea que Squid inicie de manera automática la próxima vez que inicie el sistema, utilice lo siguiente:chkconfig squid on
Depuración de errores:
Puede realizar diagnóstico de problemas indicándole a Squid que vuelva a leer configuración, lo cual devolverá los errores que existan en el fichero /etc/squid/squid.conf.service squid reload Cuando se trata de errores graves que no permiten iniciar el servicio, puede examinarse el contenido del fichero /var/log/squid/squid.out con el mandato less, more o cualquier otro visor de texto:less /var/log/squid/squid.out
Parámetro VISIBLE_HOSTNAMEEn este parámetro se configura un nombre, no es muy relevante el nombre pero si es importante configurarlo, porque si no causara un error parametro icp_port Este parámetro define el puerto en que el servidor squid recibe solicitudes ICP (Inter-Cache Protocol). Si se desea desacivar se le asigna el valor de cero en le parámetro, parametro cache_swap_low. Indica el nivel en porcentaje de capacidad mínima aceptada por squid, es decir, los objetos se mantendrán en el cache hasta que se cope el límite mínimo Parámetro cache_swap_high Parámetro que especifica en porcentaje el límite máximo que utiliza squid para mantener objetos en el cache. Parametro cache_access_log Especifica en que directorio se realizará el registro de accesos al squid. Parametro cache_log. Define en donde se almacenan los mensajes del sistema Parámetro cache_store_log Este parámetro especifica la ubicación del archivo de registro de objetos sacados del cache. No es necesario activarlo. Es mejor desactivarlo para ahorrar espacio en disco Parámetro emulate_httpd_log Este parámetro define si se desea utilizar emulación de logs del servidor web (httpd).
parametro reference_age.
Este parámetro determina cuanto tiempo permanece el objeto en el cache. Se recomiendo que sea un mes
Parámetro quick_abort
Este parámetro define si un objeto debe almacenarse en el cache cuando el usuario ha interrumpido una solicitud: si el objeto tiene el valor especificado en min o falta más del valor expecificado en max se abortará la transferencia. Si se ha realizado una transferencia mayor del valor en porcentaje especificado en pct, no se abortará el almacenamiento del objeto. Se recomienda utilizar los valores por defecto (16kb tanto para min como para max y 95 para pct)
Parámetro negative_ttl.
Este parámetro se utiliza para definir cuanto tiempo debe esperar squid para procesar nuevamente una página que no ha sido encontrada. Se recomiendan 5 minutos.
Parámetro positive_dns_ttl.
Este parámetro especifica el tiempo que squid mantendrá la dirección de un sitio visitado exitosamente. El valor por defecto es de 6 horas
Parámetro negative_dns_ttl
Especifica el tiempo que espera squid antes de intentar nuevamente determinar la dirección de un sitio solicitado y que no ha sido encontrado. Por defecto 5 minutos.
Parámetro http_access e icp_access
Define una serie de permisos para acceso al servidor squid. Recomendamos utilizar la siguiente configuración:
http_access allow manager localhosthttp_access deny managerhttp_access allow CONNECT !SSL_portshttp_access allow all icp_access allow allmiss_access allow all
parametro httpd_accel_uses_host_header.
Este parámetro se utiliza para activar el proxy transparente, necesario para controlar el acceso a Internet desde las estaciones.
Parámetro httpd_accel_host y httpd_accel_port.
Este parámetro también es necesario para activar el proxy transparente. Al configurar squid de esta manera no es necesario realizar configuración de los navegadores del centro de acceso con servidor proxy lo que se constituye en una ventaja
Parámetro dns_testnames
Este parámetro define que hosts se utilizan para chequear el servidor de nombres
Parámetro append_domain
Este parámetro indica a squid que dominio debe añadirse a solicitudes que vengan sin dominio completo, se debe empezar con un punto.
Parámetro cachemgr_passwd
Squid es posible ser administrado desde una página web una vez instalado (no documentado aquí). Este parametro define la clave de acceso para tener acceso a esta función.