projetos | download | linux | privacidade | contato
 
  Produtos | Documentação | Suporte | Treinamento | Conectiva | Cases | Soluções | Parcerias | Imprensa | Oportunidades
Pesquise 
português 
english 
español

SUPORTE

->Suporte Estendido
->Centros de Serviços
->Técnicos Certificados
->Formulário de Suporte
->Abrangência do Suporte
->Acionando o Suporte
->Perguntas e Respostas
->Atualizações
->Livros, Guias e Manuais
->Hardware

    16.1. Como configurar um servidor proxy utilizando o squid?

    Este documento explica como configurar o Squid para funcionar tanto como servidor Proxy como cache de arquivos baixados da Internet.

    O pacote Squid é um servidor de proxy e cache de alta performance para clientes web, suportando objetos HTTP, FTP e gopher, porém aqui nos limitaremos aos objetos HTTP e FTP. Serão também dados exemplos de listas de controle de acesso, (as famosas access lists).

    O benefício é o fato de um servidor Proxy poder compartihar uma conexão Internet entre vários ou mesmo todos os usuários na rede.

    Muitos servidores Proxy oferecem a possibilidade de se fazer cache de Web, para alocar sites Web previamente visitados e providenciar acesso local aos usuários que revisitam estes sites.

    Possui apenas um arquivo de configuração, o qual é auto-explicativo. A princípio, pode parecer complicado, pois existem várias opções disponíveis para configurar, mas apenas algumas precisam necessariamente ser especificadas. Estas serão abordadas mais à frente.

    Recomenda-se que a máquina onde será instalado o servidor possua uma boa quantidade de memória (128MB se possível) e um winchester SCSI, para um acesso mais rápido dos clientes aos arquivos cacheados.

    Pacote necessário:

    squid-versão.rpm

    Para instalar o pacote;

    Primeiramente monte o cd.

        
           [root@localhost]# mount /mnt/cdrom
    

    Entre no diretório das RPMs.

           [root@localhost]# cd /mnt/cdrom/conectiva/RPMS
    

    Execute o comando de instalação:

           [root@localhost]# rpm -ivh squid-versão.rpm
    

    Configurando o Servidor

    O arquivo /etc/squid/squid.conf, este arquivo contém todas as configurações do servidor Squid. Aqui descreverei as configurações necessárias. Este arquivo possui várias opções para se configurar o servidor. A maioria destas opções estão comentadas, e apenas algumas são realmente necessárias. Caso alguma opção precise ser modificada, descomente a linha referente (retire o caracter "#" à frente da opção).

    Editando o arquivo:

           [root@localhost]# mcedit /etc/squid/squid.conf
    


    • http_port - A porta na qual o Squid irá atender as requisições feitas a ele. O default é 3128, caso precise alterar este valor, descomente a linha e troque-o por alguma porta que não esteja sendo utilizada. Ex:http_port 3000

    • cache_mem - O squid utiliza bastante memória por razões de performance. Ele leva muito tempo para ler algo do disco rígido, por isso o faz diretamente da memória.

      É recomendado colocar no máximo 1/4 da quantidade de RAM de sua máquina neste campo, se não for um serviço dedicado desta máquina. Se a máquina roda apenas o squid, pode-se colocar metade da memória para seu uso. Por exemplo, em uma máquina com 64MB de memória:

                    cache_mem 32 MB
      
    • cache_swap_low , cache_swap_high - estes valores definem os valores mínimo e máximo para reposição de objetos armazendados. Estes valores são expressos em porcentagem. Quando mais próximo ao valor máximo, mais objetos são descartados do cache para entrada de novos.

      O default sendo 90% para cache_swap_low e 95% para cache_swap_high.

          
          cache_swap_low  90
          cache_swap_high 95
      
    • maximum_object_size - medido em bytes, especifica o tamanho máximo dos arquivos a serem cacheados. Quaisquer objetos maiores do que este tamanho _não_ são salvos no disco. O default é 4MB.

          maximum_object_size 4096 KB
      
    • cache_dir - diretórios de cache no servidor. Pode-se especificar múltiplas linhas cache_dir para dividir a cache entre diferentespartições do winchester.

      a sintaxe desta linha é:

             cache_dir Tipo Path MB N1 N2
      

      Onde:

      Tipo: especifica o tipo de sistema de alocação que será usado. Geralmente é do tipo "ufs".

      Path: especifica o diretório onde os arquivos serão armazenados. O Squid não cria este diretório, ele deve existir. Note que, caso nenhuma entrada cache_dir for especificada, o sistema utilizará o diretório /var/spool/squid;

      MB: é a quantidade máxima de espaço a ser utilizado neste diretório.

      N1: especifica o número máximo de subdiretórios que poderão ser criados abaixo do diretório de cache;

      N2: especifica o número máximo de subdiretórios que poderão ser criados abaixo dos subdiretórios criados em N1.

      Ex:

           cache_dir ufs /var/spool/squid 300 16 256
      

      Com isto, dizemos para o squid utilizar o diretório /var/spool/squid, até 300MB, criando 16 sub-diretórios e 256 sub-diretórios abaixo destes últimos.

    • cache_access_log - arquivo no qual será gerado log dos acessos ao servidor. O default é /var/log/squid/access.log cache_access_log /var/log/squid/access.log

    • cache_log - arquivo onde são guardadas informações gerais sobre o comportamento da cache. O default é /var/log/squid/cache.log cache_log /var/log/squid/cache.log

    Autenticando usuários



    • autenthicate_program - é comum os administradores restringirem o acesso ao Proxy aos seus clientes. Para isto, pode-se pedir usuário e senha ao usuário para poder navegar utilizando o Proxy. Este serviço é feito pelo autenthicate_program (programa autenticador). O pacote do squid inclui um programa autenticador chamado ncsa_auth , o qual utiliza arquivos de senhas no formato htpasswd do Apache. Pode-se utilizar algum outro programa, se quiser.

      O executável do ncsa_auth está no diretório /usr/doc/squid-versão .

      É preferível copiá-lo para um diretório de arquivos binários (/usr/bin por exemplo). Uma linha típica de configuração seria:

          autenthicate_program /usr/bin/ncsa_auth
          /etc/squid/squid_passwd
      

      O arquivo /etc/squid/squid_passwd deve ser criado com o comando htpasswd:

             [root@localhost]# htpasswd -c /etc/squid/squid_passwd usuario1
           
      

      Para atualizar o arquivo de senhas utilize apenas:

             [root@localhost]# htpasswd /etc/squid_passwd usuario2 
      

      Por default, o programa autenticador não é utilizado. Se você utilizar o ncsa_auth (ou algum outro autenticador), deve existir uma access list do tipo proxy_auth para permitir ou não o acesso. Access lists são detalhadas abaixo.

    Opções de Segurança

    A grande maioria dos administradores de sistemas provavelmente irão desejar definir uma política de segurança no Squid, isto é, definir quem irá acessar e o que poderá ser acessado.

    O primeiro passo para a definição de controle de acesso ao proxy do Squid é a criação de listas de acesso (acl).

    As listas de acesso meramente dão nomes a objetos. Estes objetos podem ser domínios de origem, domínios de destino, endereços de IP, etc.

    A forma geral de uma linha de lista de acesso é:

               acl NOME TIPO OBJ1 OBJ2...
    

    Onde:



    • NOME: é um nome que será utilizado para identificar esta lista de acesso;

    • TIPO: indica o que é o objeto a que nos referimos nesta linha. Pode ser: situações que partiram da rede.

    • OBJ1 e OBJ2: podem ser domínios de origem, domínios de destino, endereços IP, etc., exemplo:

             acl localhost src 127.0.0.1/255.255.255.255
      

      Especifica uma lista de acesso chamada _localhost_ definida como requisições vindas da máquina local (127.0.0.1)

    • dst: especifica um IP/máscara de destino, ou seja, entram nesta categoria as requisiçõe àquele par IP/máscara;

    • srcdomain: especifica um domínio de origem, ou seja, entram nesta categoria as requisições que partiram do domínio especificado;

    • dstdomain: especifica um domínio de destino, ou seja, entram nesta categoria as requisições de objetos localizados naquele domínio;

    • time: especifica uma expressão descrevendo "tempo".

      É formado por uma expressão de data, que é uma lista de abreviações dos dias da semana ( S - Domingo, M - Segunda-feira, T - Terça-feira, W - Quarta-feira H - Quinta-feira, F - Sexta-feira e A - Sábado), seguida por um intervalo de datas no formato hh1:mm1-hh2:mm2.

    • ident: especifica um ou mais nomes de usuário.

    O Squid define access lists padrões, as quais estão abaixo:

        acl all src 0.0.0.0/0.0.0.0
    

    Esta acl define todos os hosts da rede (0.0.0.0/0.0.0.0) com o nome "all".

        acl manager proto cache_object
    

    O campo "proto" nesta linha significa que a acl bloqueia um protocolo específico, neste caso o protocolo "cache_object". Poderia ser os protocolos FTP ou HTTP. Se você não conhece o protocolo "cache_object", não se preocupe é um protocolo apenas do Squid que retorna informação para o servidor de como a cache está configurada, ou como ela está rodando.

        acl localhost src 127.0.0.1/255.255.255.255
    

    Esta acl define a máquina localhost, e recebe o mesmo nome.

        acl SSL_ports port 443 563
        acl Safe_ports port 80 21 443 563 70 210 1025-65535
        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
    

    Estas acls contém as portas consideradas seguras para o proxy. Todas as outras portas são consideradas inseguras, e o acesso é negado.

        acl CONNECT method CONNECT
    

    Acl contendo o método de acesso aos arquivos na rede (GET,POST). O método CONNECT vale tanto por GET (receber) como por POST (enviar).

    Exemplo prático de acl para rejeitar conexão com determinados domínios.

        acl bad_sites dstdom_regex "/etc/squid/bad_sites" 
    

    Defini o arquivo bad_sites com domínios que serão rejeitados.

    Vamos definir aqui também a access list referente ao controle de acesso dos usuários ao proxy:

        acl password proxy_auth REQUIRED
    

    Password é o nome da access list, a access list é do tipo proxy_auth (autenticação de usuários). O campo REQUIRED informa ao squid para procurar o nome/senha do usuário com todos os nomes/senhas existentes no arquivo /etc/squid/squid_passwd, descrito anteriormente. Pode-se também colocar um a um os nomes de usuários a ser procurados no arquivo squid_passwd, em vez do campo REQUIRED.

    Agora que já temos as access lists, precisamos aplicá-las informando ao squid se o acesso a elas será ou não permitido. O campo http_access é responsável por esta tarefa.

    Configurações padrão do campo http_access são:



    1. http_access allow manager localhost

      Dá acesso ao protocolo cache_object apenas para o próprio servidor (localhost).

    2. http_access deny manager

      Nega o acesso ao protocolo cache_object para qualquer outra máquina.

    3. http_access deny !Safe_ports

      Nega o acesso a qualquer outra porta além das definidas na acl Safe_ports.

    4. http_access deny CONNECT !SSL_ports

    É perigoso permitir ao Squid conectar-se a certas portas. Por exemplo, pode-se usar o Squid como relay de SMTP (email). Relays de SMTP são uma das formas possíveis de se "floodar" (lotar) nossos mailboxes. Para prevenir o relay de emails, o Squid nega requisições quando o número da porta da URL é 25 (porta SMTP). Outras portas também são bloqueadas. A regra 3 informa ao Squid para negar o acesso a qualquer porta que não esteja na lista Safe_ports. A regra 4 nega qualquer conexão que não seja referente às portas seguras.

    O padrão do Squid é negar acesso a tudo a todos. Para permitir a utilização do proxy do Squid, você deve configurá-lo para permitir o acesso.

    Normalmente, apenas insere-se uma regra a mais:

        
        http_access allow all
    

    Porém, isto não restringe nem um pouco o acesso ao seu proxy. Pelo contrário, permite o acesso ao proxy a partir de qualquer máquina na Internet.

    Para restringir o acesso apenas a usuários do seu sistema, você pode inserir a seguinte instrução:

        http_access allow password
    

    Isso vai exigir que os usuários forneçam uma senha para que possam utilizar o proxy.

    Nota: A ordem dessas regras é importante, você deve colocá-las na mesma ordem em que foram apresentadas nesta seção.

    Seguindo o exemplo da acl bad_sites agora vamos proibir o acesso.

        http_access deny bad_sites # proíbe o acesso a url que contenham as palavras  
                                   # existentes no arquivo bad_sites
        
    

    Seção ADMINISTRATIVE PARAMETERS

    Esta seção é bem pequena, porém importante.



    • cache_mgr : Endereço de e-mail do gerenciador local da cache, que irá receber emails se ocorrerem problemas com o proxy. O default é "webmaster".

          cache_mgr webmaster
      
    • cache_effective_user e cache_effective_group : Se o root inicializa o servidor proxy, ele irá mudar seu efetivo UID/GID para o especificado abaixo, por questões de segurança. Geralmente se muda o UID/GID abaixo para nobody.

          cache_effective_user nobody
          cache_effective_group nobody
      
    • visible_hostname : É possível apresentar um hostname "especial" em mensagens de erro e outras mensagens, especificando aqui o "hostname". Se não for especificado, é usado o valor de retorno de gethostbyname(), (normalmente o próprio hostname do servidor Proxy).

          visible_hostname proxy.Suporte.Conectiva
      

    Seção HTTPD-ACCELERATOR OPTIONS

    Se desejar rodar o Squid como acelerador web ou proxy transparente,deve-se alterar os valores das opções desta seção, para os seguintes:

        httpd_accel_host virtual
        httpd_accel_port 80
        
        httpd_accel_with_proxy on
        
        httpd_accel_uses_host_header on
    

    Nota: além de descomentar essas linhas, deve-se incluir no arquivo /etc/rc.d/rc.local, ou em algum outro arquivo de sua preferencia as seguintes linhas:

        echo 1 > /proc/sys/net/ipv4/ip_forward
        ipchains -A input -p tcp -s 192.168.1.0/24 -d  0/0  80 -j REDIRECT
        3128
    

    Resumindo: Todo o trafego da rede 192.168.1.0 na porta 80 vai ser redirecionado para porta 3128 do squid, lógico que a máquina onde for utilizada essa configuração, deverá ser o gateway da rede.

    Seção MISCELLANEOUS

    Como o próprio nome diz, esta seção oferece opções extras, como configurar as mensagens de erro de acesso que aparecem para os clientes, testes de DNS, configuração do diretório de ícones e de arquivos de mensagens de erro do squid, entre outras.

    Nenhuma opção precisa ser modificada. A opção cachemgr_passwd é interessante. Existe um programa CGI chamado cachemgr, que o pacote rpm do squid instala no diretório /usr/bin. Pode-se utilizar este programa para gerenciar vários recursos do proxy via Web, inclusive desligar/reiniciar o servidor. Isto não será tratado aqui, pois inclui alterações na configuração do servidor Web. No FAQ do Squid, existe uma seção inteira referente ao gerenciador de cache.

    Seção DELAY POOL PARAMETERS

    Esta seção trata sobre Multicast e Cache Digest. Embora não utilizemos estes recursos, é interessante saber do que se tratam.

    Multicast é a capacidade de enviar um pacote IP para múltiplos destinatários ao mesmo tempo. É utilizado por exemplo em sistemas de vídeoconferência.

    Cache Digest é um sumário dos componentes de um servidor de cache. Contém, em um formato comprimido, uma indicação se determinada URL está ou não na cache. Deve ser utilizado em conjunto com caches irmãs/pais (hierarquia de caches). Servidores proxy periodicamente trocam seus "digests" entre si. O funcionamento é simples: quando uma requisição para uma URL é recebida de um cliente, o servidor cache, caso não possua o arquivo requisitado, pode enviar "digests" para as outras caches definidas em sua hierarquia, afim de descobrir se alguma delas contém o objeto. O servidor cache pode então requisitar o objeto da cache mais próxima.

    Configurando a Estação

    Como mencionado anteriormente, apenas o navegador tem de ser configurado para utilização do servidor proxy. Infelizmente, cada um tem seu próprio procedimento de configuração. Vamos cobrir o netscape, para informações sobre como configurar outros navegadores, consulte a documentação do mesmo.

    Você deve clicar em Editar-> Preferências-> Avançado-> Servidores Proxy, e preencher os dados referente ao seu servidor proxy.

    Você só precisa preencher os dados sobre o seu servidor proxy, que irá servir para os protocolos FTP e HTTP, inserimos o par IP/Porta onde está configurado o proxy.

    Pode-se configurar endereços que não serão acessados via proxy, como por exemplo servidores locais à rede do cliente. Para isto, deve-se inserir os domínios ou intervalos de endereços IP/netmask, no campo "Não utilizar proxy para:"

    Testes Pós-Instalação

    Após configurado o arquivo squid.conf, podemos inicializar o servidor, rodando o script do squid a partir do diretório /etc/rc.d/init.d

           [root@localhost]# cds
        
           [root@localhost]# ./squid start
    

    Para inicializar o squid sempre durante o boot da máquina, execute o comando:

           [root@localhost]# ntsysv
    

    selecione o squid.

    Quando o servidor é inicializado, os seguintes processos entram em execução:

    /usr/bin/squid -> servidor iniciado pelo root
    (squid) -> servidor com o UID/GID efetivo
    (unlinkd) -> daemon que deleta arquivos da cache
    (ncsa_auth) -> se for usado o programa autenticador


    O servidor proxy deve guardar os arquivos de cache da página acessada abaixo do diretório /var/spool/squid (ou outro diretório que foi especificado na opção cache_dir do squid.conf). Repita o procedimento em outra máquina da rede, configurada com o proxy. A página acessada irá baixar bem mais rapidamente, pois já está cacheada no servidor proxy.