Pular para o conteúdo principal

Especial Windows Server 2012 R2 (Parte 9 - Cache Web Squid)

Em mais um capitulo da "novela" sobre o Windows Server 2012 R2, mostrarei como implementar uma nova função que pode ser bastante interessante: um proxy web com cache com o software livre Squid. Todos os detalhes você confere neste artigo!

EDIT 16/03/2015: veja a atualização sobre o Squid 3.5 para Windows


Basicamente, um proxy web com cache permite armazenar localmente o conteúdo das páginas web navegadas. Sempre que um acesso a uma determinada página é feito através deste proxy, o seu gerenciador verifica se o mesmo endereço já foi acessado antes. Se não, ele armazena uma cópia do mesmo no cache. Caso a página já tenha sido acessada anteriormente, o gerenciador verifica se há diferenças entre a requisição feita e a imagem do site armazenada no cache local, baixando da Internet apenas o que tiver sido atualizado.

Esta técnica é muito interessante em redes locais de qualquer porte pois permite economizar a franquia da conexão à Internet contratada, sendo um complemento ao servidor WSUS. Um dos softwares gerenciadores de cache web mais utilizados é o Squid, que tem forte presença em servidores Linux e demais derivados do Unix.

Squid em um servidor Windows, pode isso Arnaldo?

O Squid é desenvolvido primariamente para sistemas operacionais Unix-like, mas existe uma versão compilada para Windows (com kernel NT) desenvolvido pela Acme Consulting que possui funcionamento idêntico, inclusive utilizando praticamente os mesmos arquivos de configuração da versão para Linux/Unix. A única desvantagem deste port para Windows é que ele não é da versão mais recente do Squid (que na data em que escrevo é a 3.4), muito embora isto não faça tanta diferença.

Primeiros passos

Após fazer o download do Squid para Windows (aqui utilizarei a versão 2.7 como exemplo) descompacte o arquivo na pasta C:\squid. Até é possível usar outro local mas recomendo fortemente que seja mantida a pasta padrão para evitar possíveis problemas que podem ser de difícil diagnóstico. Em seguida, navegue até a pasta C:\squid\etc e remova a extensão .default de todos os arquivos de configuração.



O arquivo squid.conf

Este é de longe o arquivo de configuração mais importante. Incluí aqui o arquivo que utilizo o meu servidor para demonstrar algumas de suas opções. Se desejarem podem utilizar o meu modelo simplesmente copiando o texto daqui e colando dentro do arquivo squid.conf (substituindo o conteúdo existente - faça uma cópia do arquivo antes) no seu sistema. Segue o modelo:

http_port 3128
visible_hostname netgate
cache_mem 256 MB
maximum_object_size 512 MB
cache_swap_low 90
cache_swap_high 95
cache_dir aufs c:/squid/var/cache 5120 20 512
access_log c:/squid/var/logs/access.log squid
cache_log c:/squid/var/logs/cache.log
cache_store_log c:/squid/var/logs/store.log
mime_table c:/squid/etc/mime.conf
pid_filename c:/squid/var/logs/squid.pid
unlinkd_program c:/squid/libexec/unlinkd.exe
icon_directory c:/squid/share/icons
error_directory c:/squid/share/errors/Portuguese
coredump_dir c:/squid/var/cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl redelocal src 192.168.0.0/24
acl skype_80 url_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:80
acl skype_443 url_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:443
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 allow manager localhost
http_access deny manager
http_access allow CONNECT !SSL_ports
http_access allow redelocal
http_access deny all
http_reply_access allow all
icp_access allow all


Como diria o velho Jack, vamos por partes:


  • As opções http_port e visible_hostname configuram a porta utilizada pelo Squid e o nome do servidor visível na rede. Recomendo manter a porta padrão (3128);
  • cache_mem: o Squid também pode fazer cache na memória RAM que é acessada a uma velocidade muito maior. Recomendo utilizar no máximo 1/5 da RAM total disponível; 
  • maximum_object_size: define o tamanho máximo dos arquivos armazenados no cache em disco;
  • cache_swap_lowcache_swap_high: no meu exemplo, o Squid começa a descartar os arquivos mais antigos do cache em disco quando for ocupado 95% do espaço alocado até este percentual cair para 90% ou menos;
  • cache_dir aufs: define o local de armazenamento do cache, o qual recomendo manter o padrão. O primeiro número seguinte indica o tamanho total do cache em disco em MB (no caso estou usando 5120 MB ou 5 GB de cache). Os números seguintes indicam o número máximo de pastas dentro do cache e o número máximo de subpastas dentro de cada uma delas. As demais linhas deste bloco indicam os caminhos para os demais componentes do Squid;
  • O bloco que inicia com acl libera o acesso às portas utilizadas pelos softwares mais comuns. Caso você queira restringir o acesso a determinado software (o que pode ser interessante em um ambiente empresarial) basta remover as linhas associadas. A linha mais importante deste bloco é a acl redelocal src que libera o acesso à faixa de IPs da rede local. Faça o ajuste conforme o endereçamento IP da sua rede, lembrando que o sufixo /24 é equivalente à mascara de sub-rede 255.255.255.0;
  • O bloco que inicia com http_access é onde efetivamente as regras criadas são aplicadas. Logicamente, o comando allow permite a conexão e o deny a bloqueia.

Reitero que este é apenas um exemplo simplificado, visto que o Squid permite um grande nível de personalização e possui funções para várias necessidades específicas.

Prosseguindo com a instalação

Compreendidos os preceitos básicos de funcionamento do squid.conf podemos prosseguir com a instalação. Navegue agora até a pasta C:\squid\var e crie as pastas cache e logs.



Agora devemos registrar o Squid como um serviço do Windows. Para tanto, abra um Prompt de comando com privilégios administrativos e navegue até a pasta C:\squid\sbin. Feito isto, execute o comando squid -i para criar o serviço.



Após a conclusão, execute o comando squid -z para criar os diretórios que armazenarão o cache.



Entre então com o comando squid -O servicecommandline para registrar os comandos associados com o Squid.



Para finalizar, acesse o gerenciador de serviços do Windows e localize o serviço do Squid que foi criado. Clique com o botão direito e selecione Properties (ou Propriedades).



Clique no botão Start para iniciar o serviço. No tipo de inicialização, recomendo o modo automático com atraso na inicialização (Delayed Start).



Se tudo correu bem o Squid deverá estar funcionando corretamente no seu servidor. Muito bom! Porém caso o serviço não inicie provavelmente há alguma inconsistência ou erro de sintaxe no arquivo squid.conf. Revise-o e tente iniciar novamente o serviço do Squid.

Configurando os clientes

Nos equipamentos clientes o navegador deverá ser configurado para acessar a Internet através do Squid. Abra as configurações do proxy e insira o endereço do servidor (que no meu caso é 192.168.0.1) e a porta 3128 nos campos correspondentes. A figura abaixo mostra como é feita a configuração para o Chrome e o Internet Explorer. No Firefox o caminho é Opções -> Avançado -> Rede -> Configurar conexão.



E chegamos ao final de mais um texto sobre o nosso querido Windows Server! Espero que tenham gostado e até a próxima! :-)

Próximo:

Especial Windows Server 2012 R2 (Parte 10 - Cache Web Squid 3.5 e como instalar o .NET Framework 3.X)

Anterior:

Especial Windows Server 2012 R2 (Parte 8 - Backup Diferencial)

Veja também:
Meu pequeno servidor doméstico (Parte 3 - Sistema Operacional e Serviços)

Comentários

  1. Opa, muit interessante parabéns.
    Mas me tira uma dúvida.
    No meu trabalho, a internet não passa por um servidor pra fazer a distribuição, vem direto do provedor e passa por um roteador cisco. Temos sim um servidor, mas é de login e diretivas do usuário. Eu poderia adicionar um micro com W2012 com o squid pra fazer isso?

    ResponderExcluir

Postar um comentário