Squid Cache
Uno de los términos más confusos y a la vez de mayor utilidad en un servidor proxy Squid es la 'cache de disco'. Cuando hablamos de 'cache de disco', muchos la relacionan erróneamente con la ' cache de buffer', de la cual también hablaremos.
Tener una cache de disco en un servidor proxy linux con Squid representa un ahorro considerable en ancho de banda y navegabilidad. Esto se debe a que almacena los sitios webs que visitan los usuarios de nuestra LAN, para que la próxima vez que visiten el mismo sitio, la cache del proxy sea quien le facilite la página, y solo se actualiza cuando haya cambios (al menos en teoría).
Esta cache puede tener otras; en dependencia del nivel se puede configurar como padre o hermano. En otras palabras, se pueden establecer múltiples discos duros dedicados a "cachear" páginas webs, interconectados entre sí, para acelerar la navegación.
Configurando la Cache de Disco
Configurando la Cache de Disco
Para establecer el espacio del disco duro para la cache, se necesita modificar el parámetro correspondiente a la cache de directorios en el Squid. Edite su archivo de configuración según la versión de Squid que vaya a usar:
nano /etc/squid/squid.conf
Busque la línea de la cache y descoméntela para evitar el mensaje de que la caché de Squid no puede inicializar.
cache_dir ufs /var/spool/squid 100 16 256
Y cambie el valor 100, que viene por defecto, por el tamaño que quiera asignarle expresado en MB. Ejemplo de asignación de 100GB aproximadamente en un disco de 200GB (50%) y cambie ufs por aufs para mejorar el rendimiento.
Sugerimos usar entre un 50% a un máximo de 80% del espacio libre disponible en su disco duro. Si tiene un DD dedicado para la cache mucho mejor. Los otros valores no se recomienda modificarlos, ya que demasiados directorios pueden provocar problemas de funcionamiento. (16 son los subdirectorios, y en cada uno de ellos se crearán 256 directorios). El parámetro ufs tampoco se debe alterar. En caso de disponer de más discos para repartir entre ellos el caché, se pueden especificar varias líneas de cache_dir
cache_dir aufs /var/spool/squid 100000 16 256Todo está en dependencia del tamaño del disco duro, partición o porción de disco que quiera asignarle a la cache. Sea prudente y recuerde que Linux deja un 5% de espacio reservado en el disco duro para el SO y otros procesos, y si bien se puede modificar este valor mediante tune2fs, no lo recomendamos.
Sugerimos usar entre un 50% a un máximo de 80% del espacio libre disponible en su disco duro. Si tiene un DD dedicado para la cache mucho mejor. Los otros valores no se recomienda modificarlos, ya que demasiados directorios pueden provocar problemas de funcionamiento. (16 son los subdirectorios, y en cada uno de ellos se crearán 256 directorios). El parámetro ufs tampoco se debe alterar. En caso de disponer de más discos para repartir entre ellos el caché, se pueden especificar varias líneas de cache_dir
Vaciando y reconstruyendo la cache
En ocasiones la Cache de Disco necesita una purga general. Esto se debe a que se llena demasiado y en algunos SO basados en Linux, ( al parecer un bug) la cache se desborda o no respeta los parámetros que le hemos dado en el archivo de configuración squid.conf, causando saturación y ralentización en la conectividad y en nuestro servidor. Este proceso también debe hacerse cuando actualizamos la versión de Squid.
Una excelente herramienta para hacer este trabajo la tiene Webmin.
Webmin tiene un módulo exclusivo para realizar la purga y reconstrucción de la cache de disco (o directorios), la cual recomendamos, sin embargo si quiere realizar el proceso manualmente (por terminal), haga lo siguiente dentro del directorio /var/spool/squid o /var/spool/squid
Para Squid2x
La "otra" cache, más conocida como Cache de Buffer, define la cantidad máxima de memoria RAM que utilizará Squid para sus procesos. La cantidad se establece de acuerdo a la RAM física total asignada al servidor y teniendo en cuenta los demás procesos. Su valor por defecto es 8 MB (en algunas versiones de Squid este valor es diferente)
Lo ideal es por cada 256MB asignar 32MB. O sea si el servidor tiene 4GB de RAM, se le debe asignar 512MB aproximadamente, aunque esto es relativo y depende mayormente de la RAM libre de su servidor.
En ocasiones la Cache de Disco necesita una purga general. Esto se debe a que se llena demasiado y en algunos SO basados en Linux, ( al parecer un bug) la cache se desborda o no respeta los parámetros que le hemos dado en el archivo de configuración squid.conf, causando saturación y ralentización en la conectividad y en nuestro servidor. Este proceso también debe hacerse cuando actualizamos la versión de Squid.
Una excelente herramienta para hacer este trabajo la tiene Webmin.
Webmin tiene un módulo exclusivo para realizar la purga y reconstrucción de la cache de disco (o directorios), la cual recomendamos, sin embargo si quiere realizar el proceso manualmente (por terminal), haga lo siguiente dentro del directorio /var/spool/squid o /var/spool/squid
Para Squid2x
service squid stopNos aseguramos que esté apagado
service squid statusBorramos la carpeta de la cache
rm -rf cache/Creamos la carpeta nueva
mkdir cacheCambiamos los permisos
chown proxy:proxy cache/Creamos directorios
squid -zXIniciamos Squid
service squid startPara Squid3x o superior
service squid stopEliminamos el directorio que contiene la caché
rm -Rf /var/spool/squid/*Creamos nuevamente los directorios a través de Squid3x o superior
squid -zIniciamos el servicio
service squid startCache de Buffer
La "otra" cache, más conocida como Cache de Buffer, define la cantidad máxima de memoria RAM que utilizará Squid para sus procesos. La cantidad se establece de acuerdo a la RAM física total asignada al servidor y teniendo en cuenta los demás procesos. Su valor por defecto es 8 MB (en algunas versiones de Squid este valor es diferente)
Lo ideal es por cada 256MB asignar 32MB. O sea si el servidor tiene 4GB de RAM, se le debe asignar 512MB aproximadamente, aunque esto es relativo y depende mayormente de la RAM libre de su servidor.
cache_mem 512 MBPara consultar el consumo de la RAM, ejecute el comando
free -m
Squid como Repositorio Caché
Otra cache de Squid es la llamada 'repositorio caché'. Principalmente sirve para almacenar en nuestro servidor las actualizaciones de los repositorios Ubuntu/Debian con el objeto de replicar en los terminales Linux de nuestra red local, evitando que cada equipo descargue las actualizaciones vía apt-get update desde Internet, y lo haga apuntando al Proxy Disk Caché, ahorrando ancho de banda.
El procedimiento es sencillo. Asumiendo que tiene instalado Squid, edite el archivo de configuración
/etc/squid/squid.conf
Por defecto, Squid trae la siguiente configuración
# maximum_object_size 4096 KB # cache_replacement_policy lru refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320
Ahora vamos a asignarle 100 mb de cache para objetos y modificar la frecuencia de refresco, ya que los paquetes que se descargan de los repositorios oficiales de Ubuntu, generalmente ninguno supera ese tamaño.
NOTA: Recuerde que a mayor tamaño, mayor serán los archivos que almacenará el Squid y más rápido se llenará la caché. Y d e acuerdo al portal de Squid , existen 4 algoritmos de trabajo: lru, heap GDSF, heap LFUDA y heap LRU , pero el que ha demostrado mejor desempeño en escenarios de alta carga de trabajo es heap LFUDA . Por eso cambiamos lru por heap LFUDA .
NOTA: Recuerde que a mayor tamaño, mayor serán los archivos que almacenará el Squid y más rápido se llenará la caché. Y d e acuerdo al portal de Squid , existen 4 algoritmos de trabajo: lru, heap GDSF, heap LFUDA y heap LRU , pero el que ha demostrado mejor desempeño en escenarios de alta carga de trabajo es heap LFUDA . Por eso cambiamos lru por heap LFUDA .
refresh_pattern expresión_regular mín porcentaje máx
es para establecer el tiempo de refresco entre los diferentes elementos
# tamaño mínimo y máximo de los objetos que se guardarán en memoria # Ej: 200 Mb (maximum_object_size 20480 KB) minimum_object_size 0 KB maximum_object_size 4 MB # objects are evicted (replaced) when disk space is needed cache_replacement_policy heap LFUDA # refresh_pattern (frecuencia de actualizacion de archivos) ref: maximum_object_size # http://www.alterserv.com/foros/index.php?topic=363.msg2695#msg2695 # Calcule Minutos http://www.convertworld.com/es/tiempo/Minutos.html # Agregue mas Extensiones http://filext.com/ # Nota: override-expire override-lastmod refresh-ims reload-into-ims ignore-reload ignore-no-store ignore-private ignore-auth ignore-must-revalidate pueden generar advertencia 'violates HTTP' # Standard de actualización de objetos: Mayor a 43200 min (30d) download. Menor a 14400 min (10d) keep. Fecha de modificacion mayor a 80%, download refresh_pattern -i .(gif|png|jp?g|ico|bmp|pict|tiff?)$ 14400 80% 43200 reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims refresh_pattern -i .(swf|htm|html|shtm|shtml|nub)$ 14400 80% 43200 reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims refresh-ims refresh_pattern -i .(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 14400 80% 43200 reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims refresh_pattern -i .(avi|iso|wav|mid|ogg|mp?|mpe?g?|mpeg|aiff?|mov|3gp|wm?|flv|x-flv|axd)$ 14400 80% 43200 reload-into-ims ignore-no-store ignore-private ignore-auth refresh-ims refresh_pattern -i .(qtm?|viv|au|ram?|snd|sit|hqx|arj|lzh|lha|txt|rtf|tex|latex|class|js|ico|do|dll|asf|dat|psf)$ 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 refresh_pattern -i \.css$ 10 20% 4320 # Default refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 # Opcional (Antivirus) (descomente la que necesite) #refresh_pattern .avast.com/.*\.(vpu|stamp) 14400 80% 43200 reload-into-ims #refresh_pattern .eset.com/.*\.(exe|rar|nup|ver) 4320 100% 43200 reload-into-ims #refresh_pattern .avg.com/.*\.(rar|nup|ver) 4320 100% 43200 reload-into-ims #refresh_pattern .pandasecurity.com/.*\.* 4320 100% 43200 reload-into-ims #refresh_pattern .pandasoftware.com/.*\.exe 4320 100% 43200 reload-into-ims #refresh_pattern .*downloads.*\.kaspersky-labs\.com/.*\.(.*) 1440 100% 1440 reload-into-imsReinicie el Squid (en dependencia de su version 2x o 3x)
service squid restart o service squid3 restart
El último paso es modificar el apt de los terminales con Linux que se conectarán a nuestro servidor de repositorios caché. Si existe apt.conf lo editamos
nano /etc/apt/apt.conf
Si no existe, pero hay una carpeta llamada /etc/apt.conf.d/, creamos un archivo con cualquier nombre (Ejemplo: cachedeb) y lo colocamos dentro de esta carpeta. En cualquiera de los casos, ya sea en el archivo apt.conf o en el que creamos, debe agregarle las siguientes líneas:
# Configuración para utilizar apt Acquire { http { Proxy "http://192.168.1.10:3128"; } }
Donde 192.168.1.10 es la IP de nuestro servidor que tiene el Squid con el Disk Caché, y el puerto 3128, el el puerto por defecto de Squid (esto puede variar en dependencia de la ip y puerto asignado al Squid por el Administrador TI)
Si el proxy requiriere autenticación deberá colocarla en el archivo
# Configuración para utilizar apt Acquire { http { Proxy "http://usuario:contrasena@192.168.1.10:3128"; } }
NOTA: Si expira o cambia la contraseña, debe actualizar el archivo con la nueva información.
Si existe el archivo /etc/apt/apt.conf se debe comentar la siguiente línea para que no falle el apt-get:
#Acquire::http::proxy “false”;
Tenga en cuenta que el servidor debe tener el mismo sistema operativo linux y la misma versión de los terminales de su red local, para que los repositorios que descargue le sirvan o generará error la actualización.
Para finalizar ejecute
Edite su archivo de configuración del squid con el editor de su preferencia (asegúrese de tener instalado bien el squid)
Y http_port (en dependencia de su Squid. Para 2x use la cláusula "transparent" y para 3x "intercept")
Edite su archivo /etc/apache2/sites-enabled/000-default.conf e incluya la configuración: Para Squid3x o superior
Si tenía instalado anteriormente squid (2x), elimínelo primero y también el contenido de la carpeta, para evitar cualquier redirección al antiguo squid y luego reinicie y cree nuevamente la carpeta squid y haga el procedimiento indicado arriba.
Por alguna razón que desconocemos, squid-cache cada vez que se actualiza a una nueva versión, desafortunadamente cambia los parámetros de cachemgr y su acceso (y de otro montón de cosas). Las configuraciones propuestas son hasta squid v3.2 y v3.3.1. No podemos garantizar el funcionamiento de CacheMgr en versiones posteriores. Para mayor información visite a los reyes magos: la wiki de cachemgr squid. especialmente el enlace a esta herramienta CGI para los últimos cambios.
También debe tener en cuenta que si utiliza la aplicacion sqstat, para estadísticas de squid en tiempo real, al establecer un password en cachemgr_passwd, debe agregarla también al archivo de configuración de sqstat y reiniciar apache2. Para mayor información sobre cómo configurar sqstat visite Network Monitor
12. Verifique la carga de su squid
Otra configuración que ayuda a que se conozca la naturaleza de las peticiones y por tanto hace más transparente el tráfico es X-Forwarded-For-Headers, sin embargo con el asunto de la "violación a la privacidad" se puede convertir más en un problema que en una solución. No obstante para los que quieran activarla, abran su squid.conf y coloquen lo siguiente:
Con esta acción se puede confiar en las solicitudes de la dirección IP 127.0.0.1 desde cualquier host en el dominio (proxy.example.com). La información de la cabecera X-Forwarded-For, en este caso, se utilizará en lugar de la dirección del cliente directamente para los efectos de las ACL, delay pools y logging.
apt-get update
Cache Manager Interface
Squid v3.x tiene un bug relacionado con cachemgr.cgi, el cual se debate en el Foro Ubuntu, que consiste en que el nuevo cachemgr3.cgi está mal compilado, sin embargo se soluciona (casi en su totalidad) haciendo las modificaciones siguientes: Edite su archivo de configuración del squid con el editor de su preferencia (asegúrese de tener instalado bien el squid)
apt-get install squid-cgi squid squid-common squid-client nano /etc/squid/squid.confVerifique las siguientes directivas (Reemplace nombre_del_servidor por el nombre de su servidor).
acl manager proto cache_object # Only allow cachemgr access from localhost http_access allow manager nombre_del_servidor http_access allow manager localhost http_access deny managerNota: En la versión 3x de Squid las acls acl manager proto cache_object y acl localhost src 127.0.0.1/8 0.0.0.0/32 generan error por tanto debe eliminarlas
Y http_port (en dependencia de su Squid. Para 2x use la cláusula "transparent" y para 3x "intercept")
http_port 192.168.1.10:8080 transparent o http_port 192.168.1.10:8080 interceptActive cachemgr_password (Reemplace su_contraseña por la contraseña deseada)
#Example: # cachemgr_passwd secret shutdown # cachemgr_passwd lesssssssecret info stats/objects # cachemgr_passwd disable all cachemgr_passwd su_contraseña allSi usa Webmin, edite el archivo de configuración (como root puede utilizar nautilus para editarlo.
/etc/webmin/squid/configPara squi3 debe quedar así:
sort_conf=0 squid_restart=service squid restart squidclient=squidclient cache_dir=/var/spool/squid sync_create=0 log_dir=/var/log/squid pid_file=/var/run/squid.pid cal_max=50000 squid_start=service squid start sync_modify=1 cal_fmt=w cal_all=1 cal_extra= squid_path=squid calamaris=calamaris squid_conf=/etc/squid/squid.conf sync_delete=0 cal_args=-aw cachemgr_path=/usr/lib/cgi-bin/cachemgr.cgi crypt_conf=0 restart_pos=0 squid_stop=service squid stopAhora edite el archivo de configuración de Cache Manager Interface (válido hasta squid 3.2x)
cp /etc/squid/cachemgr.conf /etc/squid/ nano /etc/squid/cachemgr.confReemplace la línea localhost por la ip y puerto de su servidor. Ejemplo:
192.168.1.10:8080Reinicie squid
service squid restartAhora cree una carpeta llamada squid en /etc y dentro copie los archivos cachemgr.conf y squid.conf que se encuentran en la carpeta squid; o sea que estos dos archivos quedarán repetidos en las carpetas squid y squid3, (ambas en /etc), y luego dele los permisos necesarios. Al finalizar, reinicie los servicios.
Edite su archivo /etc/apache2/sites-enabled/000-default.conf e incluya la configuración: Para Squid3x o superior
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/Y reinicie apache2AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted
service apache2 restartImportante
Si tenía instalado anteriormente squid (2x), elimínelo primero y también el contenido de la carpeta, para evitar cualquier redirección al antiguo squid y luego reinicie y cree nuevamente la carpeta squid y haga el procedimiento indicado arriba.
apt-get purge squid apt-get autoremove rm -rf squid rebootAhora ya puede acceder a Cache Manager Interface. Si accede por el Webmin
https://localhost:10000/squid/cachemgr.cgiO directamente por url en el navegador
http://localhost/cgi-bin/cachemgr.cgiA partir de la v3.2x hasta la 3.3 cambia el enlace. Debe ingresar con el usuario y contraseña establecido en el squid.conf (cache_mgr y cachemgr_passwd)
# Ej: http://ip_del_servidor:puerto/squid-internal-mgr/info http://192.168.1.10:3128/squid-internal-mgr/infoEn la entrada Cache Server debe estar la ip y puerto de su servidor. En el campo Manager name debe colocar root y en Password, la contraseña que eligió en el archivo de configuración de squid, en la directiva cachemgr_passwd
Por alguna razón que desconocemos, squid-cache cada vez que se actualiza a una nueva versión, desafortunadamente cambia los parámetros de cachemgr y su acceso (y de otro montón de cosas). Las configuraciones propuestas son hasta squid v3.2 y v3.3.1. No podemos garantizar el funcionamiento de CacheMgr en versiones posteriores. Para mayor información visite a los reyes magos: la wiki de cachemgr squid. especialmente el enlace a esta herramienta CGI para los últimos cambios.
También debe tener en cuenta que si utiliza la aplicacion sqstat, para estadísticas de squid en tiempo real, al establecer un password en cachemgr_passwd, debe agregarla también al archivo de configuración de sqstat y reiniciar apache2. Para mayor información sobre cómo configurar sqstat visite Network Monitor
Otras caches y configuraciones adicionales
1. Ajuste "cache_swap_low" y "cache_swap_high", al valor por default. Estas opciones se encargan de realizar la limpieza de la cache al llegar a los porcentajes indicados (90% y 95%)
1. Ajuste "cache_swap_low" y "cache_swap_high", al valor por default. Estas opciones se encargan de realizar la limpieza de la cache al llegar a los porcentajes indicados (90% y 95%)
cache_swap_low 90 cache_swap_high 95
2. Ajuste memory_pools al valor por default "off", para que Squid libere memoria RAM que no está usando el servidor y la coloque en la fuente de memoria y la cantidad de RAM para squid
# Liberando Memoria Ram memory_pools off # Cantidad de RAM para almacenamiento Squid memory_pools_limit 512 MB3. Ajuste half_closed_clients al valor por default "off". (Si es un proxy inverso, póngalo en "on"). Cerrar las peticiones de los clientes que se queden a medias cuando cierran la conexión TCP
half_closed_clients off
4. Evite que Squid se atasque y ponga los dns_nameservers de su red local. Ejemplo de dns de Google
dns_nameservers 8.8.8.8 8.8.4.4
5. Establecer nombre del proxy (Reemplace proxy.lan por el nombre de su proxy)
visible_hostname proxy.lan6. Proteger el squid
cache_effective_user proxy cache_effective_group proxy
7. Limitando máximo de conexiones por usuario. Establezca en una acl llamada limit las ips que quiera limitar y determine su ruta (Ej: /etc/squid/acls/limit)
acl conexiones maxconn 5 http_access deny conexiones acl limit src "/etc/squid/acls/limit" acl abuse maxconn 3 http_access deny limit abuse
8. Mensajes de error por defecto en español (puede personalizar las páginas de error). No esta declarado por defecto. Pueden cambiarlo en el siguiente enlace:
error_directory /usr/share/squid/errors/es
# reemplazar hierarchy_stoplist cgi-bin ? # por hierarchy_stoplist cgi-bin ? hotmail gmail yahoo outlook misitioweb.com
10. Activar y ver Logs
cache_log /var/log/squid/cache.log # logs access_log daemon:/var/log/squid/access.log squid access_log stdio:/var/log/squid/access.log squid cache_access_log stdio:/var/log/squid/access.log cache_store_log stdio:/var/log/squid/store.log cache_store_log daemon:/var/log/squid/store.log # Ver los logs cat /var/log/squid/cache.log
11. Windows Update
Para los que quieran cachear las actualizaciones de Windows Update, pueden visitar el tutorial en AlterServ
12. Verifique la carga de su squid
# Ejemplo squidclient -h 192.168.1.10 -p 3128 mgr:info | grep 'Average HTTP requests'13. En algunas versiones de Squid, si utiliza el modo proxy no-transparente con autenticación (proxy_auth), es posible que necesite priorizar (subir de posición) la acl CONNECT con respecto a las acls SSL_ports y Safe_ports, para evitar doble (o falsa) autenticación de los usuarios. Si no es su caso, dejela como viene por default, o sea, debajo de las acl SSL_ports y Safe_ports
acl CONNECT method CONNECT acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling httpFollow X-Forwarded-For headers
Otra configuración que ayuda a que se conozca la naturaleza de las peticiones y por tanto hace más transparente el tráfico es X-Forwarded-For-Headers, sin embargo con el asunto de la "violación a la privacidad" se puede convertir más en un problema que en una solución. No obstante para los que quieran activarla, abran su squid.conf y coloquen lo siguiente:
acl localhost src 127.0.0.1 # Linea no valida para squid3x acl my_proxy srcdomain .proxy.example.com follow_x_forwarded_for allow localhost follow_x_forwarded_for allow my_proxy acl_uses_indirect_client on delay_pool_uses_indirect_client on log_uses_indirect_client onReemplace my_proxy y proxy.example.com por los de su organización
Con esta acción se puede confiar en las solicitudes de la dirección IP 127.0.0.1 desde cualquier host en el dominio (proxy.example.com). La información de la cabecera X-Forwarded-For, en este caso, se utilizará en lugar de la dirección del cliente directamente para los efectos de las ACL, delay pools y logging.
Log personalizado TCP_DENIED/403 |
Independientemente de si es un proxy manual o transparente, sin embargo esto puede ser un arma de doble filo; pero veamos mejor el siguiente escenario:
Supongamos que tenemos un proxy en Linux con Squid (o cualquiera de sus derivados), y lo ponemos en modo transparente (192.168.1.10 es la ip del server), para no tener que enredarnos con configurar el proxy en cada navegador de cada usuario, ni rompernos la cabeza con WPAD / PAC.
En este tipo de configuración el Squid filtraría el tráfico por el puerto 80, que puede ser supervisado en tiempo real por la aplicación web SqStat (o cualquier otra de preferencia del administrador IT).
Si ponemos una ACL en el Squid, tipo blacklist, que se encargue del bloqueo de sitios. Para mayor información visite el proyecto blackweb
Puede darse el caso de que nuestro servidor con Squid maneje varias ACLs que realicen diferentes tipos de bloqueos. Por ejemplo:
blacklistweb: Contiene sitios restringidos http. (Visite blackweb)
rwords (restricted words): Contiene palabras a bloquear, ejemplo: "porno", "proxy", "sex", etc
ext: Bloquea extensiones como #\.scr$, #\.ink$, \.exe, \.msi, \.iso, etc
ext-mime: Similar a la anterior pero utilizando mime-type. Ejemplo: ^application/exe$, ^application/ogg$, ^application/exe$, ^application/x-msi$, ^vnd.ms-cab-compressed$, etc
Nota: se utilizan dos ACLs similares para las extensiones, por si un archivo con extensión no deseada, logra "saltarse" la restricción de una ACL, la segunda pueda bloquearlo, ya que son dos métodos diferentes de bloqueo de extensiones. Las extensiones también pueden ser filtradas en el Iptables. Vea Firewall
Supongamos entonces que un usuario está suscrito a las publicaciones de nuestro blog y le llega un mail de feedburner con esta publicación. El usuario abre el enlace feedproxy.google.com y de pronto le sale un mensaje en su navegador PÁGINA RESTRINGIDA (o el mensaje que esté configurado en el Squid para las situaciones de bloqueo). Habla con el administrador IT y busca la URL bloqueada en las ACLs, pero no aparece. Como maneja varias ACLs el próximo paso más lógico es revisar los logs del Squid.
Suponiendo que tengamos activo en su Squid el cache.log.
Por default, el Squid no lo trae activo, pero muestra la leyenda:
# Squid normally listens to port 3128 http_port 192.168.1.10:3128 interceptY el filtrado https (puerto 443) lo hacemos por el Iptables, con una ACL que contiene las IPs que solo queremos dejar pasar y el resto de las conexiones en DROP, tal y como se explica en Firewall.
En este tipo de configuración el Squid filtraría el tráfico por el puerto 80, que puede ser supervisado en tiempo real por la aplicación web SqStat (o cualquier otra de preferencia del administrador IT).
Si ponemos una ACL en el Squid, tipo blacklist, que se encargue del bloqueo de sitios. Para mayor información visite el proyecto blackweb
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS acl blacklistweb dstdomain -i "/home/servidor/acl/blacklistweb" http_access deny blacklistwebEntonces cada vez que accedamos a una URL por HTTP, incluida en esta ACL "blacklist", obviamente seríamos bloqueados. Y si por error bloqueamos un sitio legítimo, el camino más expedito es ir a la ACL blacklist y sacar la URL bloqueada accidentalmente. Hasta aquí la película es más o menos aburrida. Ahora lo importante...
Puede darse el caso de que nuestro servidor con Squid maneje varias ACLs que realicen diferentes tipos de bloqueos. Por ejemplo:
acl blacklistweb dstdomain -i "/home/servidor/acl/blacklistweb" acl rwords url_regex -i "/home/servidor/acl/rwords" acl extensiones url_regex "/home/servidor/acl/ext" acl archivos-bloqueados rep_mime_type -i "/home/servidor/acl/ext-mime" http_access deny blacklistweb http_access deny rwords http_reply_access deny ext http_access deny ext-mimeDonde:
blacklistweb: Contiene sitios restringidos http. (Visite blackweb)
rwords (restricted words): Contiene palabras a bloquear, ejemplo: "porno", "proxy", "sex", etc
ext: Bloquea extensiones como #\.scr$, #\.ink$, \.exe, \.msi, \.iso, etc
ext-mime: Similar a la anterior pero utilizando mime-type. Ejemplo: ^application/exe$, ^application/ogg$, ^application/exe$, ^application/x-msi$, ^vnd.ms-cab-compressed$, etc
Nota: se utilizan dos ACLs similares para las extensiones, por si un archivo con extensión no deseada, logra "saltarse" la restricción de una ACL, la segunda pueda bloquearlo, ya que son dos métodos diferentes de bloqueo de extensiones. Las extensiones también pueden ser filtradas en el Iptables. Vea Firewall
Supongamos entonces que un usuario está suscrito a las publicaciones de nuestro blog y le llega un mail de feedburner con esta publicación. El usuario abre el enlace feedproxy.google.com y de pronto le sale un mensaje en su navegador PÁGINA RESTRINGIDA (o el mensaje que esté configurado en el Squid para las situaciones de bloqueo). Habla con el administrador IT y busca la URL bloqueada en las ACLs, pero no aparece. Como maneja varias ACLs el próximo paso más lógico es revisar los logs del Squid.
Suponiendo que tengamos activo en su Squid el cache.log.
#Default: cache_log /var/log/squid/cache.logY esté bien configurado el access.log...
access_log /var/log/squid/access.log squidEntonces procedemos a leerlo...
tail -f /var/log/squid/access.logY en ese mar de líneas, encontramos el siguiente mensaje:
416669690.372 108 192.168.1.40 TCP_DENIED/403 417706 GET http://feedproxy.google.com/~r/fan_de_este_puto_sitio/~3/Q5y7jB2v9ZA/leyendo_estupideces_en_internet.html? - NONE/- text/htmlEl cual contiene la información de al IP local que generó la petición (192.168.1.40), sitio bloqueado (http://feedproxy.google.com) y la leyenda TCP_DENIED/403 (indíca bloqueo), entre otros parámetros, pero el mensaje no cita nada acerca cuál ACL es la responsable del bloqueo. Sin embargo existe una forma de manipular el Squid para conocer la actividad del mismo y por consecuencia la ACL responsable del bloqueo TCP_DENIED/403 y es activando el 'modo de depuración' o debug_options.
Por default, el Squid no lo trae activo, pero muestra la leyenda:
#Default: # debug_options ALL,1Entonces si descomentamos esta línea y cambiamos el 1 por el 9, sabremos todos los detalles de lo que hace el Squid, incluyendo el bloqueo y su responsable.
#Default: debug_options ALL,9Nota: Depuración de ACL ( debug_options)
Muchos no quieren complicarse con reglas, y cuando quieren saber algo simplemente hacen esto:
debug_options ALL,9
Y con un simple:
grep -i checklistmatches /var/log/squid/cache.log # o grep -i feedproxy /var/log/squid/cache.log
Sabríamos de inmediato cual es la ACL responsable del bloqueo al sitio feedproxy.google.com. Es cierto, pero este nivel de depuración tiene un precio muy alto, ya que cuando el debug_options se encuentra en nivel ALL,9 (Full debugging) y lanzamos el comando grep, el servidor puede colapsar, porque Squid registra cada evento de manera pormenorizada el archivo cache.log y se llena al punto de volverse inmanejable (puede llegar a ocupar más de 20 GB en una red local con un tráfico de apenas 30 equipos). Es por esta razón que explicaremos otras opciones de depuración mpas manejables.
Modificando debug_options (opciones de depuración)
Ahora modificaremos debug_options para que registre lo que necesitamos, pero NO TODO, para evitar la congestión de cache.log, descomentando la línea que viene por default y con esta acción sería suficiente:
También podemos echar mano de otras opciones, tales como:
Modificando debug_options (opciones de depuración)
Ahora modificaremos debug_options para que registre lo que necesitamos, pero NO TODO, para evitar la congestión de cache.log, descomentando la línea que viene por default y con esta acción sería suficiente:
#Default: debug_options ALL,1Sin embargo se recomienda que también habilite la sección 33 del nivel 2 y 28 del nivel 9
#Default: debug_options ALL,1 33,2 28,9Para que cache.log registre, en el caso de 33,2, el match con todas las reglas de Squid y 28,9 el procesamiento de las ACLs. Estas opciones son muy importantes sobre todo si tenemos más de un http_access y http_access deny. Con ellas podremos saber el último intento de acceso y la información sobre las ACLs que hacen match con el TCP_DENIED/403.
También podemos echar mano de otras opciones, tales como:
#Default: debug_options ALL,2 28,4 82,4
o 28 (Control de acceso), 29 (Autenticador, Negociar autenticador, NTLM Autenticador)
#Default: debug_options 28,9 29,5En fin, debug_options tiene infinidades de alternativas de configuración. Para conocerlas visite DebugSections (o AQUI); sin embargo tenga en cuenta que a mayor cantidad de secciones activas en el debug_options, el cache.log se llenará más rápido y al ejecutar un grep corre el riesgo de hacer colapsar su servidor, si éste no es lo suficientemente robusto.
Reinicio y verificación
Finalmente guardamos los cambios y reiniciamos el Squid (o lo reconfiguramos para que tome los cambios sin reiniciar).
Lo anterior se logra modificando el squid.conf y agregándole lo siguiente, (creando primero deny.log con sus respectivos permisos):
Importante
Los parámetros de debug_options se procesan de forma secuencial y el último valor reescribe el primero, por tanto se recomienda especial cuidado a la hora de escribir los valores. Ejemplo:
También se recomienda encarecidamente no dejar activas permanentemente las secciones (parámetros) de depuración ( debug_options) descritos anteriormente. Una vez que haya diagnosticado el problema, se sugiere desactivarlos. Puede dejar el modo depuración en ALL,1 (en dependencia de sus necesidades) para que Squid solamente registre eventos esenciales.
Problemas conocidos
a. Muchos son los escenarios en los que puede presentarse el error squid: ERROR: No running copy y ocurre cuando reiniciamos después de los cambios. A veces en el terminal muestra el squid reiniciando normalmente con el mensaje "ok", sin embargo no inicia. El problema es de permisos. Acceda a los logs del sistema ( /var/log/syslog) y haga una búsqueda de la palabra " writeable", " Permission denied", " squid" o expresiones similares y encontrará el responsable:
Finalmente guardamos los cambios y reiniciamos el Squid (o lo reconfiguramos para que tome los cambios sin reiniciar).
service squid restart o squid -k reconfigureY verificamos que nuestro Squid no tenga errores.
squid -k parseAhora podemos acceder a la URL bloqueada y el archivo cache.log registrará la ACL culpable. Para hacerlo más rápido, usamos el comando grep
grep -i feedproxy /var/log/squid/cache.logY el resultado es:
2014/11/22 10:39:05.872| The request GET http://feedproxy.google.com/favicon.ico is DENIED, because it matched 'rwordsEntonces la ACL responsable es " rwords", ya que, al tener incluida la parabra " proxy" (para realizar bloqueo de cualquier petición que incluya esta palabra), restringió también el portal feed proxy.google.com. Es por esta razón que utilizar un bloqueo en el Squid basado en expresiones no es muy recomendable.
Registro de eventos personalizado (opcional)
Una buena alternativa es crear un archivo de log que registre solamente los bloqueos tipo TCP_DENIED/403, para poder supervisar mejor lo que está rechazando el Squid (también se puede hacer con otros tipos de mensajes de access.log. Para mayor información sobre los diferentes mensajes de access.log visite Analizar los logs de access.log de squid y para los mensajes de error TCP_Denied cuando está activo NTML, visite BlueCoat) Lo anterior se logra modificando el squid.conf y agregándole lo siguiente, (creando primero deny.log con sus respectivos permisos):
acl DENY_ACCESS http_status 403 access_log /var/log/squid/deny.log squid DENY_ACCESSAhora en deny.log (pueden llamarlo como gusten) se guardarán solamente los registros de bloqueos (403) del Squid. Para mayor comodidad puede visualizarlos en el webmin, tal y como se muestra en la imagen al principio de esta publicación.
Importante
Los parámetros de debug_options se procesan de forma secuencial y el último valor reescribe el primero, por tanto se recomienda especial cuidado a la hora de escribir los valores. Ejemplo:
debug_options 9,5 20,9 4,2 ALL,1En este caso, el valor final sobreescribirá los anteriores, porque ALL,1 selecciona el nivel de 'debugging' a 1 para todas las secciones. Para mayor información sobre este punto lea el E-Book Squid: The Definitive Guide de Duane Wessels.
También se recomienda encarecidamente no dejar activas permanentemente las secciones (parámetros) de depuración ( debug_options) descritos anteriormente. Una vez que haya diagnosticado el problema, se sugiere desactivarlos. Puede dejar el modo depuración en ALL,1 (en dependencia de sus necesidades) para que Squid solamente registre eventos esenciales.
Problemas conocidos
a. Muchos son los escenarios en los que puede presentarse el error squid: ERROR: No running copy y ocurre cuando reiniciamos después de los cambios. A veces en el terminal muestra el squid reiniciando normalmente con el mensaje "ok", sin embargo no inicia. El problema es de permisos. Acceda a los logs del sistema ( /var/log/syslog) y haga una búsqueda de la palabra " writeable", " Permission denied", " squid" o expresiones similares y encontrará el responsable:
Cannot open '/var/log/squid/deny.log' for writing.#012#011The parent directory must be writeable by the#012#011user 'proxy', which is the cache_effective_user#012#011set in squid.confLa solución es asignarle los permisos correspondientes chmod (para este ejemplo el archivo deny.log pero puede ser ocasionado por cualquier otro archivo) y reinicie squid y apache:
chmod 666 /var/log/squid/deny.log && squid -k reconfigure | invoke-rc.d apache2 reload
b. Puede parametrizar el Logformat (que se encarga de darle un formato específico a los log del squid), sin embargo tenga presente que si lo modifica puede presentarse conflicto con Sarg. En este caso puede optar por la alternativa de ver el access.log con el formato adecuado por terminal:
c. Si después de parametrizar su squid.conf y reiniciar squid (o verificar con squid -k parse) sale un mensaje similar a:
Y si Squid al reiniciar genera un mensaje de tipo:
d. En las versiones más recientes de Squid, no se puede utilizar el puerto 3128 con la cláusula intercept (antes transparent) ya que genera el error: " No forward-proxy ports configure" (/var/log/squid/cache.log). El puerto por default para proxy transparente es 8080 (NAT), sin embargo puede utilizar cualquier otro puerto, para cualquier proxy, siempre que no sea reservado.
Para mayor información lea No Forward-proxy ports configure
e. Error 'pinger'
De acuerdo con fossies.org, 'pinger' es un programa de sonido (ping) de Squid que especifica la localización del ejecutable para proceso de sonido de ping. Esto es sólo útil si has configurado Squid (durante la compilación) con la opción '--enable-icmp'. Según Pfsense, interviene en el proceso de caché padre.
Sea cual sea su uso, genera error en la versión squid v3.3x y está reportado como Bug. Para desactivarlo o eliminar el error, (o ambas) realice lo siguiente:
Cuando este error (y otros. Vea Proxy) se presenta asociado a una IPv6, es debido a que las versiones recientes de squid soportan ambas versiones del protocolo. La solución es agregar al squid el parámetro:
tail -f /var/log/squid/access.log | perl -pe 's/[\d\.]+/localtime($&)/e'Para más información visite el foro Alterserv
c. Si después de parametrizar su squid.conf y reiniciar squid (o verificar con squid -k parse) sale un mensaje similar a:
WARNING: Netmasks are deprecated. Please use CIDR masks instead WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges WARNING: For now we will assume you meant to write /32Significa que su versión de squid ya no soporta mascaras de subred. En su reemplazo deberá especificar el CIDR. Para el caso de 255.255.255.255 es 32. Para mayor información consulte la siguiente tabla CIDR.
Y si Squid al reiniciar genera un mensaje de tipo:
Page faults with physical i/oEntonces revise su squid.conf, en especial los parámetros relacionados con la memoria (cache_mem, etc), ya que está haciendo swapping.
d. En las versiones más recientes de Squid, no se puede utilizar el puerto 3128 con la cláusula intercept (antes transparent) ya que genera el error: " No forward-proxy ports configure" (/var/log/squid/cache.log). El puerto por default para proxy transparente es 8080 (NAT), sin embargo puede utilizar cualquier otro puerto, para cualquier proxy, siempre que no sea reservado.
Para mayor información lea No Forward-proxy ports configure
e. Error 'pinger'
De acuerdo con fossies.org, 'pinger' es un programa de sonido (ping) de Squid que especifica la localización del ejecutable para proceso de sonido de ping. Esto es sólo útil si has configurado Squid (durante la compilación) con la opción '--enable-icmp'. Según Pfsense, interviene en el proceso de caché padre.
Sea cual sea su uso, genera error en la versión squid v3.3x y está reportado como Bug. Para desactivarlo o eliminar el error, (o ambas) realice lo siguiente:
# Modifique Pinger chmod 4755 /usr/lib/squid/pinger /usr/lib/squid/pinger # Configurar Squid nano /etc/squid/squid.conf # Modifique la linea de pinger a off pinger_program /usr/lib/squid/pinger pinger_enable off # Reinicie squid service squid restartY a no ser que se requiera específicamente, se recomienda desactivar la directiva emulate_httpd_log. Por defecto viene inactiva
emulate_httpd_log offe. TCP_MISS_ABORTED/000
Cuando este error (y otros. Vea Proxy) se presenta asociado a una IPv6, es debido a que las versiones recientes de squid soportan ambas versiones del protocolo. La solución es agregar al squid el parámetro:
dns_v4_first on
Personalizando squid.conf
La configuración que propondremos deberá ir acompañada de otras acciones complementarias, en dependencia de lo que se pretenda hacer.
Antes de comenzar
1. No es recomendable utilizar ips internas terminadas en 1, 20, entre otras, ya que son ips (por default) reservadas para routers y otros hardware de comunicaciones. Para el siguiente ejemplo hemos utilizado para el proxy, la ip interna clase C eth1 192.168.1.10.
1. No es recomendable utilizar ips internas terminadas en 1, 20, entre otras, ya que son ips (por default) reservadas para routers y otros hardware de comunicaciones. Para el siguiente ejemplo hemos utilizado para el proxy, la ip interna clase C eth1 192.168.1.10.
2. Edite las interfaces de su servidor. Debe tener al menos dos; una para el enlace de internet (eth0) y la segunda para la red local (eth1).
nano /etc/network/interfaces # si recibe el internet por dhcp auto eth0 iface eth0 inet dhcp # psi recibe el internet por ip estática # Reemplace las ips por las de su ISP auto eth0 iface eth0 inet static address 19X.XX.XX.XX gateway 19X.XX.XX.XX netmask 255.255.255.XXX broadcast 19X.XX.XX.XX # salida a la redlocal auto eth1 iface eth1 inet static address 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255 network 192.168.1.0
Finalmente reinicie
/etc/init.d/network restart o service networking restart
3. Si no tiene servidor propio DNS, configure los DNS de su ISP
# reemplace los DNS de google por los de su ISP nano /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4
4. Si quiere asignar direcciones IP mediante DHCP y no dispone de un Router u otro equipo que las asigne, puede instalar el servidor DHCP ( Consulte Tutorial). Si ya tiene DHCP, salte este paso.
# Instale el servidor DHCP apt-get install isc-dhcp-server # Edite isc-dhcp-server nano /etc/default/isc-dhcp-server # /etc/default/dhcp3-server (para Ubuntu 10x) # Busque la linea INTERFACES y agregue la interface de la red local INTERFACES="eth1"
Ahora edite el archivo de configuración 'dhcp.conf'
# nano /etc/dhcp/dhcpd.conf
Establezca la autoridad de su servidor dhcp, descomentando 'authoritative'
# If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. authoritative;
Y agregue los parámetros de su red local. Modifique 'range', 'option domain-name' y 'option domain-name-servers' según sus directivas
# redlocal (localnet) subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; # reemplace los dns de google por los de su ISP option domain-name-servers 8.8.8.8, 8.8.4.4; # option domain-name "inf01.server.public"; option routers 192.168.1.10; option broadcast-address 192.168.1.255; default-lease-time 600; max-lease-time 7200; }
Y finalmente reinicie el servidor DHCP
service isc-dhcp-server restart
Instalación y configuración de Squid
Nota: Las acciones que a continuación se describen son válidas para versiones de Squid superiores a 3.1. Para 3.1 o anteriores se especificará dónde varía. No aplican para Squid2x.
Tenga en cuenta que Squid v3.3x es una verdadera pesadilla, literalmente hablando (presenta muchos bugs). Por lo anterior recomendamos trabajar con versiones estables (3.0 a la 3.2)
Tenga en cuenta que Squid v3.3x es una verdadera pesadilla, literalmente hablando (presenta muchos bugs). Por lo anterior recomendamos trabajar con versiones estables (3.0 a la 3.2)
Instalamos Squid y accedemos a su configuración
apt-get install squid-cgi squid squid-common squidclient
Detenga el servidor squid
service squid stop
Elimine directorios previos
rm -Rf /var/spool/squid/*
Reconstruya
squid -z
Edite Squid
nano /etc/squid/squid.conf
Reemplace todo el contenido de su 'squid.conf' con la configuración que se describe abajo. Reemplace 'servidor' con el nombre de su servidor y demás parámetros donde se indique.
## SQUID.CONF # rebuilt cache: sudo rm -rf /var/spool/squid/* && sudo squid -z # probe: sudo squid -k parse or sudo squid -k check # check port: netstat -pltn | grep 3128 # reload: sudo squid -k reconfigure | sudo invoke-rc.d apache2 force-reload # vverify config: squid – v # Log: sudo journalctl -u squid # ACCESS CONTROLS # ----------------------------------------------------------------------------- # server acl server src 192.168.0.10 http_access allow server http_access allow localhost icp_access allow localhost htcp_access allow localhost # one who can access services on "localhost" is a local user http_access deny to_localhost # wpad (Optional) #acl wpad url_regex -i "/etc/acl/wpad.txt" #http_access allow wpad #acl wpadport port 8000 #acl wpadip dst 192.168.0.10 #http_access allow wpadport wpadip # server # acl local-servers dstdomain my.domain.net # always_direct allow local-servers # localnet (internal network) acl localnet src 192.168.0.0/24 # Essential Safe_ports acl Safe_ports port 21 70 80 210 280 443 488 591 777 # ftp, gopher, http, wais, http-mgmt, https, gss-http, filemaker, multiling http acl Safe_ports port 1025-65535 # unregistered ports # Essential SSL_ports acl SSL_ports port 443 # https # Optional SSL_ports (chats) acl SSL_ports port 5228 19305 # GTalk, google meet #acl SSL_ports port 5222 5233 5269 8010 # XMPP #acl SSL_ports port 5190 5220 5298 # iChat #acl SSL_ports port 4244 5223 5228 5242 3478 45395 50318 59234 # whatsapp #acl SSL_ports port 3478-3481 1000-10000 50000-60000 16000-26000 # skype #acl SSL_ports port 5061 8057 40000–59999 55000–65535 # skype for business (SfB)/Lync #acl SSL_ports port 4433 8443 # Signal # Deny requests to certain unsafe ports http_access deny !Safe_ports acl CONNECT method CONNECT # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # Only allow cachemgr access from localhost http_access deny manager !localhost # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # ----------------------------------------------------------------------------- acl workdays time MTWHF 08:00-18:00 ### BLOCK EXTENSIONS AND MIME TYPE (ONLY FOR HTTP) ### (Optional) # https://www.iana.org/assignments/media-types/media-types.txt # https://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/docs/conf/mime.types?view=annotate # http://filext.com/alphalist.php # By mime_type #acl allowmime rep_mime_type -i "/etc/acl/allowmime.txt" #http_reply_access allow allowmime #acl blockmime rep_mime_type -i "/etc/acl/blockmime.txt" #http_reply_access deny workdays blockmime # By ext #acl allowext urlpath_regex -i "/etc/acl/allowext.txt" #http_access allow allowext #acl ramsonext urlpath_regex -i "/etc/acl/ramsonext.txt" #http_access deny ramsonext #acl blockext urlpath_regex -i "/etc/acl/blockext.txt" #http_access deny workdays blockext ### BLOCK WORDS ### (Optional) #acl allowwords url_regex -i "/etc/acl/allowwords.txt" #http_access allow allowwords #acl blockwords url_regex -i "/etc/acl/blockwords.txt" #http_access deny workdays blockwords ### BLACKWEB ### (Optional) #acl allowdomains dstdomain "/etc/acl/allowdomains.txt" #http_access allow workdays allowdomains #acl blockdomains dstdomain "/etc/acl/blockdomains.txt" #acl blackweb dstdomain "/etc/acl/blackweb.txt" #http_access deny workdays blockdomains blackweb ### BLACKIP ### (Optional) #acl allowip dst "/etc/acl/allowip.txt" #http_access allow allowip #acl aipextra dst "/etc/acl/aipextra.txt" #http_access allow aipextra #acl no_ip url_regex -i [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} #http_access deny workdays no_ip ### ALLOW LOCALNET ### http_access allow localnet icp_access allow localnet htcp_access allow localnet ### DENY ALL ### http_access deny all icp_access deny all htcp_access deny all # NETWORK OPTIONS # ----------------------------------------------------------------------------- # Squid Port (add ipnore-cc to disregard the browser cache) http_port 3128 # Comment this line if you are not going to use intercept (Optional) #http_port 8080 intercept # Destination IP address matches the Host header domain or IP host_verify_strict on # Host header verification client_dst_passthru on # OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM # ----------------------------------------------------------------------------- # CACHEPEER (change 3128 to 8080 if INTERCEPT) cache_peer 192.168.0.10 parent 3128 0 proxy-only no-digest no-delay no-netdb-exchange no-query no-tproxy dead_peer_timeout 2 seconds cache_peer_access 192.168.0.10 allow all # Si la url contiene 'cgi-bin' o '?', no se almacena en la cache acl QUERY urlpath_regex cgi-bin \? cache deny QUERY # MEMORY CACHE AND DISK OPTIONS # ----------------------------------------------------------------------------- # disk cache (It should not exceed 70% of the total free disk space) cache_dir aufs /var/spool/squid 20000 16 256 # Memory cache (one third of the total consumption of RAM) # For every 1 GB in cache_dir * 14 to 16 MB (in x64) + 20 MB (for index of objects) cache_mem 4096 MB # Maximum size of the size of objects in memory maximum_object_size_in_memory 16384 KB # Maximum size of objects to be stored in memory maximum_object_size 16384 KB # Objects are purged from memory when memory space is needed memory_replacement_policy heap GDSF # Objects are evicted (replaced) when disk space is needed cache_replacement_policy heap LFUDA # algorithm # store_dir_select_algorithm least-load store_dir_select_algorithm round-robin # Flush the cache (1% of 100GB) cache_swap_low 95 cache_swap_high 99 # LOGFILE OPTIONS # ----------------------------------------------------------------------------- # logs access_log daemon:/var/log/squid/access.log squid cache_store_log stdio:/var/log/squid/store.log cache_store_log daemon:/var/log/squid/store.log buffered_logs off pid_filename /var/run/squid.pid strip_query_terms off cache_log /var/log/squid/cache.log # debug (any problem: debug_options ALL,1 33,2 28,9) debug_options ALL,1 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # Pinger (sudo chmod 4755 /usr/lib/squid/pinger) # pinger_program /usr/lib/squid/pinger pinger_enable off # Log Rotation # sudo apt-get install logrotate # sudo squid -k rotate logfile_rotate 7 # OPTIONS FOR TUNING THE CACHE # ----------------------------------------------------------------------------- # Default refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims refresh_pattern \/InRelease$ 0 0% 0 refresh-ims refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims refresh_pattern . 0 20% 4320 # HTTP OPTIONS # ----------------------------------------------------------------------------- range_offset_limit -1 #range_offset_limit 0 minimum_expiry_time 60 seconds max_stale 1 week quick_abort_min -1 #quick_abort_min 0 KB quick_abort_max 0 KB quick_abort_pct 95 read_ahead_gap 16 KB negative_ttl 0 seconds positive_dns_ttl 6 hours negative_dns_ttl 10 seconds # Warning: set "off" hides localnet but generates violation via off # TIMEOUTS # ----------------------------------------------------------------------------- # Timeouts forward_timeout 4 minutes connect_timeout 1 minute peer_connect_timeout 30 seconds read_timeout 15 minutes write_timeout 15 minutes request_timeout 3 minutes persistent_request_timeout 60 seconds client_lifetime 1 day pconn_timeout 60 seconds shutdown_lifetime 15 seconds pipeline_prefetch 0 client_idle_pconn_timeout 2 minutes # close requests that are left in the middle when you close the TCP connection half_closed_clients off # ADMINISTRATIVE PARAMETERS # ----------------------------------------------------------------------------- # TAG: cache_mgr # Cambielo por su email # Default (webmaster) #cache_mgr tucorreo@dominio.com # Squid protection (change according to your specifications) # http://www.linuceum.com/Server/srvSquidServer.php cache_effective_user proxy cache_effective_group proxy # Cache access # Important: If you use sqstat you must put the same pass in config.inc.php cache_mgr server cachemgr_passwd server all # Proxy Name (replace it with the name of your proxy) visible_hostname server # Validate (off) or not validate (on) Squid cache objects # Important: If enable Squid will never try to validate cached objects offline_mode off # PERSISTENT CONNECTION HANDLING # ----------------------------------------------------------------------------- # Persistent connections server_persistent_connections off client_persistent_connections off detect_broken_pconn on # DELAY POOL PARAMETERS # ----------------------------------------------------------------------------- # See: http://www.alcancelibre.org/staticpages/index.php/Squid-delay-pools # BANDWIDTH EQUIVALENCE TABLE #2048 B ==> 16 kb ==> 2KB #4096 B ==> 32 kb ==> 4KB #8192 B ==> 64 kb ==> 8KB #16384 B ==> 128kb ==> 16KB #32768 B ==> 256Kb ==> 32KB #65536 B ==> 512Kb ==> 64KB #131072 B ==> 1 Mb ==> 128KB #196608 B ==> 1.5 Mb ==> 192KB #262144 B ==> 2 Mb ==> 256KB #327680 B ==> 2.5 Mb #393216 B ==> 3 Mb #458752 B ==> 3.5 Mb #524288 B ==> 4 Mb #589824 B ==> 4.5 Mb #655360 B ==> 5 Mb #720896 B ==> 5.5 Mb #786432 B ==> 6 Mb #851968 B ==> 6.5 Mb #917504 B ==> 7 Mb #983040 B ==> 7.5 Mb #1048576 B ==> 8 Mb #1114112 B ==> 8.5 Mb #1179648 B ==> 9 Mb #1245184 B ==> 9.5 Mb #1310720 B ==> 10 Mb # change 'delay_parameters' line as your bandwidth # if the PC consumes 2MB, its bandwidth drops to 512Kb # e.g: delay_parameters 1 -1/-1 131072/1048576 delay_initial_bucket_level 50 delay_pools 1 delay_class 1 1 delay_access 1 allow localnet delay_parameters 1 -1/-1 -1/-1 delay_access 1 deny all # ICP OPTIONS # ----------------------------------------------------------------------------- # Disable ICP (Inter-Cache Protocol) (default icp_port 3130) #icp_port 0 # ICP queries are logged to access.log log_icp_queries off # Disable icmp (no recomendado) # query_icmp off # OPTIONS INFLUENCING REQUEST FORWARDING # ----------------------------------------------------------------------------- # DIRECT always_direct allow server always_direct allow localnet never_direct allow CONNECT never_direct allow all # ERROR PAGE OPTIONS # ----------------------------------------------------------------------------- # Error pages (for Spanish change "en" to "es") error_directory /usr/share/squid/errors/en error_log_languages off # Check hostnames check_hostnames off # hosts_file /etc/hosts # DNS OPTIONS # ----------------------------------------------------------------------------- # DNS Relay Interval dns_retransmit_interval 5 seconds # DNS query timeout > 2 min is assumed available dns_timeout 30 seconds # DNS-PUBLIC (Optional) dns_nameservers 8.8.8.8 8.8.4.4 # DNS Ipv4 dns_v4_first on # DNS cache requests ipcache_size 2048 ipcache_low 90 ipcache_high 95 fqdncache_size 4096 # outgoing_proxy (Only for non-transparent proxy with DNS-LOCAL) (Optional) # IF YOU USE PUBLIC DNS (Like a 8.8.8.8, etc), DO NOT UNCOMMENT THESE LINES # BECAUSE IT GENERATES "FATAL ERROR: Could not create a DNS socket" #tcp_outgoing_address 192.168.0.10 #udp_outgoing_address 192.168.0.10 # MISCELLANEOUS # ----------------------------------------------------------------------------- # Free Ram Memory memory_pools off # Amount of RAM for Squid storage memory_pools_limit 50 MB reload_into_ims on connect_retries 2 max_filedesc 65536 # hide internal ip # forwarded_for on / off forwarded_for deleted # Bandwidth reply_body_max_size 10 MB # qos qos_flows tos local-hit=0x30 qos_flows mark local-hit=0x30 qos_flows tos parent-hit=0x32 qos_flows mark parent-hit=0x32 # OBSOLETE #ie_refresh on #balance_on_multiple_ip off
Ahora guarde los cambios e inicie el Squid
service squid start
o
squid -k reconfigure
Y si con apache
squid -k reconfigure | invoke-rc.d apache2 reload
Y verifique estado, errores y puerto de escucha de su Squid
service squid status squid -k parse netstat -pltn | grep 3128
Con esta configuración elemental, su servidor proxy Squid tendría un funcionamiento normal. Puede agregarle más configuraciones o modificar lo propuesto para un mejor desempeño de su Squid. También puede configurar los reportes, así como DNS masq para acelerar las peticiones y reforzar la seguridad perimetral del proxy ( firewall, ArpON, IDS/IPS, etc)
Consultas
Post a Comment