====== Squid: configuración de un servidor proxy ====== //Por Félix Molinuevo, [[http://fmsistemas.com/|FMSI Sistemas de Informática]]// ===== Pasos iniciales ===== El archivo de configuración por defecto de Squid es suficiente para obtener un proxy básico funcionando. Se deben realizar los siguientes cambios: -Configurar el puerto: http_port 8080 -Configurar el tamaño máximo de los archivos a guardar en la caché. Esto por supuesto depende del tamaño que se le pueda asignar a la caché. Se estima aquí que la caché puede ser considerablemente grande, de entre 5 y 10GB. Archivos más grandes que el valor indicado aquí no serán guardados en la caché: maximum_object_size 153600 KB -Configurar el tamaño de la caché y el tipo de almacenamiento. Usamos "aufs" porque hemos visto que Squid funciona mejor, creando varios threads para manejo de los archivos: cache_dir aufs /var/spool/squid 10240 16 256 -Especificar los DNSs a usar. Esto es útil cuando se desea usar otros DNSs distintos a los que están indicados en /etc/resolv.conf: dns_nameservers 172.16.11.1 172.16.11.2 -Configurar los patrones de refresco (refresh_pattern). Esto debe ser configurado con cuidado. Aquí se muestra una extensa lista de patrones de refresco, que pueden no ser ideales para todas las redes: # Debian refresh_pattern -i \.deb$ 129600 100% 129600 refresh_pattern -i \.gz$ 129600 100% 129600 refresh_pattern -i \.bz2$ 129600 100% 129600 # Imagenes refresh_pattern -i \.gif$ 14400 80% 43200 refresh_pattern -i \.tiff?$ 14400 80% 43200 refresh_pattern -i \.bmp$ 14400 80% 43200 refresh_pattern -i \.jpe?g$ 14400 80% 43200 refresh_pattern -i \.xbm$ 14400 80% 43200 refresh_pattern -i \.png$ 14400 80% 43200 refresh_pattern -i \.wrl$ 14400 80% 43200 refresh_pattern -i \.ico$ 14400 80% 43200 refresh_pattern -i \.pnm$ 14400 80% 43200 refresh_pattern -i \.pbm$ 14400 80% 43200 refresh_pattern -i \.pgm$ 14400 80% 43200 refresh_pattern -i \.ppm$ 14400 80% 43200 refresh_pattern -i \.rgb$ 14400 80% 43200 refresh_pattern -i \.ppm$ 14400 80% 43200 refresh_pattern -i \.rgb$ 14400 80% 43200 refresh_pattern -i \.xpm$ 14400 80% 43200 refresh_pattern -i \.xwd$ 14400 80% 43200 refresh_pattern -i \.pict?$ 14400 80% 43200 # Movies refresh_pattern -i \.mov$ 14400 80% 43200 refresh_pattern -i \.mpe?g?$ 14400 80% 43200 refresh_pattern -i \.avi$ 14400 80% 43200 refresh_pattern -i \.qtm?$ 14400 80% 43200 refresh_pattern -i \.viv$ 14400 80% 43200 refresh_pattern -i \.swf$ 14400 80% 43200 # Sounds refresh_pattern -i \.wav$ 14400 80% 43200 refresh_pattern -i \.aiff?$ 14400 80% 43200 refresh_pattern -i \.au$ 14400 80% 43200 refresh_pattern -i \.ram?$ 14400 80% 43200 refresh_pattern -i \.snd$ 14400 80% 43200 refresh_pattern -i \.mid$ 14400 80% 43200 refresh_pattern -i \.mp2$ 14400 80% 43200 refresh_pattern -i \.mp3$ 14400 80% 43200 # Archives refresh_pattern -i \.sit$ 14400 80% 43200 refresh_pattern -i \.zip$ 14400 80% 43200 refresh_pattern -i \.hqx$ 14400 80% 43200 refresh_pattern -i \.exe$ 14400 80% 43200 refresh_pattern -i \.bin$ 14400 80% 43200 refresh_pattern -i \.arj$ 14400 80% 43200 refresh_pattern -i \.lzh$ 14400 80% 43200 refresh_pattern -i \.lha$ 14400 80% 43200 refresh_pattern -i \.cab$ 14400 80% 43200 refresh_pattern -i \.msi$ 14400 80% 43200 refresh_pattern -i \.msp$ 14400 80% 43200 refresh_pattern -i \.psf$ 14400 80% 43200 refresh_pattern -i \.rar$ 14400 80% 43200 refresh_pattern -i \.tar$ 14400 80% 43200 refresh_pattern -i \.gz$ 14400 80% 43200 refresh_pattern -i \.z$ 14400 80% 43200 refresh_pattern -i \.a[0-9][0-9]$ 14400 80% 43200 refresh_pattern -i \.r[0-9][0-9]$ 14400 80% 43200 # Data files refresh_pattern -i \.txt$ 14400 80% 43200 refresh_pattern -i \.pdf$ 14400 80% 43200 refresh_pattern -i \.doc$ 14400 80% 43200 refresh_pattern -i \.rtf$ 14400 80% 43200 refresh_pattern -i \.tex$ 14400 80% 43200 refresh_pattern -i \.latex$ 14400 80% 43200 # Java-type objects refresh_pattern -i \.class$ 14400 80% 43200 refresh_pattern -i \.js$ 14400 80% 43200 refresh_pattern -i \.class$ 14400 80% 43200 # Web-type objects refresh_pattern -i \.css$ 10 20% 4320 refresh_pattern -i \.html?$ 10 20% 4320 refresh_pattern \/$ 10 20% 4320 # Para evitar problemas con scripts .do refresh_pattern -i \.do$ 0 0% 1440 # Default refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 -Configurar una ACL que permita a los usuarios de la intranet hacer uso del proxy: acl intranet src 172.16.11.0/255.255.255.0 -Permitir el acceso a los usuarios que coincidan con la ACL previamente creada. Esta línea debe ser colocada inmediamente antes de la última o penúltima línea http_access del archivo original (eso se debe a que el orden de las mismas es importante): http_access allow intranet -Con esto, Squid debería estar funcionando perfectamente como proxy de la intranet //Nota//: es importante mencionar que Squid es un demonio muy complejo, que posee una enorme cantidad de opciones de configuración. Es probable que la configuración mostrada aquí sea sólo el principio de un largo trabajo de puesta a punto. ===== Autenticación contra PAM ===== -Instalar Squid -Modificar el /etc/pam.conf/squid auth required /lib/security/pam_unix.so shadow nullok account required /lib/security/pam_unix.so -Modificar /etc/squid.conf auth_param basic program /usr/lib/squid/pam_auth auth_param basic children 5 auth_param basic credentialsttl 2 hours auth_param basic realm Y si le marcai la user y la clave mocoreta # set up the acl name for user authentication acl localusers proxy_auth REQUIRED # set up the acl name for intranet (local network) acl intranet src 172.16.11.0/255.255.255.0 # set up acl name for manager and localhost access acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 # set up access to manager from localhost and deny manager access from anywhere else http_access allow manager localhostd http_access deny manager # set up all the denies for those not in the local network http_access deny !intranet # set up the user authentication http_access allow localusers # set up the allows for the local network http_access allow intranet # deny anything that passes beyond this point http_access deny all -Chequear unas opciones de configuración que evitan que los usuarios compartan el mismo nombre de usuario y contraseña en 2 IPs diferentes ===== Autenticación contra Samba ===== *http://wiki.squid-cache.org/ConfigExamples/Authenticate/Ntlm ===== Site filtering ===== This is just a quick view. There is much you can do here, you can also use http://www.squidguard.org to filter sites. acl filter url_regex "/etc/squid/banned" deny_info XANDER_ERR filter http_access deny filter stick partial site matches such as doubleclick into the file /etc/squid/banned to block urls containing these words in the titles. banned file The file XANDER_ERR is found at /etc/squid/errors/English/XANDER_ERR and is a standard html page giving a custom error message. Have a look at the multitude of variables you can embed in the file. ===== Bandwidth control ===== -Agregar al squid.conf en sección DELAY POOL PARAMETERS delay_pools 1 delay_class 1 1 delay_access 1 allow intranet delay_access 1 deny all # Nota: intranet -> misma ACL configurada en las instrucciones anteriores delay_parameters 1 16000/16000 //Nota1//: 16000=16Kbps //Nota2//: en este parámetro, hay muchas posibilidades. Probar según necesidades ===== Análisis de logs ===== Se puede visualizar el log de accesos con: tail -F /var/log/squid/access.log | ccze -CA O para analizarlos, convirtiendo los timestamps en fecha y hora, con Perl: cat /var/log/squid/access.log | perl -p -e 's/^([0-9]*)/"[".localtime($1)."]"/e' | less ===== Bibliografía ===== -http://www.harkness.co.uk/proxy/proxy_configuration.html -http://wireless.gumph.org/content/3/12/023-limited-bandwidth-sharing.html