A linha 05 faz referência à rede local (LAN) que fará uso do proxy, sendo que o conteúdo nas linhas 05 a 08 definem controles de acesso à Internet. Nessa configuração básica estamos apenas permitindo nossa rede local e negando qualquer outra origem (reparem que o allow vem antes do deny). As regras de controle de acesso devem ser bem detalhadas para atender as necessidades da sua empresa, mas deixaremos para discorrer mais sobre ACLs na próxima seção do artigo.
O parâmetro http_port (linha 10) define em que porta o Squid será executado (padrão=3128/TCP). O conteúdo do cache precisa ser armazenado em algum local e essa definição é configurada no parâmetro cache_dir (linha 14) do arquivo de configuração. É importante ter em mente que a qualidade do disco físico certamente irá influenciar no desempenho do servidor (velocidade de input/output), além disso é comum separar uma partição lógica de cache exclusiva para evitar que o armazenamento saia de controle e eventualmente comprometa a execução do SO instalado no servidor. O primeiro número do parâmetro cache_dir faz referência ao tamanho máximo (em MB) permitido para armazenamento de cache, sendo que o padrão é apenas 100MB. Os outros dois números dizem respeito à quantidade de subdiretórios que podem ser criados no diretório de cache, algo importante para a dinâmica do Squid que "quebra" o armazenamento em diversos grupos menores para melhorar o tempo de acesso aos dados em disco. No geral, os valores default são suficientes para a maioria dos casos...
Obs.: Por padrão o Squid faz o cache em memória principal (cache_mem), por isso o ideal é limitar esse parâmetro e informar um diretório em disco secundário (cache_dir) para fins de cache. Outra observação é que o administrador pode criar um novo arquivo apenas com as configurações trazidas acima para ter como resultado um arquivo de configuração mais limpo e menos extenso, no entanto recomenda-se que seja feito o backup do arquivo original.
# Listas de Controle de Acesso (ACLs)
A enorme flexibilidade do Squid em relação à escrita de ACLs para filtrar o conteúdo do tráfego entre as máquinas da rede local e os servidores na Internet é definitivamente um dos maiores pontos positivos dessa ferramenta. O Squid, além de proxy cache, permite transformar a máquina em firewall de nível de aplicação capaz de analisar o conteúdo do
payload dos pacotes, ou seja, um firewall muito superior aos tradicionais firewalls de nível de rede que apenas analisam o conteúdo dos cabeçalhos dos pacotes. Esse tópico é extenso o suficiente para dar origem a vários outros artigos, por isso estarei exemplificando algumas das funcionalidades mais comuns e bastante úteis no cotidiano do profissional da área, tomando por base a topologia abaixo.
01. ###--- em /etc/squid3/squid.conf
02. #---------------------------------------------------------------
03. # EXEMPLO DE REGRAS ACL PARA RESTRICAO DE ACESSO
04. #---------------------------------------------------------------
05. acl localnet src 192.168.221.0/24
06. acl whitelist url_regex "/etc/squid3/filter/whitelist.squid"
07. acl blacklist url_regex "/etc/squid3/filter/blacklist.squid"
08. acl vip src 192.168.221.11 192.168.221.12
09. acl hora_almoco time MTWHF 12:00-13:00
10. acl recepcao src 192.168.221.101 192.168.221.102
11.
12. http_access allow localhost
13. http_access allow vip
14. http_access allow whitelist
15. http_access deny blacklist
16. http_access allow recepcao hora_almoco
17. http_access deny recepcao
18. http_access allow localnet
19. http_access deny all
20. #---------------------------------------------------------------
O arquivo
blacklist.squid contém uma relação de conteúdo que deve ser bloqueado, seja esse conteúdo uma extensão de arquivo, uma palavra-chave ou mesmo uma URL. Assim, para bloquear o download de arquivos ".exe", para bloquear qualquer URL com a palavra "facebook" e para bloquear especificamente o site com endereço "www.site.com.br", basta criar uma lista simples em
/etc/squid3/filter/:
root@proxy:/# mkdir /etc/squid3/filter
root@proxy:/# touch /etc/squid3/filter/blacklist.squid
root@proxy:/# touch /etc/squid3/filter/whitelist.squid
(...)
root@proxy:/# cat /etc/squid3/filter/blacklist.squid
\.exe$
facebook
www.site.com.br
Obs.: O administrador pode escolher qualquer outro diretório de sua preferência. A
whitelist que precede a
blacklist deve ser uilizada para permitir exceções dentro das regras de restrição inseridas na
blacklist. Por exemplo, uma negação à palavra "hot" na blacklist irá implicar no bloqueio da palavra "hotmail", logo a palavra "hotmail" pode ser previamente permitida na
whitelist.
Na sintaxe do Squid, as linhas iniciadas em
acl criam correspondências (ou
matches) que na sequência são utilizadas pelas linhas iniciadas em
http_access para permitir (
allow) ou negar (
deny) o acesso à Internet. Cabe observar que a ordem da permissão ou negação é importante e faz toda a diferença. Por exemplo, reparem que na linha 13 estamos permitindo que o grupo
vip tenha acesso
irrestrito à Internet antes de aplicarmos a negação ao conteúdo da
blacklist (linha 15). Reparem, ainda, que na linha 16 estamos permitindo o acesso à Internet para as máquinas do grupo
recepcao somente no horário de almoço, sendo que na sequência (linha 17) estamos negando todo acesso à Internet para as máquinas do grupo
recepcao. Antes de ser possível permitir ou negar, tivemos que criar as correspondências ao horário do almoço (linha 09) e ao grupo
recepcao (linha 10).
# Autenticação do Usuário
Através de uma ACL especial do tipo
proxy_auth o Squid é capaz de solicitar credenciais de autenticação dos seus usuários (
authentication header). No entanto, o processo de autenticação em si é realizado por alguma ferramenta externa ao Squid, por isso essa ferramenta complementar deve estar instalada e ser informada no arquivo de configuração
squid.conf. Uma opção simples, dentre outras que fazem parte do atual pacote
squid3, é o módulo
NCSA (destaque em amarelo). Para utilizá-lo basta incluir as seguintes linhas em
/etc/squid3/squid.conf:
###--- em /etc/squid3/squid.conf
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwd.squid
auth_param basic realm "Squid Proxy Server"
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
Outra configuração importante, assumindo que o módulo de autenticação esteja devidamente operacional no servidor, consiste em inserir uma ACL do tipo
proxy_auth para que as credenciais do usuário sejam solicitadas antes de liberar a navegação.
###--- em /etc/squid3/squid.conf
acl senha proxy_auth REQUIRED
(...)
http_access deny !senha
(...)
http_access allow localnet
http_access deny all
Obs.: A opção REQUIRED indica que todos os usuários devem ser autenticados. A autenticação poderia ser aplicada apenas para alguns usuários através da ACL:
acl nome proxy_auth username1 username2
Antes de reiniciar o serviço Squid precisamos criar o arquivo com a relação de usuários que será inspecionado para validar a nevagação dos clientes. Uma boa opção para gerar o arquivo com a relação de usuários/senhas é a tradicional ferramenta
htpasswd (utilizada pelo Apache). Caso o usuário não tenha o Apache no sistema, é necessário instalar o pacote
apache2-utils (
apt-get install apache2-utils). Agora a ferramenta
htpasswd pode ser utilizada para criar os usuários que serão autenticados pelo Squid.
touch /etc/squid3/passwd.squid
htpasswd /etc/squid3/passwd.squid username
(...) informar senha do username
# Páginas de Erro Personalizadas
As tradicionais páginas de erro do Squid que substituem as páginas de erro dos navegadores podem ser personalizadas com mais informações sobre a empresa e suas políticas de uso da Internet. É possível criar várias páginas de erro personalizadas para as diversas ocorrências de erro. No exemplo abaixo a página
error-content.htm é exibida quando algum conteúdo cai no filtro da
blacklist (linha 07), enquanto que a página denominada
error-time.htm é exibida quando as máquinas do grupo recepção têm acesso negado à Internet no horário de almoço (linha 08). Por fim, na linha 09, criamos um página padrão para qualquer outra ocasião de erro no acesso à Internet.
01. ###--- em /etc/squid3/squid.conf
02.
03. #---------------------------------------------------------------
04. # EXEMPLO DE PAGINAS DE ERRO PERSONALIZADAS
05. #---------------------------------------------------------------
06. error_directory /etc/squid3/error
07. deny_info error-content.htm black_list
08. deny_info error-time.htm recepcao
09. deny_info error.htm all
10. #---------------------------------------------------------------
Obs.: No exemplo acima optei por armazenar as páginas de erro em
/etc/squid3/error/. As páginas podem ficar em outros diretórios, incluindo seus arquivos complementares (figuras e scripts).