You are on page 1of 29

Resumo

Este artigo visa mostrar algumas das formas de uso do servidor proxy Squid, assim como as configurações para os casos apresentados. Não é proposta analisarmos todas as possíveis implementações com uso do Squid, fato este impossível de ser realizado, dado a grande flexibilidade que este software oferece, mas sim mostrar as maneiras mais comuns de sua utilização e configuração.

1 - Objetivos
O objetivo principal deste documento é proporcionar o entendimento do funcionamento do servidor proxy Squid e como são realizadas suas configurações. Não será abordado aqui o processo de instalação, tendo em vista tratar-se de tarefa muito simples, já que estamos falando de um software muito popular e presente em praticamente todas as distribuições Linux atuais, portanto podendo ser instalado através de pacotes da própria distribuição com muita facilidade. Mesmo que seja feita a escolha de instalação através do código fonte, provavelmente não será necessário muito mais do que os comandos ./configure, make all e make install, já velhos conhecidos de todos. Falaremos do uso das ACL's, recurso que faz com que o Squid seja tão flexível e eficiente, apresentado alguns exemplos mais usados e possíveis erros que podem ser cometidos na construção das regras de acesso. Será abordado também a utilização de softwares geradores de relatórios baseados na análise dos logs gerados pelo Squid, dado ao fato deste tema ser muito importante para a abordagem do trabalho, já que tais softwares são fundamentais para o processo de administração do servidor proxy. Esta não é uma abordagem definitiva, que visa esgotar o tema ou apresentar todas as possibilidades de uso e configurações, o que queremos é apresentar formas de implementar um servidor proxy eficiente de maneira fácil, rápida e com qualidade. O sistema operacional Linux será a base para o desenvolvimento deste trabalho, onde será utilizada a distribuição nacional Conectiva, versão 9, com kernel 2.4.21-28872cl, e a versão 2.5.125760cl do Squid.

2 - O que é o Squid?
Atualmente o acesso à internet tem se tornado praticamente obrigatório, principalmente no ambiente corporativo, tendo em vista o dinamismo que as novas tecnologias da comunicação podem trazer para este ambiente. Entretanto surgem vários problemas quanto a definição de como implementar esse acesso de computadores das redes corporativas à internet de forma segura e eficiente. No conjunto de medidas a serem tomadas para implementar esse acesso temos a utilização de servidores proxy. Um servidor proxy funciona como um intermediário no contato dos computadores da rede local com outras máquinas fora dela, como por exemplo na internet. Ele recebe as requisições de acesso externo dos hosts locais e as repassa a outros computadores fora da rede local, retornando as respostas aos computadores que as solicitaram. O Squid é um dos servidores proxy mais utilizados no mundo, dado a sua robustez, segurança e recursos que oferece. Apesar dos poucos protocolos que ele consegue trabalhar, no caso apenas o HTTP, HTTPS, FTP e gopher, é ainda uma alternativa muito interessante, já que estes são os principais protocolos da internet, e além do mais, muitos dos aplicativos que usam outros protocolos tem capacidade de usar o Squid através de um dos protocolos suportados por ele. O proxy Squid funciona ouvindo requisições numa determinada porta padrão, ou numa outra porta que pode ser configurada pelo administrador da rede.

O Squid é um software livre, o que implica dizer que ele está licenciado nos termos da GPL (General Public License), com isso temos uma garantia a mais (ao nosso ver, sem sombras de dúvidas é muito mais seguro que ter o software nas mão de uma única corporação que pode fechar as portas de uma hora para outra, como já vimos por várias vezes) de que nenhuma corporação vai descontinuar o projeto e deixar os seus usuários sem rumo, já que é a própria comunidade de usuários que contribui com o desenvolvimento e avanços deste software.

3 - Porque usar o Squid
Além da capacidade de intermediar o acesso à internet, como já mencionado, o Squid tem outros recursos que o torna uma excelente alternativa para aproveitamento mais racional da comunicação. Dentre esses recursos podemos destacar: Cache - através desse recurso o Squid armazena em cache o conteúdo acessado, de forma que se algum host fizer novamente uma requisição ao mesmo conteúdo, que já se encontra armazenado, ele recebe diretamente do cache, sem a necessidade de efetuar uma nova busca dos dados na internet. O uso desse recurso pode trazer uma rapidez maior ao acesso à internet, pois provavelmente o link do host com o proxy é bem mais rápido do que deste com a internet; Autenticação - podemos restringir o acesso ao servidor proxy com o uso da autenticação de usuários, de forma que seja melhorada a segurança, já que somente usuários autorizados poderão acessar a internet. Este recurso é bastante flexível e pode ser implementado de várias maneiras, como uso do protocolo LDAP, SMB, módulos PAM, etc; Registro de acessos - os acessos são registrados em arquivos de log, podendo esses serem utilizados para as mais diversas finalidades, que vão desde a análise de performance do servidor, até a geração de relatórios detalhados dos acessos à internet. Existem vários softwares analisadores de logs do Squid capazes de gerar relatórios tão bons, que por si já justificariam o uso do Squid, em razão do controle proporcionado; Controle centralizado - com o uso do proxy temos a facilidade de um único ponto centralizador do acesso à internet, o que torna a gerência da rede mais fácil e eficiente. Uma única máquina é capaz de prover acesso à várias outras; Segurança - como apenas o proxy está diretamente ligado à internet, temos apenas uma (ou mesmo poucas, caso tenhamos mais de um servidor proxy) máquina potencialmente vulnerável. Desta forma fica mais fácil concentrar esforços na melhoria da segurança de apenas um ponto na rede. A base instalada do Squid é hoje muito grande, sendo utilizado por empresas dos mais variados ramos e portes, vão desde instalações para uso doméstico até grandes corporações, Governos, etc. Isso mostra a credibilidade que este software livre possui.

4 - Proxy transparente
Cada software que precise acessar a internet e esteja atraz de um proxy, precisa ter configuradas as informações de endereçamento e porta onde o proxy da rede esteja ``ouvindo''. Entretanto, usuários mais ``espertos'' podem querer fugir do controle do proxy e utilizar uma outra maneira de acesso à internet, sem que este possa ser auditado e controlado. Caso as configurações relativas ao proxy sejam retiradas do browser ou outro utilitário pelo usuário, por exemplo, ele poderá se utilizar de um outro meio para se conectar à internet sem nenhum controle, colocando em risco a segurança da rede. Uma das maneiras mais eficientes de implementação de um proxy, levando-se em consideração a necessidade de controle, é com uso da técnica denominada proxy transparente. Isto é feito com a utilização de uma regra no firewall que efetua o redirecionamento das requisições destinadas à internet ao servidor proxy. Esse redirecionamento faz com que não mais precisem ser configurados os softwares com as informações do proxy, pois o firewall se encarrega de redirecionar as requisições à redes externas para o Squid, independente da vontade ou configuração do usuário. Além disso realizar a configuração dos parâmetros do servidor proxy

destinadas a porta 80. O bloqueio tem menos overhead que a redireção. # htpasswd -c arquivo_de_senhas usuario Para que o Squid forneça suporte a autenticação devemos habilitar estas configurações no arquivo squid.Autenticação no Squid Por padrão. já que por padrão ele não vem habilitado. dessa forma cada usuário que deseje ter acesso à internet deverá antes de tudo se autenticar no proxy. ou ainda através de um servidor LDAP. para que seu acesso seja liberado. No . No primeiro caso como o Squid não está instalado na mesma máquina onde está o firewall este redirecionamento é feito para a máquina com IP 192. É também mais barato em termos de ciclos de CPU e uso da memória bloquear a porta 80 ao invés de redirecionar o tráfego. A maneira mais comum de realizar autenticação é com o uso do formato NCSA que usa o módulo ncsa_auth. que é a porta padrão do serviço WWW. já que deveremos fazer uma escolha entre eles. Para este trabalho nossa implementação foi baseada neste método. etc. que é o software para criação de firewall em Linux. mas isto não é interessante quando temos uma rede com uma quantidade muito grande de máquinas a serem configuradas. 5 . entretanto o Squid fornece mecanismos para ser efetuado um controle por usuário. É nela que são realizadas as mudanças necessárias para que o esquema de autenticação comece a funcionar. e que o protocolo seja o TCP.16. que é onde nosso servidor proxy está ouvindo. devem ser redirecionadas para a porta 3128. o mesmo utilizado pelo Apache).168. Feito o redirecionamento o Squid assume o controle da conexão e aplica suas regras de forma que sejam liberados os acessos apenas de acordo com as regras nele definidas. então sua adoção deve ser avaliada antes da implementação. o controle de acesso é feito por máquina. portanto cabe uma análise de qual dos dois será mais interessante para cada caso. alguns navegadores podem não funcionar corretamente com o uso deste recurso. lembrando apenas que a opção -c deve ser usada apenas caso o arquivo de senhas ainda não exista.168.16.10. O cadastro dos usuários para acesso ao Squid é feito com o uso do utilitário htpasswd.conf através da TAG auth_param. Além do mais. no formato NCSA (geralmente associado ao utilitário htpasswd. a seguinte regra: Se o redirecionamento for para uma máquina diferente #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192. como por exemplo. Para implementarmos esse redirecionamento precisamos apenas inserir no Iptables. A autenticação poderá ser feita de várias maneiras. visto que alguns usuários poderão ter problemas caso estejam usando estes navegadores que não atendem aos padrões. do que redirecionar o tráfego como vimos.10:3128 Se o redirecionamento for para a mesma máquina #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 Estas regras dizem ao firewall que todas a requisições que entrarem pela interface eth0 (interface usada neste caso apenas como exemplo). Outro detalhe importante é com relação ao fato de que é mais barato em termos de ciclos de CPU e uso da memória ter os navegadores configurados explicitamente para usar um proxy. um PDC Windows NT/2000. O uso do proxy transparente deve sempre que possível ser evitado e usado apenas se não houver uma outra maneira mais prática e eficiente de se fazer o que se pretende com o uso deste recurso. no nosso caso esta é a interface onde está ligada nossa rede interna. pois ela instrui o utilitário a criá-lo. Uma observação importante é que este recurso de proxy transparente não funciona com a autenticação de usuário.numa meia dúzia de máquinas pode ser fácil e rapidamente feito. ou módulos PAM. conforme podemos ver no exemplo abaixo. e pode forçar as pessoas a utilizar um proxy.

será tomada a atitude de ir direto a origem buscar o conteúdo. no caso /usr/lib/squid/ncsa_auth é onde se encontra o arquivo com os usuários e senhas gerado conforme comentado acima. pois obviamente não é interessante por tratar-se de conteúdo dinâmico.conf O arquivo de configuração do Squid garante um grau elevado de capacidade de customização deste servidor. hierarchy_stoplist cgi-bin ? . é a memória apenas para ele utilizar na manipulação dos seus objetos e não ao total de memória consumida por ele. Em auth_param basic children 5 estamos definindo quantos processos filhos do módulo de autenticação poderão existir. portanto se a URL contém o padrão aqui especificado. não querendo tornar isso um guia definitivo para configuração do Squid. acl QUERY urlpath_regex cgi-bin ? no_cache deny QUERY . Abaixo mostraremos algumas destas opções.próprio arquivo tem comentários que mostram como isso deve ser feito para cada tipo escolhido. ou seja. entretanto em redes maiores pode haver a necessidade de um incremento deste. pois a maior parte delas se constitui de comentários referentes as funções de cada TAG e como deve-se utilizá-la. De tantos comentários ele parece mais um manual do que um arquivo de configuração. Como vamos utilizar o método básico.Nesta opção é definida a quantidade de memória que o Squid irá usar. devido ao número provavelmente maior de usuários que precisarão se autenticar simultaneamente. Desta forma vamos nos ater as configurações mais importantes e necessárias para que possamos ter um servidor proxy funcional. .conf não precisam ser alteradas. Ela é responsável por dizer ao Squid que ele deve buscar os dados diretamente na origem. E por último auth_param basic credentialsttl 2 hours especifica a validade de uma autenticação bem sucedida. entretanto não há com o que se preocupar. Esta configuração se refere a conteúdo dinâmico. que pode ser duas ou três vezes maior. nossa configuração ficou assim. mas sim um ponto de partida para implementação de um servidor proxy. sem passar pelos vizinhos na hierarquia. mas é bom lembrar que o manual do Squid adverte que a memória aqui mencionada é referente a objetos em trânsito. Podemos ter um servidor configurado e funcional com apenas pouco mais de 30 linhas no arquivo. pois já representam a configuração mais adequada. bastando para isso que sejam feitas ACL's para isso e definidas as regras de acesso. Em auth_param basic realm Servidor Proxy Squid ARL configura-se a mensagem que aparecerá na tela onde são fornecidas as informações do usuário para autenticação. objetos ``quentes'' e objetos com negativa de cache.Principais TAG's do arquivo squid. auth_param auth_param auth_param auth_param basic basic basic basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd children 5 realm Servidor Proxy Squid ARL credentialsttl 2 hours A linha auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd especifica qual módulo será usado. Esta opção é interessante para que possamos personalizar este mensagem da tela de login do nosso servidor. Com estas configurações já temos nosso proxy habilitado a trabalhar com autenticação de usuários. devemos considerar também que boa parte das opções configuradas como padrão no arquivo squid. 6 . Ele é composto por mais de 3000 linhas.Esta opção vem habilitada por padrão no squid. cache_mem 64 MB .conf e inclusive é recomendado o seu uso. esse número é o padrão do Squid.Esta ACL diz ao squid para não armazenar em cache o conteúdo dos CGI's.

0. http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE .255 to_localhost dst 127. neste caso o diretório de cache é /var/cache/squid. tendo 64 diretórios com 64 outros diretórios em cada um deles. com o tamanho de 300 MB.1/255.cache_dir ufs /var/cache/squid 300 64 64 .0. o Squid faz uso destes valores para verificar se os objetos armazenados são os mais recentes ou há a necessidade de atualizá-los.255.Definição de regras de acesso referentes as ACL's da parte da configuração padrão do Squid.255.TAG's referentes ao processo de autenticação.0. não sendo necessária nenhuma alteração nas mesmas. acl acl acl acl acl acl acl acl acl acl acl acl acl acl acl all src 0.Estas regras de acesso foram feitas com o uso das ACL's criadas anteriormente na área designada ao usuário.0 manager proto cache_object localhost src 127.Seção do arquivo com ACL's definidas pelo usuário.0.168. acl acl acl acl acl MINHA_REDE src 192. Não há necessidade de mudança nestes valores.0.0/24 USUARIOS proxy_auth REQUIRED PORNO url_regex -i ``/etc/squid/porn'' PORNO1 url_regex -i ``/etc/squid/porn1'' NAO_PORNO url_regex -i ``/etc/squid/noporn'' . além das anteriormente comentadas que já vêm configuradas por padrão. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern .0. http_access http_access http_access http_access allow manager localhost deny manager deny !Safe_ports deny CONNECT !SSL_ports . isto é. como podemos observar elas foram feitas pelo próprio usuário. snews Safe_ports port 70 # gopher Safe_ports port 210 # wais Safe_ports port 1025-65535 # unregistered ports Safe_ports port 280 # http-mgmt Safe_ports port 488 # gss-http Safe_ports port 591 # filemaker Safe_ports port 777 # multiling http CONNECT method CONNECT .Estas opções são o padrão do Squid e configuram como serão tratados os tempos de vida dos objetos no cache. . portanto apenas acrescente as suas próprias regras a estas.Estas ACL's fazem parte da configuração padrão do Squid e é o mínimo recomendável para seu uso.0/8 SSL_ports port 443 563 acl Safe_ports port 80 # http Safe_ports port 21 # ftp Safe_ports port 443 563 # https.16.0/0..Esta TAG determina onde e como será feito o cache.0.0. também não é necessária nenhuma alteração. auth_param auth_param auth_param auth_param basic basic basic basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd children 5 realm Servidor Proxy ARL credentialsttl 2 hours . 0 20% 4320 .

Esta regra de acesso é recomendada para uso como última regra da lista define o acesso ao proxy. caso contrário o Squid vai tentar descobrir o nome.Com o uso dessa opção podemos determinar em qual linguagem serão apresentadas as mensagens de erro. pois o Squid tem uma regra implícita que inverte a última regra da lista caso nehuma delas seja aplicada.Local onde o Squid gravará seus arquivos core em caso de falhas. É muito importante que esta seja a última regra da sua lista. é através delas que podemos criar regras para controlar o . como no caso das apresentadas abaixo para serem usadas quando estamos com o recurso de proxy transparente habilitado. visible_hostname www. portanto seu uso vai impedir acessos indesejados ao proxy. Estes arquivos são comuns em sistemas UNIX e representam o estado do software no momento em que o erro que provocou sua finalização ocorreu. inclusive.com. Seu uso é recomendado. constituem-se na grande flexibilidade e eficiência do Squid. Algumas outras opções também são interessantes.Mostra o nome do servidor configurado nas mensagens de erro.Permite o acesso a porta icp de acordo com a configuração feita na ACL all.ACL's As ACL's . httpd_accel_port 80 httpd_accel_host virtual httpd_accel_with_proxy on httpd_accel_uses_host_header on Existem várias outras opções interessantes para serem exploradas. pois estão em arquivos no formato html. icp_access allow all .http_access deny all .br . Está porta é usada para troca de informações entre servidores proxy. pois por padrão as mensagens são em inglês. podem ser facilmente personalizadas. de forma que o cliente não perceba que está ``conversando'' com um proxy.Opção para configuração do e-mail do administrador do proxy que vai aparecer nas mensagens de erro. coredump_dir /var/cache/squid .(Access Control Lists) ou listas de controle de acesso. Ela diz ao Squid que se nenhuma das regras anteriores for aplicada o acesso será então negado. Em /usr/share/squid/errors/ existem vários subdiretórios com as linguagens suportadas pelo Squid. cache_mgr email_administrador . Isto é importante para que os usuários tenham informações de como interagir com o responsável pelo servidor em caso de problemas. vamos deixar isso como proposta para uma outra oportunidade. entretanto como não é nosso objetivo aqui dissecar cada uma delas. Estas opções vão fazer com que o Squid se comporte como um servidor web. Deve ser registrado o FQDN do servidor e não apenas o hostname. como por exemplo um acesso bloqueado de forma errada. error_directory /usr/share/squid/errors/Portuguese . 7 . que no nosso caso representa qualquer origem. E estas mensagens.meu_seite. Isto pode trazer consequências indesejáveis principalmente se for usado negação ou liberação explícita como por exemplo http_access deny PORNO ou http_access allow NAO_PORNO.

A definição do domínio deve ser feita da seguinte forma: ``.meudominio. dstdom_regex .Saturday (Sábado). portanto cuidado com isso.usado da mesma forma que srcdomain. Isso independe da quantidade de regras que ainda faltam para atingir o fim da lista.'' (ponto) no início. As ACL's são case-sensitive. Uma dica para se fazer boas ACL's é testar. continue testando e monitorando seus logs para identificar algum problema que possa ocorrer. abaixo temos os mais comuns: src .16. srcdom_regex .Friday (Sexta-Feira) e A .usado para especificar dias da semana e horários.168. M Monday (Segunda-Feira). O uso das listas de controle de acesso é a parte mais importante da configuração de um servidor proxy Squid.168. Deve ser observado que a expressão é case-sensitive.usado da mesma forma que srcdom_regex.br''. W .tipo indicado para verificar o domínio da máquina cliente. na URL http://www.Tipo semelhante a url_regex.0/24. F . entretanto se mau configuradas podem ter resultado oposto.servidor. T . como 192.20/24. H . É o tipo mais comum de ACL dada a flexibilidade proporcionada pelo uso de expressões regulares.br/pasta/sexo. como 192. Seu uso é semelhante as duas anteriores.Tipos de ACL's As ACL's são definidas da seguinte forma: acl nome tipo string | ``arquivo'' Existem vários tipos de ACL que podemos utilizar. srcdomain . site_porno é diferente de Site_porno. portanto é muito importante que seja observada esta regra no momento em que estão sendo construídas as regras de acesso. dstdomain .html a procura será realizada apenas na parte .Wednesday (Quarta-Feira). como 192.16.Thursday (Quinta-Feira).Este tipo percorre a URL a procura da expressão regular especificada. acrescentando a flexibilidade do uso da expressão regular. time .168. urpath_regex . mas está relacionada ao endereço de destino. Os dias da semana são especificados assim: S . e os horários através de intervalos na forma hora:minuto_iniciohora:minuto_final.semelhante ao tipo anterior. as demais não serão mais verificadas. um endereço de um determinado host.avalia o domínio usando expressões regulares. Os domínios serão obtidos por resolução reversa de IP.10-192. Pode-se especificar um endereço de rede.Tuesday (Terça-Feira). isto é.com. não podendo ser esquecido o ``. já que além da falsa sensação de segurança não será aproveitada a grande capacidade e funcionalidade do Squid.acesso à internet das mais diferentes formas. mas procura a expressão regular na URL sem levar em conta o nome do servidor e o protocolo. como por exemplo. Caso seja usada o opção -i elas deixarão de ser casesensitive. 7. entretanto com relação ao destino.1 . o que pode causar atrasos para a resposta da requisição.16.168. testar e testar. dst .com. para que seja case-insensitive deve ser usada a opção -i. url_regex .16.10/24 ou uma faixa de endereços. isto quer dizer que a procura vai ser feita apenas na parte da URL após o nome do servidor. entretanto com relação ao destino. Praticamente todo o processo de controle do Squid é feito com o seu uso. e depois quando achar que está bom. Uma outra regra muito importante é que caso uma das regras coincida. pois se bem configuradas podem trazer um nível de segurança muito bom para a rede. A primeira coisa que devemos saber é que o Squid interpreta as ACL's de cima para baixo.Sunday (Domingo). Os dias da semana são definidos através de letras que os representam.tipo utilizado para indicar endereços IP de origem.

para que se possa monitorar o Squid através deste protocolo. como por exemplo FTP ou HTTP. req_mime_type . ou seja. Desta forma não vamos deixar que esta inversão de regra .Serve para especificar o protocolo. CONNECT ou POST. para que seja case-insensitive deve ser usada a opção -i. o Squid aplica o oposto da última regra da lista.Semelhante a ident.Especifica o tipo de método usado na requisição. dos quais o mais usado é o http_access. mas utilizando expressão regular.Realiza o controle de acesso baseado no nome do usuário. interessante para uso com outras ACL's de forma a limitar quantidades de conexões para determinados endereços específicos. proto . de um mesmo tipo ou de tipos diferentes.Tipo usado para implementar autenticação de usuários no proxy. usa-se o seu endereço MAC.Tipo usado para construir lista de acesso baseada no MAC Address da interface de rede do cliente. de forma que possa se chegar a uma situação ideal de controle. É interessante observar que o controle de acesso deve ser construído em duas etapas.Tipo usado para especificar o nome da comunidade SNMP. portanto vai depender muito da necessidade e habilidade de cada um.Especifica um limite de conexões vindas de um determinado cliente. Existem vários operadores. observando que se trata de uma das formas de resolver o problema e não a única. Dado ao fato deste ser o mais importante operador. snmp_community . Podem ser passados os nomes dos usuários ou usada a opção REQUIRED para que seja autenticado qualquer usuário válido. maxconn . Ela é também case-sensitive. port . proxy_auth . vamos focar o nosso trabalho no seu uso. como por exemplo GET.Especifica uma expressão regular para ser verificada no cabeçalho da requisição em busca de um tipo MIME que coincida com o especificado. 7. Vamos descrever algumas situações de como podemos construir listas de controle de acesso para atender a cada uma das situações propostas.Realiza o controle pela porta de destino do servidor.html. primeiramente são feitas as classes de ACL's e depois são construídas as regras de acesso com o uso destas ACL's. A autenticação é feita com uso de softwares externos. mas o fato é que para cada situação específica vai ser necessário o uso de uma ou mais ACL's. Com ele podemos construir regras de controle de acesso baseadas no protocolo HTTP e FTP.2 . em vez de endereço IP da placa. Não existe uma regra rígida para criação de listas de acesso. No momento da construção das regas devemos levar em consideração além das observações que já foram feitas o fato de que se nenhuma das regas forem aplicadas.Construindo regras de acesso Muitas são as possibilidades de construção de listas de acesso com o uso destes e outros tipos citados acima. browser .Usa uma expressão regular para tentar ``casar'' com os dados do cabeçalho HTTP e combinando então com o navegador utilizado pelo cliente./pasta/sexo. ident . arp . com o uso de operadores. neste tipo deve ser especificado o número da porta. Este tipo requer um servidor Ident rodando na máquina do cliente. ident_regex . method . portanto é muito importante que seja incluída como última linha das regra de acesso ``http_access deny all''.

15.br serão liberadas. 21. Controlando acesso pela origem.16.br 14.168.0/24 6. Controlando acesso pela origem e destino: 8.0/24 acl outra_rede dst 192. acl mundo_lafora dstdomain .possa provocar algum dissabor. Controlando o acesso usando autenticação de usuário: 16.'' (isso mesmo. neste caso requisições vindas de .lafora.0/24 10. e que se autentiquem no Squid. acl usuarios proxy_auth REQUIRED 17. o ponto) antes do nome do domínio.168. dado ao uso da opção REQUIRED. acl outra_rede dst 192. Para que a autenticação funcione devem ser configuradas as TAG's que informam ao Squid como esta será feita.lafora.17. nos demais casos o acesso será negado. Apresentamos abaixo alguns exemplos de como construir regras de acesso: 1. destino e autenticação de usuário: 19. Controlando acesso pela nome de domínio de origem e destino: 12. desta forma qualquer acesso para outro destino será negado. 20. onde usamos src e dst. acl meu_dominio srcdomain .16. acl localnet src 192.0/24 e que sejam destinadas à rede 192. 22. acl localnet src 192.com. entretanto aqui é verificado o domínio.168.meudominio. É muito importante não esquecer o ``. Controlando acesso pela origem: 2.168.0/24 serão aceitas.168.0/24 9.com. http_access allow outra_rede http_access deny all Com estas regras estamos limitando o acesso apenas à rede 192. pois negaremos qualquer acesso que não tenha uma regra específica. 7. acl localnet src 192.0/24 acl usuarios proxy_auth REQUIRED http_access allow localnet outra_rede usuarios .0/24 3.16.com. sob pena da regra não funcionar.com.168.168. já que ela é realizada por softwares externos. Controlando o acesso pelo destino: 5.168. 11. 4. http_access allow localnet outra_rede http_access deny all Aqui juntamos as duas anteriores e estamos especificando que requisições vindas da rede 192. 18. mas isto já foi visto na seção 5. nos demais casos o acesso será negado.16.0/24.168.meudominio.16. nos demais casos o acesso será negado.17. http_access allow localnet http_access deny all Com estas regras estamos especificando que requisições vindas da rede 192.17. http_access allow meu_dominio mundo_lafora http_access deny all Estas regras são semelhantes as acima.br 13.168.0/24 serão aceitas.17.br e com destino a . acl outra_rede dst 192.17. http_access allow usuarios http_access deny all Esta regra faz com que o acesso seja liberado apenas para usuários que sejam válidos.

portanto para que eles sejam evitados devemos nos lembrar sempre que: . No nosso caso estamos fazendo o uso de arquivos que contém as listas de palavras ou sites que consideramos inadequados. para que o resultado seja o que realmente esperamos. observe que a verificação dos usuários é feita por último. pois se.http_access deny all Com estas regras estamos especificando que requisições vindas da rede 192.0/24 acl usuarios proxy_auth REQUIRED acl expediente time MTWHF 8:00-18:00 http_access allow expediente localnet outra_rede usuarios http_access deny all Apenas acrescentamos o controle baseado no horário.0/24 acl outra_rede dst 192. Então aqui estamos fazendo o seguinte: primeiramente vamos liberar usuários que desejem acessar sites listados no arquivo /etc/squid/noporn e que pertençam a nossa rede. Controlando o acesso por palavras chaves: 30. devemos ter sempre em mente os problemas referentes a sua criação. 25. pois com ele podemos fazer o bloqueio de conteúdo considerado impróprio de maneira muito fácil. acl localnet src 192. 34. Veja também a ordem em que as ACL's são verificadas. mas que na verdade não representam conteúdo impróprio. 23. pois não vamos forçar o usuários a se autenticarem para só depois negar o acesso por um outro motivo. no caso /etc/squid/porn e /etc/squid/porn1 e outro arquivo com sites e palavras que podem ser barradas por alguma regra dos arquivos anteriores. no caso 192. Acrescentando controle de acesso pelo horário: 24.0/24 ou usuários que queiram acessar sites com conteúdos diferentes (! significa diferente) do listado nos arquivos /etc/squid/porn e /etc/squid/porn1 e que pertençam a nossa rede.br/sexoseguro. O uso inadequado ou desconhecimento destas regras de como utilizar as ACL's podem tornar suas listas totalmente ineficientes e lhe trazer a sensação de que tudo está funcionando corretamente.168. 7.0/24 serão aceitas.html. apenas no nosso caso fica melhor desta forma.3 . 32. nos demais casos o acesso será negado. 29. nem sempre a palavra sexo representa necessidade de bloqueio. Por exemplo.17.0/24 acl USUARIOS proxy_auth REQUIRED acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all Este é sem dúvida o tipo de controle mais usado.16. 28. pois podemos ter sites de conteúdo educativo que contenham essa palavra na sua URL. mas desde que os usuários sejam autenticados.16. por exemplo www.168. As palavras ou sites devem ser colocados no arquivo uma por linha. no caso /etc/squid/noporn.gov. Estes erros podem ser mais comuns quando o número de regras aumentam.16. acl MINHA_REDE src 192. 31. o horário não está dentro do permitido.Erros mais comuns Como já mencionamos.17.0/24 e que sejam destinadas à rede 192. 35. 36. o acesso será negado imediatamente sem nem mesmo tentar checar as outras ACL's.168.168. Isto não é obrigatório.16. apesar da grande flexibilidade na construção das listas de acesso. em ambos os casos deverá ser feita a autenticação. 27.168.168. 26. por exemplo. 33.ministeriodealgumacoisa.

Queremos controlar o acesso pela origem e destino. acl USUARIOS proxy_auth REQUIRED .168. isto é.    As regras são sempre interpretadas de cima para baixo.16.168. Queremos que o acesso seja restrito a determinada origem e destino simultaneamente. a conexão deverá ser originada na nossa rede e ter como destino uma rede específica. 3.  Existe uma regra implícita no Squid que é utilizada caso nenhuma das regras da lista seja aplicável ao acesso. 13. isto é.. maiúsculas são diferenciadas de minúsculas.168.0/24 já é suficiente para que o aceso seja liberado. ou o contrário.0/24 14. ou seja. 4.0/24 acl outra_rede dst 192.16.168.168. como já visto no caso anterior.17. acl outra_rede dst 192. pois se o usuário conseguir se autenticar já será suficiente para que o acesso seja liberado.0/24 8. as demais serão ignoradas. acl localnet src 192.168.16. As regras são interpretadas da seguinte forma: http_access allow ACL1 AND ACL2 AND ACL3 OR http_access allow ACL4 AND ACL5AND ACL1 OR . As expressões regulares são case-sensitive. 5.17. por isso devemos ter sempre isto em mente ao montarmos nossas regras. acl localnet src 192. Vejamos alguns casos de erros: 1.16.17. para que seja case-insensitive deve ser usada a opção -i. pois da forma que está se o acesso vier da rede 192. não sendo verificada a segunda regra que determina que o destino deve ser a rede 192. apenas uma das regras da lista vai ser aplicada por vez. entretanto se forem analisadas com mais calma podemos verificar que elas não vão funcionar de acordo com o que esperamos. http_access allow localnet outra_rede http_access deny all Aqui foi cometido o mesmo erro do caso anterior. Este é o tipo mais comum de erro. evitando surpresas com essa inversão que o Squid faz.0/24 http_access allow localnet http_access allow outra_rede http_access deny all Aparentemente estas regras estão corretas. para usuários autenticados. acl MINHA_REDE src 192. pois uma regra já foi satisfeita. 2.16. Se uma das regras da lista de acesso for aplicada. Desta forma o correto seria ter apenas um operador escrito da seguinte maneira http_access allow localnet outra_rede. 12. 7. portanto um resultado totalmente diferente do que realmente queríamos. acl usuarios proxy_auth REQUIRED 10. http_access allow usuarios 11. só que agora com o uso de autenticação de usuários. Queremos controlar o acesso pela origem. Os dois operadores deveriam na verdade ser apenas um. A segunda regra vai ser aplicada somente se a origem for diferente de 192.0/24. É extremamente recomendável que a última regra da lista seja http_access deny all. Esta regra faz com que seja invertida a última regra da lista.168. pois com isso todo acesso que chegar até ela será negado.0/24 9. então a origem e o destino não serão mais verificados. 6.0/24. de forma que se ela por exemplo for deny será transformada em allow e aplicada ao acesso. com verificação de conteúdo impróprio através de expressões regulares.168..

19. dentre muitas outras.de/tools/squid/calamaris/Welcome. Neste caso usamos a opção -a que diz ao Calamaris para serem gerados todos os relatórios. independente de qual rede esteja sendo originada a requisição. entretanto o objetivo final é fornecer uma maneira mais amigável de se analisar as preciosas e detalhadas informações que o Squid grava em seus logs. neste caso uma pasta na árvore do Apache de forma que possa ser analisado de qualquer estação da rede.Analisando os logs do Squid Não poderíamos falar do Squid sem que fossem analisadas algumas das muitas alternativas em software para análise dos logs e geração de relatórios com informações mais ``legíveis'' e amigáveis das atividades do servidor. dentre elas podemos destacar o Calamaris.html O comando acima já é suficiente para geração de relatórios excelentes da análise dos logs. após isso já podemos usá-lo.html. mas isso não será tratado aqui dado ao fato que isto deverá ser feito de acordo com as necessidades da cada um. 16. Neste trabalho. primeiramente temos que baixar a versão mais recente dele emhttp://cord. conforme veremos nas subseções seguintes. Compaq Tasksmart. 8. #/usr/local/calamaris/calamaris -a -F html /var/log/squid/access. no nosso caso /usr/local/calamaris. SARG e Squid-graph. O ideal é que seja desenvolvido um script para que possamos programar a execução do Calamaris pelo cron. 17. Oops! proxy server. 8 .2 . Abaixo temos um exemplo simples de comando necessário para geração dos relatórios do log do Squid. acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow USUARIOS NAO_PORNO http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all Nestas regras apenas foi cometido um pequeno erro.15. eles podem ser gerados no formato HTML ou mesmo em texto para ser enviado via e-mail.log >/srv/www/default/html/calamaris/index. Netscape/iplanet Web Proxy Server e é claro o Squid. Existem várias ferramentas para análise e geração de relatórios dos logs do Squid. Novell Internet Caching System.SARG .log é onde está localizado o arquivo de log do Squid e >/srv/www/default/html/calamaris/index. assim como o próprio software já traz alguns exemplos de como fazer isto. escolhemos estas três ferramentas citadas para mostrarmos sua utilização. -F html especifica o formato do relatório que queremos. Inktomi Traffic Server.en . Os relatórios gerados são bem simples na apresentação.1 Calamaris O Calamaris é um software escrito em Perl que efetua a geração de relatórios bem detalhados do uso da internet usando os arquivos de logs de vários servidores proxy. entretanto muito ricos em detalhes extraídos dos arquivos de logs. A utilização deste software é muito simples. no caso em HTML. 8.html a localização do relatório gerado. e sem isso caso o usuário consiga se autenticar e o site esteja na lista do arquivo /etc/squid/noporn já é suficiente para ter o acesso autorizado. está então faltando a ACL MINHA_REDE. descompactar o arquivo no diretório de sua preferência. Cada uma delas apresenta características e funcionalidades diferentes. como o NetCache. pois na linha http_access allow USUARIOS NAO_PORNO não foi feita a restrição com base na origem. /var/log/squid/access. 18.

tar.onda.4. mas nem por isso deixa de ser mais uma alternativa interessante e pode complementar o rol de ferramentas de administração.tar. isso pode ser implementado com o uso dos scripts que o acompanham (geralmente /usr/sbin/sarg. é um gerador de gráficos da utilização do servidor proxy.log No comando acima usamos a opção -c. quantidades de dados trafegados e outras mais. #/usr/local/squid-graph/bin/squid-graph -c -n -o=/srv/www/default/html/squid-graph/ -title="Gráfico de uso do proxy" < /var/log/squid/access.4. além de está disponível em pacotes da maioria das distribuições. no nosso caso sarg-1. isto é. 8. semanais e mensais. etc.O SARG é um dos mais usados e eficientes softwares para geração de relatórios dos logs do Squid. além do mais tem um arquivo de configuração relativamente simples e bem comentado. pois trata-se apenas de descompactar os arquivos no diretório escolhido. assim como o Calamaris. Assim como o Calamaris a execução do SARG fica mais interessante se programada através do cron. o SARG estará pronto para uso. vamos ter dois gráficos para os acessos e transferências TCP. sarg. Além do mais. Ele pode ser conseguido em http://squid-graph.tar. siga apenas os passos tradicionalmente usados para instalação usando este método.gz e executar os comando abaixo na ordem apresentada. # tar xzvf squid-graph-3.1.4/ . e mais dois gráficos para os acessos e transferências UDP.daily. cada um destes relatórios estão recheados de informações como datas e horários dos acessos. como listagem de sites mais visitados. é escrito em Perl. caso este recurso esteja sendo utilizado. já que não precisamos compilar nada. conforme mostra o comando abaixo. inclusive o português é claro. -o=/srv/www/default/html/squid-graph/ . Uma outra vantagem deste software é que ele está disponível em várias línguas. No nosso caso instalamos em /usr/local/squid-graph/. É importante lembrar que é necessário que seja instalado o módulo perl GD.monthly) e permitem automatizar a geração de relatórios diários./configure make make install Para geração dos relatórios é necessário apenas a execução do comando sarg.weekly e sarg.1. mas isso não quer dizer que não possamos extrair relatórios mais personalizados e de acordo com nossas necessidades.gz -C /usr/local/ # mv squid-graph-3. entretanto uma boa maneira de se executar este comando de maneira que seja gerados os gráficos de forma cumulativa é apresentada abaixo. # # # # # tar zxvf sarg-1.3 . respectivamente. listas de sites acessados por usuários e horários em que foram acessados. desta forma estamos gerando os gráficos cumulativos. que com certeza deve está nos CD's de sua distribuição favorita. O processo de instalação é muito simples. para ser configurado para uso.securlogic. A opção -n faz com que não sejam ``ecoadas'' na tela as informações do processamento do log do Squid. Ele foi escrito por um brasileiro e tem recursos muito interessantes. quer dizer. Mas caso você opte por instalar usando os fontes não haverão maiores problemas.gz cd sarg-1.com. Ele se atem a apresentar informações mais sintéticas dos acessos e transferências de dados. Após ter baixado a versão mais recente do sitehttp://web. como mostraremos a seguir.Squid-Graph O Squid-Graph. tempo de gasto na visita ao site. sites que o acesso foi negado. no caso a verão 9 do Conectiva. falhas na autenticação.gz. No nosso caso utilizamos o pacote rpm disponível na nossa distribuição. entretanto como o próprio nome menciona.br/orso/.tar.1 squid-graph # chmod +x /usr/local/squid-graph/bin/* A execução do comando para geração dos gráficos vai depender de como e quais deverão ser gerados. sendo esta a última versão disponível neste momento.1.com/files/stable/squid-graph3.

representa o local onde os arquivos serão gravados (html e imagens). A robustez e flexibilidade oferecidas pelo Squid é um diferencial muito bom em relação a soluções fechadas.br/squid/.squid-cache. Este é sem dúvidas um software livre com qualidade excepcional. recursos e finalidade do que queremos usar.linuxman. Ao mesmo tempo podemos notar a facilidade no seu uso. Campos. além disso existem outras opções interessantes que não foram tratadas aqui. 2003 Vesperman.ufla..mp3 '' é um bom começo. (2003). E. Squid configuration manual. Squid. R. Exemplo de arquivo Sarg. L.16. www.. Marcelo. J.com. Referências Bibliográficas Bastos.http://www.conf # sarg. ViSolve. Uchôa. (2003). e por fim temos o arquivo de log dos Squid. Temos várias maneiras de implementar soluções deste tipo. Sica et al. Existem outras opções interessantes. D.3 ''. Qualica Technologies (Pty) Ltd. Wessels. A. Brasport Livros e Multimídia Ltda. de forma que podemos ter uma infinidade de opções para seu uso. and Simeone.Conclusão A configuração e o uso de servidores proxy é um assunto muito interessante e ao mesmo tempo muito extenso.conf # Inicio do arquivo sarg.168. supondo que 192. por grep ``192. Linux in brazil . UFLA/FAEPE. podemos combinar o uso do Squid-Graph com outros comandos do Linux.html. 2003 Bastos. SQUID Frequently Asked Questions. Installing and configuring squid http://linux.br" | /usr/local/squid-graph/bin/squidgraph -c -n -o=/srv/www/default/html/squid-graph/ --title="Gráfico de uso do proxy" Para gerar um gráfico dos acessos de um determinado usuário. Squid .oreillynet..com (2002). Administração de Redes Linux. (2003). Acesso em setembro/2003. por exemplo grep ``. (2003). 2003 Marcelo.trix. Nosso objetivo aqui foi apresentar algumas das maneiras de utilização do proxy Squid de modo que fosse possível elaborar uma visão do processo de configuração e utilização deste servidor proxy. 2003 Pearson.3 é o IP do seu usuário. A . J. o que faz dele uma excelente alternativa para uso em qualquer ambiente. como gerar gráficos para uma URL específica ou um determinado usuário.org. (2003). como podemos ver com o uso do comando abaixo: # cat /var/log/squid/access. (2001). A. ViSolve. -title=``Gráfico de uso do proxy'' personaliza o título da página html. usando a extensão como parâmetro. Podemos ainda usar o mesmo recurso para gráficos de determinados tipos de arquivos. C.linux.log | grep "ginux.comp.16. onde são mostrados os gráficos. Vesperman. Acesso em setembro/2003. Pearson.conf .net.A User's Guide. 2003 Sica.com/pub/a/linux/2001/07/26/squid. Acesso em setembro/2003. F. 2003 Campos. (2003).168. 2001 Wessels. E. que vão apresentar um certo grau de complexidade de acordo com o porte. Como já deu pra perceber. Configurando um squid ``ninja'' http://www. O. Q. 9 . precisaríamos apenas substituir o comando grep mostrado acima.pro. 2002 ViSolve.com.

acme.nio acme.450.rios # topsites .# Principais diretivas est&atilde.&atilde.rios de uso do proxy Squid" # Definicoes da est&eacute.: ip 192.168. where A=Ascendent.&atilde.rio topuser topuser_sort_field BYTES reverse # classifica&ccedil. # host s1. w (Weekly=yy. per_user_limit none lastlog 0 remove_temp_files yes index yes # subscrever relat&oacute.o do relat&oacute.168.rios originais # Defini&ccedil.rio usado para envio do e-mail com o relat&oacute. conex&atilde.o gravados output_dir /srv/www/default/html/sarg # e-mail para envio dos relat&oacute. fontes) font_face Arial header_color darkblue header_bgcolor blanchedalmond header_font_size -1 background_color white text_color black text_bgcolor beige title_color green logo_image none logo_text_color black background_image none password none # diret&oacute.rios ser&atilde. # D=Descendent # topsites_sort_order CONNECT D # Arquivo de c&oacute.tica do relatorio (cores.rios output_email none resolve_ip no user_ip yes # classifica&ccedil.&atilde. existam overwrite_report yes # o que fazer com registros sem usu&aacute.o e bytes .450.0.rio exclude_codes /etc/sarg/exclude_codes max_elapsed 28800000 # Tipo de Relat&oacute.rio title "Relat&oacute.rio temporary_dir /tmp # Local onde os relat&oacute.log # t&iacute.o do arquivo de log do squid access_log /var/log/squid/access.10.rio records_without_userid ignore # use_comma yes => 23.o da linguagem language Portuguese # Localiza&ccedil.o do relat&oacute.110 use_comma no # utilit&aacute.rio user user_sort_field BYTES reverse # arquivo com usuario que serao excluidos do relatorio exclude_users none # arquivo com usuario que serao excluidos do relatorio # Ex.rios caso j&aacute.&atilde. # # This option can be used to disable user access # if user exceed a download limit.rio mail_utility mail # quantidade de sites mais visitados para listar no relat&oacute.ww) date_format e # TAG: per_user_limit file MB # Save userid on file if download exceed n MB. u # (USA=mm/dd/yy).rio topsites_num 100 # TAG: topsites_sort_order CONNECT|BYTES A|D # Sort for topsites report.digos HTTP para serem ignorados no relat&oacute.foo e dom&iacute.Mostra o site.110 use_comma no => 23.10.foo exclude_hosts none useragent_log none # formato da data: e (Europe=dd/mm/yy).rio tempor&aacute.10.tulo do relat&oacute.o comentadas e algumas # foram mantidos os coment&aacute. rede 192.

the full url is showed in report.Mostra os hor&aacute.o # site_user_time_date .0/0.0. only the site will be showed # # YES option generate very big sort files and reports.rios que um # usu&aacute.0 acl manager proto cache_object acl localhost src 127.&atilde.1 claudio usertab /etc/squid/usernames # TAG: long_url yes|no # If yes.10.conf # Inicio do arquivo squid.West European # Latin2 .Mostra que usu&aacute.Mostra falhas de autentica&ccedil.255 acl to_localhost dst 127.rio # date_time .rio acessou determinado # site # report_type topsites sites_users users_sites date_time denied auth_failures site_user_time_date # usado para mostrar o nome do usu&aacute.0.0.o o ip # formato: 192.Turkish # Latin6 # Windows-1251 # Koi8-r charset Latin1 # Fim do arquivo sarg.0/8 acl SSL_ports port 443 563 .255. Exemplo de arquivo Squid.conf hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin ? no_cache deny QUERY cache_mem 64 MB cache_dir ufs /var/cache/squid 300 64 64 auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Servidor Proxy da SEFIN auth_param basic credentialsttl 2 hours refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern .Mostra todos os sites negados # com URL completa # auth_failures .0.Mostra quantidade de bytes # usados por dia e hora # denied .Mostra sites acessados # pelo usu&aacute.rio e n&atilde.rios estavam # acessando um site # users_sites .0.0.North European # Arabic # Greek # Hebrew # Latin5 .0.# sites_users .conf B .South European # Latin4 .1/255. # long_url no # TAG: date_time_by bytes|elap # Date/Time reports will use bytes or elapsed time? # date_time_by bytes # TAG: charset name # ISO 8859 is a full series of 10 standardized # multilingual # single-byte coded (8bit) # graphic character sets for writing in # alphabetic languages # You can use the following charsets: # Latin1 . 0 20% 4320 acl all src 0.168.East European # Latin3 . # If no.255.0.

16.conf . snews 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 acl MINHA_REDE src 192.168.br error_directory /usr/share/squid/errors/Portuguese coredump_dir /var/cache/squid # Fim do arquivo squid.meu_seite.0/24 acl USUARIOS proxy_auth REQUIRED acl PORNO url_regex -i "/etc/squid/porn" acl PORNO1 url_regex -i "/etc/squid/porn1" acl NAO_PORNO url_regex -i "/etc/squid/noporn" http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow USUARIOS NAO_PORNO MINHA_REDE http_access allow USUARIOS !PORNO !PORNO1 MINHA_REDE http_access deny all http_reply_access allow all icp_access allow all visible_hostname www.com.acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https.

Só chegará a última quem não caiu em nenhuma das anteriores. (Deve ser algum espertinho mudando de ip.: A opção -i encontrada na linha que declara o bloqueio serve para NÃO fazer distinção entre maiúsculas e minúsculas.0.1. como em www. Entendendo como o squid lê as ACLs A cada caractere inserido no squid. bloqueado = Lista de palavras que o squid bloqueará se forem encontradas na URL. Por isso o acesso é direto e total. Agora que as regras foram declaradas vamos ativá-las dessa maneira: http_access http_access http_access http_access allow acesso_total deny bloqueado allow acesso_restrito deny all Como o squid as lê: A primeira regra que o squid lê (http_access allow acesso_total) diz que será LIBERADO acesso a quem estiver com o ip cadastrado no arquivo "/etc/squid/acesso_total".br.0. quem ele encontra aqui já é liberado e não passa mais pelas outras acls seguintes.0/0. . De posse detas três acls. Você deve estar se perguntando: Mas como pode negar acesso a todos os ips se tenho que liberar o meu? A resposta é simples e está no que eu enfatizei até agora.conf desta maneira: acl acesso_total src "/etc/squid/acesso_total" acl acesso_restrito src "/etc/squid/acesso_restrito" acl bloqueado url_regex -i "/etc/squid/bloqueado" OBS.com. nem está no acesso_restrito então ele não faz parte da rede e deve ser bloqueado. Por issso. Se ele lê a primeira (acesso_total) e ninguém se aplicar a ela. hehehe!!!). A quarta e última regra (http_access deny all) nega o acesso a qualquer ip de qualquer máscara (0. então passará para a segunda. www. divida sua rede em quem pode ter acesso tota e restrito e cadastre os clientes em seus respectivos arquivos.0/0. O segredo está na sequência como o squid lê as acls. Se nesta tb ninguém se aplicar ele passará para a terceira.0. acesso_restrito e bloqueado. vamos declará-las no squid.0).0. neste arquivo tiver a palavra sexo qualquer site que tenha esta palavra na sua URL não será acessado. Se. pois ela já vem declarada no início das acls (acl all src 0. A segunda regra que ele encontra (http_access deny bloqueado) diz que será NEGADO o acesso às URLs que coincidirem com as palavras que estão no arquivo "/etc/squid/bloqueado".0. Parece meio complicado mas funciona assim: Vou criar três acls. por exemplo.0.sexomais. ou seja quem não tiver o ip cadastrado no arquivo de acesso total. Mas atenção neste detalhe.0).br/sexo. o acesso pode ser liberado tranquilamente. O squid vem lendo o arquivo de cima para baixo e só chegará a segunda regra quem não cair na primeira. É óbvio concluir que se o cliente não está cadastrado no acesso_total. etc. acesso_total.conf lembre-se que o squid lê as acls de cima para baixo e quando encontra alguma que se aplique ele pára. acesso_rstrito = IPs dos clientes que passarão pelo bloqueio de sites estabelecido na acl seguinte.0. Não passarão por nenhuma restrição do squid. Como na terceira regra só chega quem não caiu na regra anterior. Então.com. A terceira regra que o squid lê (http_access allow acesso_restrito) diz que será LIBERADO acesso a quem tiver com o ip cadastrado no arquivo "/etc/squid/acesso_restrito".uol. Estes arquivos terão os seguintes conteúdos: acesso_total = IPs dos clientes que terão acesso total à internet.0.

Veja um exemplo de uma rede funcionando assim: Arquivo: /etc/squid/acesso_total Conteúdo: 192.2 192. Montando uma rede baseada numa lista de bloqueios Agora que você já entendeu como funcionam as acls. Ou seja.1.1. Passarão por bloqueios. Fica então a critério do administrador da rede ter uma vasta lista do que não pode acesar.1.168. A regra deste tipo de restrição é: QUALQUER SITE É PERMITIDO.168.wmv$ .iso$ .168. Neste exemplo vamos montar uma rede baseada numa lista de bloqueios e exceções.mpeg$ Descrição: Extensões de arquivos que terão download bloqueado.1. Arquivo: /etc/squid/download Conteúdo: .168.8 192. vamos a um exemplo um mais complexo do que o anterior.9 Descrição: Máquinas que terão acesso restrito à internet.2.avi$ .7 192.168.6 192. A desvantegem desta montagem de acesso é que se o cliente conhecer sites semelhantes aos bloqueados (com URLs diferentes) poderá acessar.1.4 192.mp3$ .5 Descrição: Máquinas que terão acesso total à internet.exe$ .1. Arquivo: /etc/squid/bloqueado .3 192.168.168. mas não é complicado entender. Arquivo: /etc/squid/acesso_restrito Conteúdo: 192. o cliente só terá o seu acesso bloqueado se o site estiver previamente cadastrado na lista de bloqueios.168. DESDE QUE NÃO ESTEJA NA LISTA.1.1.

Chegará então.2 vai acessar o site www. Nenhuma das regras seguintes serão aplicadas a elee tanto o uol. que são as exceções dos bloqueios.Conteúdo: sexo hardcore ninfeta penis suruba playboy revistasexy Descrição: Palavras para restrição de urls. Por estar cadastrado no acesso total ele cairá logo na primiera regra e será LIBERADO o acesso a qualque site. Por estar no acesso restrito.com.O cliente com ip 192.1. ele "passará ileso" pela primeira regra.com. mas como nela não tem nehuma restrição para o site uol ele também passará ileso.com.6 vai acessar o site www.168. Chegará então a quarta (bloqueado) e mais perigosa regra. pois não estamos fazendo download de nenhum arquivo. Como o site www.br como qualquer outra página estará liberada.uol.uol. O que for colocado aqui. . Nesta também não encontrará nada. ative as acls na mesma sequência doexemplo abaixo: http_access http_access http_access http_access http_access http_access allow acesso_total allow liberado deny download deny bloqueado alow aceso_restrito deny all Agora vamos às explicações e as análises dos casos. Arquivo: /etc/squid/liberado Conteúdo: abcdasaude sexoesaude medicinanatural uol.1.br/sexo Descrição: Exceções aos bloqueios. Agora vamos à prática: Declare as acls: acl acl acl acl acl acesso_total src "/etc/squid/acesso_total" acesso_restrito src "/etc/squid/acesso_restrito" liberado url_regex -i "/etc/squid/liberado" download url_regex -i "/etc/squid/download" bloqueado url_regex -i "/etc/squid/blouqeado" Depois de declarar. Caso 2 . Encontrará então a segunda (liberado). mesmo que esteja na lista de bloqueios será liberado.br. Cairá então na quinta regra.br.O cliente com ip 192. à terceira regra (download) que limita os downloads.com.uol.br não está na lista de exceções ele também passará ileso por esta regra. Caso 1 .com.168.

2 192. ao contrário da outra que tudo é liberado. Arquivo: /etc/squid/acesso_total Conteúdo: 192. onde há uma exceção para acessar todo o conteúdo do site medicinanatural. NELA. Sua vantagem é que o administrador da rede não precisa de uma enorme lista do que "não pode ser acessado".com. Caso 4 . pois antes mesmo de chegar nela foi encontrada uma adequação na regra de exceções e o squid parou de ler o resto das regras para este ip.6 vai acessar o site www.) Já sabemos que este cliente pulará a primeira regra. mas nãohá nenhuma exceção para o site sexomais.O cliente com ip 192.1.168. (Mas que cara teimoso.medicinanatural.1. Então ele prossegue.br contém uma palavra (sexo) que está na lista de bloqueios.br. 3.6 vai acessr o site www. Por estar no acesso restrito. poderá navegar tranquilamente pelo site.168.168.br. exceto o que você definir nos bloqueios.3 192.br. Caso 3 .168. pois antes ele já caiu no bloqueio de sites e (como já disse) o squid pára de ler quando aplica alguma regra.sexomais. TUDO É BLOQUEADO.168.1.O cliente com ip 192. A grande jogada esta aí! Vamos então a um exemplo prático. Encontrará a segunda. mas cairá logo na segunda. ele passa pela primeira regra..1..onde o acesso ao seu ip (192.168.br/sexo. Se não tentar fazer downloads.) vai acessar o site www.. Espero que este exemplo tenha ficado claro.1. Mesmo estando cadastrado no acesso_restrito este cliente não chegará a acl que lhe dá permissão de acesso. pois o site sexomais.medicinanatural. Não se enquadrará na segunda.1.4 192. Arquivo: /etc/squid/acesso_restrito .com.O cliente com ip 192.com.com.6) está LIBERADO (allow) podendo assim acessar o site www. Montando uma rede baseada numa lista de exceções Este tipo de rede é bem mais fácil montar que a antrior. mas cairá na terceira se tentar fazer qualquer download de arquivos com extensões definidas na lista /etc/squid/download..168. Caso 5 . Em alguns casos é mais fácil liberar apenas o que pode ser acessado do que bloquear tudo o que não poder ser acessado.1. na qual há exceções para os bloqueios. passando ileso pelo download e caindo na regra bloqueado.br/sexo) tenha a palavra sexo. pois sei ip é do acesso restrito.br.com. Ele pulará a primeira regra. a regra de bloqueio não será aplicada. EXCETO O QUE VOCÊ DEFINIR COMO EXCEÇÃO. Mesmo que em sua url (www.1. Na página seguinte montaremos um outro tipo de restrições de acesso.superdownloads. não há nenhuma restrição para a URL dele.5 Descrição: Máquinas que terão acesso total à internet.168.uol. afinal.com.com.6 (coitado dese cara.

br Descrição: Exceções aos bloqueios. Caso 3 . Caso 1 . O site www.8 192.com. que em sua lista possui (.br. A primeira regra LIBERA o acesso dos ips cadastrados no acesso_total.168.168.168.gov.168.6 192. o cliente poderá acessar normalmente todo o site . .uol.O cliente com ip 192. Como não hé nehuma exceção para o site www.com.gov. Nenhuma das regras seguintes serão aplicadas a elee tanto o uol.com.com.1.168. A segunda regra libera o acesso apenas aos conteúdos do arquivo /etc/squid/liberado.ce. Por estar cadastrado no acesso total ele cairá logo na primiera regra e será LIBERADO o acesso a qualque site.com.br será bloqueado para este ip.br bb.gov.uol. Encontrará então a segunda.detran.1.1. ufc uece unifor minhaempresa.168. .br ele também passará ileso pela segunda regra.1. Da terceira em diante ele não faz mais nada.com.uol. Caso 2 .168. E as demias negam os acessos da rede local e de todos os outros ips também.O cliente com ip 192.1. pois elas negam qualquer tipode acesso.1.gov.uol. Passarão por bloqueios.br. Por não estar no acesso total.9 Descrição: Máquinas que terão acesso restrito à internet.org. Já sabemos que ele pulará a primeira regra. Declare as acls: acl acesso_total src "/etc/squid/acesso_total" acl acesso_restrito src "/etc/squid/acesso_restrito" acl liberado url_regex -i "/etc/squid/liberado" Ative as acls: http_access http_access http_access http_access allow acesso_total allow liberado deny acesso_restrito deny all Agora vamos ao estudo dos casos.br bradesco. Arquivo: /etc/squid/liberado Conteúdo: .1.com.7 192.) uma referência à URL que ele está tentando acessar. ele pulará esta regra.br. Como a regra está liberando (allow) o acesso a qualquer URL que contenha .6 vai acessar o site www.Conteúdo: 192.2 vai acessar o site www.br como qualquer outra página estará liberada.edu.6 vai acessar o site www.O cliente com ip 192.com.

gov. Final Espero que este artigo possa ajudar alguém de alguma forma. Na última página mostrarei como redirecionar as páginas (para um aviso por exemplo) quando o cliente cair em algum bloqueio. Se mesmo assim. afinal haverão inúmeras reclamações de clientes dizendo que estão sem internet e na verdde estão tendo seus sites blouqeados. Nada mais óbvio do que colocar um aviso informando isso. .html all Se quiser também pode redirecionar para um site: deny_info http://www. Vamos então à prática. concorda? É bem simples. Procurei exemplificar nos mínimos detalhes para não deixar nenhuma dúvida.html quando ocorrer algum bloqueio de sites.google. Ela informa o doretório onde o squid vai buscar os arquivos html de erro. onde o conteúdo da internet é altamente restrito.ce. 5. Procure no seu squid. 2.www. como no exemplo abaixo: deny_info block.html download deny_info all. 1. o referido diretório fica em /usr/share/squid/errors/Portuguese. Nesta linha você define qual erro vai acionar qual página. bancos e instituições públicas. por isso acho que deva ter alguma utilidade.detran. dicas ou sugestões estarei à inteira disposição. por exemplo.br. Como vimos este exemplo é bem mais simples que o anterior e a abrangência dos bloqueios é bem maior. Para isso basta repetir as linhas. falta apenas redirecionar as mensagens.html bloqueado Neste exemplo o cliente será redirecionado para a página block. No meu conectiva. Você pode também acrescentar outras páginas de acordo com a quantidade de bloqueios que você possui.com. Procure no squid. 4.br bloqueado.html bloqueado deny_info down. É ideal para escolas. Salve-a dentro do diretório informado acima para que o squid a encontre quando alguém for bloqueado.conf a linha deny_info. Crie então uma página html comum informando que o usuário está tentando acessar um site proibido. houverem dúvidas. Escrevi pensando no que eu queria ter encontrado quando estava aprendendo a usar as acls. Redirecionando Depois de montada a rede com o modelo de sua preferência.conf a linha error_directory. Veja um exemplo: deny_info block.

0")) {return "DIRECT".1.br/*")) {return "DIRECT".255. host) { return "PROXY 192. de forma que ao colocar o arquivo wpad.1. pois o proxy só atende a requisições na porta 80 (ou seja. o endereço vai no "Editar > Preferências > Avançado > Rede > Configurações > Endereço para configuração automática de proxy"."*.dat pode incluir diversos outros parâmetros. Esta não é exatamente uma configuração automática (você ainda tem o trabalho de configurar os clientes para utilizarem o script).dat dentro dele. No Firefox.1:3128". ele passará a ser disponibilizado através do endereço "http://ip-doservidor/wpad. HTTPS e outros protocolos) e usar o proxy transparente automaticamente impede que seja usada autenticação dos usuários.101:3128". existe a opção de usar um script PAC (Proxy Auto-Configuration).gdhpress. crie o arquivo "/var/www/wpad.html ser usados no: Depois de disponibilizar o arquivo. endereços que devem ser acessados diretamente. não funciona para FTP.} return "PROXY 192. que inclui exceções para o site da empresa (ou outro site qualquer. que será usado para disponibilizar o arquivo. que você defina) e para a faixa de endereços da rede local. host) { if (shExpMatch(url.com.} if (isInNet(host. "192.168. O diretório "/var/www" é o diretório raiz do servidor web. usar um proxy transparente está longe de ser uma solução perfeita.Configuração automática de proxy nos clientes Usar um proxy transparente é a forma mais simples de fazer com que todas as estações da rede utilizem o proxy. sem passar pelo proxy: function FindProxyForURL(url.com/eng/mozilla/2.dat" (no servidor). Para manter as coisas simples.dat".0". A principal vantagem em relação à configuração manual é que ao usar o script você pode alterar a configuração de proxy em todas as estações simplesmente modificando o script.168. "255.1. Entretanto. falta apenas configurar os clientes para obterem a configuração de proxy através dele. Aqui temos uma versão um pouco mais incrementada do arquivo. com o seguinte conteúdo: function FindProxyForURL(url.dat". Os clientes são então configurados para buscarem a configuração de proxy no script. O arquivo contém um pequeno javascript que será processado pelos clientes antes de cada requisição orientando-os a utilizarem o proxy. mas também não quer arcar com o trabalho de configurar cada estação para usar o proxy manualmente. O arquivo wpad. sem precisar configurar cada uma das máquinas manualmente. você pode utilizar o próprio servidor que está disponibilizando o proxy. um arquivo que é disponibilizado na rede local através de um servidor web.1. Para começar.0/relnotes/demo/proxy-live. em vez de precisar reconfigurar cada estação manualmente.netscape.168. Basta instalar o Apache usando o gerenciador de pacotes. Se você acha as limitações de usar um proxy transparente pesadas demais. } Você pode ver uma lista com outros parâmetros que podem http://wp.168.1.1:3128" corresponde ao endereço do servidor proxy e a porta utilizada pelo Squid.1/wpad. mas é um bom ponto de partida.0. o "192. } No exemplo. enquanto no IE vai no . você precisa instalar um servidor web em algum servidor da rede. como em "http://192. como em: # apt-get install apache2 ou: # yum install httpd Em seguida.168.

você pode checar o uso do proxy pelos clientes monitorando o arquivo "/var/log/squid/access. ."Ferramentas > Opções da Internet > Conexões > Configurações da LAN > Usar script de configuração automática": Depois de feita a configuração.log" do servidor. Você verá várias entradas referentes aos acessos feitos pelos clientes.

Ele é um workaround para um bug do IE 6.conf". Depois de alterar o arquivo.1.dat\n".168. subnet 192. O degrau seguinte é o WPAD (Web Proxy Auto-Discovery protocol). enquanto a segunda é incluída na seção correspondente à subnet. sem lerem o arquivo wpad. 252 = text. 600.168. a primeira contendo a diretiva "code 252 = text" e a segunda contendo a localização do arquivo wpad.1/wpad. 192.dat: option wpad-url code option wpad-url "http://192.222. option wpad-url code 252 = text. "http://192.1. que não lê a configuração se o \n não estiver presente. 208. onde os clientes são manualmente configurados para utilizarem o arquivo.67.1. A alteração do servidor DHCP consiste em adicionar duas linhas no arquivo "/etc/dhcp3/dhcpd. 192.1.0.168. permitindo que eles localizem o arquivo automaticamente.0 { 192.1/wpad.100 option routers option domain-name-servers option broadcast-address option wpad-url } none.168. mas você perceberá que os clientes continuarão tentando acessar a web diretamente.199. você pode configurar os clientes com a opção "Detectar automaticamente as configurações" na configuração do proxy. Para usar o WPAD. A primeira linha é incluída na seção global da configuração.255. apenas o Internet Explorer é compatível com a configuração automática via proxy.255. 255.dat\n".168. precisaremos configurar também o servidor DHCP e o servidor DNS da rede para orientarem os clientes a utilizarem o arquivo.1.1.Essa é a configuração mais elementar. O "/n" na última linha insere uma quebra de linha. em vez de especificar a localização do arquivo manualmente: Atualmente.1. 7200.222.255.dat e sem utilizarem o proxy: .168. que permite automatizar a configuração dos clientes. como em: ddns-update-style default-lease-time max-lease-time authoritative. Depois de configurar o DHCP.0 netmask range 192.168.1. Você pode selecionar a opção "Autodetectar as configurações de proxy para esta rede" no Firefox. não esqueça de reiniciar o serviço para que a alteração entre em vigor.

br". Primeiro adicionamos uma entrada referente ao domínio no arquivo principal.com.gdhn.com.168.168. O conteúdo do arquivo será o seguinte (veja mais detalhes sobre o significado das opções no capítulo sobre DNS): @ IN SOA etch.local".br.Isso nos leva à configuração do DNS.1.1 wpad IN A 192.gdhn. você pode especificar qualquer domínio. que complementa a configuração. hostmaster.gdhn.com. Mais adiante teremos um capítulo dedicado à configuração de servidores DNS utilizando o Bind.gdhn).gdhn. No exemplo.br" e o "wpad.br" IN { master. como em: # apt-get install bind O arquivo de configuração padrão é o "/etc/bind/named.br. A 192. Comece adicionando a configuração referente a ele no final do arquivo "/etc/bind/named. indicando a localização de um arquivo externo (onde vai a configuração) e em seguida adicionamos a configuração propriamente dita neste segundo arquivo.gdhn". A configuração do domínio é feita em duas partes.br. "/etc/bind/db. não é necessário que ele esteja realmente registrado.gdhn".1" é o endereço IP usado por ele. ambos apontando para o . estou usando o domínio "gdhn.com. pois é necessário configurar também um domínio para a rede local e ajustar (novamente) também a configuração do servidor DHCP para que os clientes utilizem o domínio. Isso cria o domínio "gdhn.conf".br". Esse arquivo precisa ser criado na mesma pasta do arquivo principal. onde veremos mais detalhes sobre a configuração de domínios. será o arquivo "/etc/bind/db.com.conf.com.1. que é carregado como um include): zone type file }. Veja que na terceira linha especificamos o arquivo externo (db. "gdhn.1 O "etch" no exemplo é o nome do servidor. ou seja.conf" (no Debian você pode também utilizar o arquivo "/etc/bind/named. A configuração do DNS é um pouco mais complexa.168. Como estamos configurando um domínio local. vou apenas me limitar a uma receita rápida para que você coloque o domínio no ar e possa assim ativar a configuração automática do proxy.com. Por enquanto. O primeiro passo é instalar o Bind usando o gerenciador de pacotes.1.br. enquanto o "192. ( 2008030645 3H 15M 1W 1D ) NS etch. gdhn. atendendo a máquinas com o Firefox. onde irá a configuração do domínio. Opera e outros navegadores.com.

168. que especifica que eles devem fazer pesquisas dentro do domínio e que o endereço do servidor é usado como DNS primário.dat no host "wpad" dentro do domínio da rede (que leva ao nosso servidor). Em vez de procurarem o arquivo wpad. é necessário também configurar os clientes para utilizarem o servidor DNS interno que acabamos de configurar.".br".com.dat e utilizar a configuração definida por você.168. ddns-domainname "gdhn.1. sem respeitar a configuração do DNS.conf". Veja que é incluída a linha "search gdhn.1.br.255.endereço IP do servidor. os clientes Linux receberão a seguinte configuração de DNS (salva no arquivo "/etc/resolv. Veja um exemplo: Com isso.1 gdhn. ao tentarem baixar o arquivo "http://wpad.168. não esqueça de reiniciar o Bind para que a alteração entre em vigor: # /etc/init. Dessa forma.br.100 192. . } Com essa configuração. "gdhn. Este é um exemplo de arquivo "/etc/dhcp3/dhcpd.dat\n".com. option domain-name "gdhn.168.dat". authoritative.1.168.1. ele será capaz de encontrar o arquivo wpad.". a mesma configuração é fornecida aos clientes Windows configurados via DHCP.255.br. Depois de terminar. os clientes baixarão na verdade o "http://192.com. Uma pequena exceção fica por conta de versões antigas do Firefox para Linux.".com. elas tentam sempre baixar o arquivo a partir da URL "http://wpad/wpad.168. max-lease-time 7200. default-lease-time 600.br. você pode configurar o Firefox para localizar o proxy automaticamente e. subnet 192. Isso é feito especificando o endereço IP do servidor como único servidor DNS na opção "domain-name-servers" da configuração do DHCP e adicionando duas novas opções na seção global do arquivo: ddns-domainname option domain-name "gdhn.1.168.1.dat". depois das alterações: ddns-update-style none.0 netmask 255. Naturalmente. graças à configuração do DNS. option wpad-url "http://192.br/wpad.1/wpad.1/wpad.168.1. option wpad-url code 252 = text. option domain-name-servers 192.255.0 { range 192.com. para que o domínio seja utilizado.1.dat".gdhn. que possuem um bug na variável usada para localizar o arquivo.com.199.d/bind restart Naturalmente.conf") do servidor DHCP: search nameserver 192.1.".1.168. option broadcast-address 192.br. option routers 192.1.com.

as requisições passam a ser destinadas ao endereço correto.1.Ao usar clientes Linux rodando alguma das versões afetadas pelo bug. solucionando o problema. adicionando uma entrada relacionando o host "wpad" com o endereço do seu servidor.183 TCP_MISS/503 1479 GET http://wpad/wpad. .1. você verá uma série de entradas como essa no log do Squid: 192.1 wpad Com isso.168.DIRECT/wpad text/html A solução nesses casos é editar o arquivo "/etc/hosts" nos clientes afetados. como em: 192.168.dat .