Squid Proxy

O proposíto do squid é otimizar a velocidade de conteúdos web. É amplamente usado em ambientes corporativos, tendo como vantagem fazer cache de conteúdo, filtrar sites indesejados, controlar acessos e diminuir a utilização da banda de internet. Muitas pessoas usam um web proxy até mesmo sem saber, e no mundo GNU/Linux o Squid é o web proxy mais comum. Ele foi baseado no Harvest Cache Daemon desenvolvido na década de 90. E é um HTTP/1.0 proxy completo. Uma aplicação proxy qualquer trabalha como um programa intermediário, é como ver TV com um vidro na frente. Só que no caso do Squid ele é mais do que um programa que simplesmente repassa informação.

As principais aplicações do Squid são web caching, acelerador de conteúdo e distribuidor de conteúdo. Esses últimos trabalham de forma muito similar. O Web Caching, o mais comum ou pelo menos o mais conhecido por administradores de redes. Ele permite que com um recurso de Hardware barato seja possível poupar banda de internet e ao mesmo tempo acelerar a navegação interna de uma rede. O método de cache consiste em armazenar localmente todo o conteúdo requisitado de forma que numa segunda requisição ele não precise mais buscar em outro servidor (internet). Este método também permite ajustar a quantidade de memória RAM que será disponibilizada para arquivos populares aumentando ainda mais a velocidade. Junto a esse esquema de aceleração comumente ele trabalha junto autenticação de usuários e o uso de regras de acesso (ACL) que permitem bloquear conteúdos indesejados.

Para a limpeza de nosso cache existem alguns algoritmos, os mais simples e fáceis de se entender são os Least Recently Used (LRU) e o Least Frequently Used (LFU), onde o LRU remove os documentos existentes por muito tempo, enquanto o LFU remove documentos menos populares. A combinação desses dois métodos forma um sistema de reciclagem de cache bastante eficiente.
Sistema:


[root@squid centos]# head -n1 /etc/*release
CentOS Linux release 7.5.1804 (Core) 

Diretório de configuração:


/etc/squid

Arquivo de configuração:


squid.conf

Fazer backup do squid.conf e remove os comentários.


cp squid.conf squid.conf.ori
grep -v ^# squid.conf.ori > squid.conf

Configurando a porta e endereço para dar bind:


http_port [ipaddress]:[port]

É importante configurar para o endereço da interface da rede Local, caso contrário, seu proxy poderá estar acessível pela rede externa e será usado por qualquer um que queria usar um proxy pra fazer as tretas.

A opção abaixo define o nome que será visto nas páginas de erros do squid.


visible_hostname [Nome] 

Uma das configurações mais importantes com relação ao desempenho do proxy e à otimização do tráfego da rede é a configuração dos caches, onde o Squid guarda as páginas e arquivos já acessados de forma a fornecê-los rapidamente quando solicitados novamente.

Quais são os dois tipos de cache que o Squid trabalha?
a) Cache rápido, feito usando parte da memória RAM do servidor;
b) Cache um pouco mais lento porém maior, feito no HD.

O cache na memória RAM é ideal para que?
É ideal para armazenar arquivos pequenos, como páginas html e imagens, que serão entregues instantaneamente para os clientes.

E o cache usando o disco é ideal para que?
O cache no HD é usado para armazenar arquivos maiores, como downloads, arquivos do Windows Update e pacotes baixados via aptitude.
O cache na memória RAM é quase sempre pequeno. O tamanho da memória RAM é sempre bem menor do que o espaço em disco. Logo, o cache no HD pode ser mais generoso, afinal a idéia é que ele guarde todo tipo de arquivos, principalmente os downloads grandes, que demoram para serem baixados.

cache_mem -> Quantidade de memoria, por default, utiliza 8Mb de memoria ram.

cache_dir -> Armazenamento em disco, 128MB, 16 diretórios de primeiro nivel e 256 diretoŕios de segundo nível


cache_dir ufs /var/spool/squid 128 16 256

Na diretiva anterior, a primeira opção é diretório aonde o squid armazenará os arquivos do cache, tamanho do cache em MB que será armazenado no HD, número de diretórios e número de subdiretórios, respectivamente,

Se a linha “cache_dir” for omitida, será usada a configuração default para a opção, que é usar o diretório “/var/spool/squid” e fazer um cache em disco de 100 MB.

Definindo o cache que será armazenado em memória:


cache_mem 16MB

maximum_object_size_in_memory -> Ela é que determina o tamanho máximo dos arquivos que serão guardados no cache feito na memória RAM (o resto vai para o cache feito no HD).


maximum_object_size_in_memory 128 KB 

Se você quiser que o cache armazene arquivos de até 256 MB, por exemplo, as linhas ficariam:


maximum_object_size 256 MB
minimum_object_size 0 KB

Você pode definir ainda a porcentagem de uso do cache que fará o Squid começar a descartar os arquivos mais antigos.
Por padrão, sempre que o cache atingir 95% de uso, serão descartados arquivos antigos até que a percentagem volte para um número abaixo de 90%:


cache_swap_low 90
cache_swap_high 95

Se você faz download de arquivos grandes com freqüência e deseja que eles fiquem armazenados no cache, aumente o valor da opção “maximum_object_size”!

Dando reload no squid


squid -k reconfigure -> Recarrega o squid

Algumas outras opções do squid:


Usage: squid [-cdhvzCFNRVYX] [-n name] [-s | -l facility] [-f config-file] [-[au] port] [-k signal]
       -a port   Specify HTTP port number (default: 3128).
       -d level  Write debugging to stderr also.
       -f file   Use given config-file instead of
                 /etc/squid/squid.conf
       -h        Print help message.
       -k reconfigure|rotate|shutdown|restart|interrupt|kill|debug|check|parse
                 Parse configuration file, then send signal to 
                 running copy (except -k parse) and exit.
       -n name   Specify service name to use for service operations
                 default is: squid.
       -s | -l facility
                 Enable logging to syslog.
       -u port   Specify ICP port number (default: 3130), disable with 0.
       -v        Print version.
       -z        Create missing swap directories and then exit.
       -C        Do not catch fatal signals.
       -D        OBSOLETE. Scheduled for removal.
       -F        Don't serve any requests until store is rebuilt.
       -N        No daemon mode.
       -R        Do not set REUSEADDR on port.
       -S        Double-check swap during rebuild.
       -X        Force full debugging.
       -Y        Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.

É muito comum dar problema no swap.state, para recriar o arquivo de cache é necessário parar o squid e deletear os diretórios do cache.


squid -k shutdown
rm -rf /var/spool/squid/*

Gerar novamente os diretórios:


squid -z

Sintaxe da ACL:
acl nome tipo conteúdo


acl blacklit dstdomain "/etc/squid/acl/blacklist"
acl whitelist dstdomain "/etc/squid/acl/whitelist"
http_acccess deny blacklist ! whitelist

URL_REGEX


acl palavras url_regex sexo 
http_access deny palavras
acl extensoes url_regex .exe .rar .zip
http_access deny extensoes

Pode-se também utilizar uma lista com dominios, por exemplo:


acl whitelist url_regex "/etc/squid/acl/whitelist"
http_access allow whitelist

Amostra do arquivo /etc/squid/acl/whitelist


osimg.nbcuni.com
.cloudflare.com
.gstatic.com
meuip.com
thehackernews.com
.ycombinator.com
diesec.sytes.net
stato.blog.br
.whoismrrobot.com
.vivaolinux.com.br
assets.usanetwork.com

Um problema que pode deixar o squid lento é a resolução de nome.
Tratamento de mimetype quando não é possível tratar na url.

Alterando a linguagem de erros.


error_directory /usr/share/squid/errors/pt-br

Utilização do time:


acl almoco time SMTWHFA 12:00-13:00
http_access allow almoco blacklist

Autenticação:

  • ncsa_auth-> autenticação por arquivo com usuários e senhas(passwd)
  • ntlm_auth -> Negocia, é o unico que não pede autenticação

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/usuarios
auth_param basic  children 5
auth_param basic realm "PopUp-Autenticação necessária"
auth_param basic credentialsttl 1 hours 
auth_param basic casesensitive off
acl autenticacao proxy_auth REQUIRED
http_access allow autenticacao

Algumas opções de manter a sessão do usuário:

  • credentialsttl -> timetolive Specifies how long squid assumes an externally validated username:password pair is valid for – in other words how often the helper program is called for that user. Set this low to force revalidation with short lived passwords.
  • authenticate_ttl -> the time a user & their credentials stay in the logged in user cache since their last request. When the garbage interval passes, all user credentials that have passed their TTL are removed from memory.

Criando usuários:


httpasswd -cB /etc/squid/usuarios user

Exemplo final do squid.conf:


visible_hostname SquidFUckingProxy

acl whitelist url_regex "/etc/squid/acl/whitelist"
http_access allow whitelist

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 http
acl CONNECT method CONNECT

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports


cache_dir ufs /var/spool/squid 256 32 256
cache_mem 64 MB
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Please, go fuck yourself
#auth_param basic credentialsttl 2 hours
authenticate_ttl 2 hours
auth_param basic casesensitive off
acl autenticacao proxy_auth REQUIRED 
http_access allow autenticacao
http_access deny all
http_port 10.0.0.16:3128
error_directory /usr/share/squid/errors/pt-br
coredump_dir /var/spool/squid
cache_mgr badass@admin
cache_effective_user squid
cache_effective_group squid
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

Os logs podem ser encontrados no diretório /var/log/squid/access.log, segue uma amostragem:


1530442698.777      0 192.168.1.111 TCP_DENIED/407 4123 CONNECT cdn.ghostery.com:443 - HIER_NONE/- text/html
1530442698.777      0 192.168.1.111 TCP_DENIED/407 4139 CONNECT cmp-cdn.ghostery.com:443 - HIER_NONE/- text/html
1530442698.944      0 192.168.1.111 TCP_DENIED/407 4163 CONNECT tiles.services.mozilla.com:443 - HIER_NONE/- text/html
1530442699.232      0 192.168.1.111 TCP_DENIED/407 4155 CONNECT snippets.cdn.mozilla.net:443 - HIER_NONE/- text/html
1530442700.205      0 192.168.1.111 TCP_DENIED/407 4147 CONNECT firefoxusercontent.com:443 - HIER_NONE/- text/html
1530442702.516      0 192.168.1.111 TCP_DENIED/407 4159 CONNECT push.services.mozilla.com:443 - HIER_NONE/- text/html
1530442704.567      0 192.168.1.111 TCP_DENIED/407 4155 CONNECT api.accounts.firefox.com:443 - HIER_NONE/- text/html
1530442704.642      0 192.168.1.111 TCP_DENIED/407 4147 CONNECT firefoxusercontent.com:443 - HIER_NONE/- text/html
1530442705.190      0 192.168.1.111 TCP_DENIED/407 4163 CONNECT tiles.services.mozilla.com:443 - HIER_NONE/- text/html
1530442708.778      0 192.168.1.111 TCP_DENIED/407 4147 CONNECT firefoxusercontent.com:443 - HIER_NONE/- text/html
Fontes:

http://www.squid-cache.org/Doc/config/tcp_outgoing_address/
https://www.vivaolinux.com.br/artigo/Servidor-proxy-com-Squid-Instalacao-e-configuracao?pagina=1
https://www.vivaolinux.com.br/artigo/Squid-Configuracao-basica-funcional-e-limpa?pagina=1
http://www.hardware.com.br/livros/servidores-linux/configurando-servidor-proxy-com-squid.html
http://sourcebrasil.org/tutoriais/visualizar/instalacao-e-configuracao-do-servidor-proxy-squid.html
4Linux papers.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.