SUSE 10.1 - Tutorial squid por user ou IP.

Atualizado em: 23/09/2006



Sobre este documento

Tutorial - Squid no SUSE 10.1, instalar e configurar com controle de acesso por usuário ou por IP, comandos e linhas de comando utilizados na manutenção de servidor proxy - Squid (na minha opinião e como eu uso, copiar e colar no console), existem diversas ferramentas via ambiente gráfico, ao estilo clique, clique..... ou da maneira mais rápida e simples, copiar colar os comandos.

Neste tutorial tem comandos destrutivos, alguns tutoriais inclue linha de comando para remover o Squid e fazer nova instalação, nesta remoção inclue os arquivos de log e configurações, portanto utilize somente em ambiente de testes.

Instalar e testar Squid

SUSE 10.1 com gerenciador de pacotes smart, quem utiliza outro gerenciador deve instalar os mesmos pacotes, muda somente a linha de comando ou forma de procurar pelo pacote na interface do gerenciador.

SUSE 10.1 i386

Ambiente utilizado; instalado em estação de testes, instalação com perfil estação de trabalho, ambiente KDE e com acesso à internet, sem restrições de firewall e sem passar por outro proxy.

Não esqueça de redirecionar o trafego da porta 80 para 3128, assim navega pelo proxy somente quem tem navegador configurado para usar proxy, veja tutoriais sobre firewall com dicas e regras sobre redirecionamento e exclusão de estações do proxy.

Instale o pacote squid, exemplo de linha de comando via smart.

smart install squid -y

chkconfig squid on Marcar para iniciar junto com o boot da maquina.

rcsquid start Iniciar o servidor proxy (Squid)

Na primeira vez que iniciar o Squid, vai criar o diretório cache e deve retornar;

  linux:~ # rcsquid start
  Starting WWW-proxy squid  (/var/cache/squid)                          done

Nas demais vezes retorna;

  linux:~ # rcsquid start -D
  Starting WWW-proxy squid                                              done

Prontinho, squid instalado, o próprio instalador cria automaticamente arquivos de configuração, log, cache e outras configurações necessárias, mas ainda não navega por falta de regras, para testar, configure uma estação para navegar por este proxy e confira nos logs, deve retornar no navegador da estação a mensagem padrão de erro do Squid, no log do servidor um resultado semelhante a esta.

  linux:~ # tail -f /var/log/squid/access.log
  1131289310.779    196 192.168.1.53 TCP_DENIED/403 1389 GET http://www.zago.eti.br/ - NONE/- text/html

Observe que registrou acesso negado, isto ocorre por falta de regras liberando a estação (IP), a configuração default que fica em /etc/squid/squid.conf não tem regras de controle, ou melhor, o Squid é muito flexível e permite diversos tipos de configuração, precisamos personalizar o controle de acesso à web, podemos escolher e configurar o controle; por usuário, por IP, por horário, liberar geral com restrição de alguns sites, controles por palavras na URL e muito mais. Qualquer destas configurações ou parte delas podem ser via ferramentas de configuração via ambiente ambiente gráfico, editar diretamente o squid.conf ou simplesmente substituir por um squid.conf de outra instalação previamente configurado.

Por segurança, faça copia do squid.conf, assim tem como voltar em casos de acidentes..

cp /etc/squid/squid.conf /etc/squid/copia1-squid.conf

Alterando squid.conf para liberar sua rede, precisa remover o comentário de duas linhas e alterar a classe de rede quando diferente de 192.168.1.0 ou 192.168.2.0, só faltou remover o comentário no original, acho que no default não deveriam ser comentadas, como deve ter algum motivo para isto, como não navega com elas comentadas, então use seu editor preferido e retire o comentário destas duas linhas, (no squid.conf original são as linhas 1871 e 1872);

  # antes (configuração original vem comentada)
  #acl our_networks src 192.168.1.0/24 192.168.2.0/24
  #http_access allow our_networks
  #depois, retire o comentário e em lugar do IP altere para a classe de IP da sua rede
  acl our_networks src 192.168.1.0/24 192.168.2.0/24
  http_access allow our_networks

Ou em uma tacada só, remover os comentarios com estas linhas de comando, pode colar estas linhas abaixo no console para fazer o mesmo serviço de edição das linhas acima, cuidado com a quebra de linha, são duas linhas, cada uma inciando com sed e terminando com squid.conf.

  sed -i "s/#acl our_networks src 192\.168\.1\.0\/24 192\.168\.2\.0\/24/acl our_networks src 192\.168\.1\.0\/24 192\.168\.2\.0\/24/g" /etc/squid/squid.conf
  
  sed -i "s/#http_access allow our_networks/http_access allow our_networks/g" /etc/squid/squid.conf

Sempre que alterar squid.conf precisa recarregar as configurações com o comando;

squid -k reconfigure

Prontinho, agora a estação navega normalmente, nos logs registra algo como;

  1131293077.504   1974 192.168.1.53 TCP_MISS/200 55483 GET http://www.zago.eti.br/ - DIRECT/200.142.243.108 text/html

Sempre que alterar squid.conf ou alguma ACL, precisa recarregar as configurações com squid -k reconfigure, este comando pode falhar conforme as alterações efetuadas no squid.conf, quando tiver problemas, faça um teste, apague e recrie o cache, faça isto com o servidor proxy parado.

Persistindo o problema, reveja a configuração, volte o squid.conf padrão (original da instalação), reinicie o serviço e certifique que estão rodando, sempre testando o funcionamento a cada passo e não esqueça dos logs que é sua grande fonte de informação na solução de problemas.

Outra opção, zerar tudo, começar de novo, desinstalar e remover Squid e seus diretórios, exemplo via smart;

(Isto vai apagar tudo referente ao Squid, portanto faça copia dos arquivos que queira manter, exemplo de alguma configuração ou ACL em /etc/squid ou dos logs em /var/log/squid/access.log)

  rcsquid stop 
  sleep 30
  smart remove squid -y
  rm -rf /etc/squid
  rm -rf /var/cache/squid
  rm -rf /var/log/squid/access.log
  smart install squid -y
  sed -i "s/#acl our_networks src 192\.168\.1\.0\/24 192\.168\.2\.0\/24/acl our_networks src 192\.168\.1\.0\/24 192\.168\.2\.0\/24/g" /etc/squid/squid.conf
  
  sed -i "s/#http_access allow our_networks/http_access allow our_networks/g" /etc/squid/squid.conf
  # ou substitua o squid.conf e acl por outra configuração antes de iniciar o Squid, veja outros modelos indicados neste tutorial.
  rcsquid start

Nesta troca de configuração, apagar e recriar o cache, algumas vezes pode travar o PID e não iniiciar o Squid, veja em dicas e truques algumas dicas e soluções..

SUSE 10.1 x86_64

Comandos são os mesmos da arquitetura i386, nome de pacotes também, muda somente a versão, pode seguir o tópico sobre i386 que funciona.

A seguir algumas anotações sobre um teste que falhou, depois de seguir os passos passos do tutorial para i386, falhou ao tentar iniciar o squid, retorna a mensagem.

  squid -z
  FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'
  
  Squid Cache (Version 2.5.STABLE12): Terminated abnormally.
  CPU Usage: 0.008 seconds = 0.004 user + 0.004 sys
  Maximum Resident Size: 0 KB
  Page faults with physical i/o: 0
  Aborted

Erro de 'visible_hostname' está relacionado ao nome da maquina, no meu caso estava como localhost, tem que dar um nome no formato de dominio, algo como "dominio.net", "dominio.com.br", feito esta alteração via yast, ao tentar iniciar o squid mudou a mensagem de erro.

  rcsquid start
  Starting WWW-proxy squid  (/var/cache/squid)/usr/sbin/rcsquid: line 64: 10751 Aborted                 $SQUID_BIN -z -F >/dev/null 2>&1
   - failed while creating cache_dir !
                                                                        failed

Depois de varias tentativas; alterando o nome da maquina, troca de configurações e reiniciando o serviço de rede. Nada de funcionar, resolvi reiniciar o micro, depois do reboot funcionou sem problema. Fica a dica, quando alterar nome da maquina e tiver problemas, tente reiniciar o micro para ver se resolve.

Com filtro na URL, negando palavras na URL coforme lista

Modelo de Squid.conf e acl com bloqueio de acesso conforme uma lista de palavras, requer um arquivo negapalavra.txt com as palavras que vão negar acesso aos sites que contenha determinada palavra na URL.

Exemplo de como negar acesso a sites que contenha em qualquer parte da URL a palavra sexy, qualquer endereço (URL) contendo sexy em qualquer parte do endereço será negado, edite este arquivo com seu editor preferido para remover ou incluir novas palavras.

Tornando mais fácil, vamos trocar a configuração do Squid atual por um modelo do FAQ.

Pode trocar a configuração e recarregar a nova configuração, dependendo da instalação e configuração, acaba falhando, tem solução mas torna mais trabalho que remover tudo e instalar do zero.

Pelo modo mais radical, copiar a configuração atual para /tmp. Depois remover e reinstalar o Squid, fazer download do do modelo do FAQ, linhas de comando para copiar e colar.

  rcsquid stop 
  squid -k shutdown
  sleep 5
  mv /etc/squid/ /tmp/squid/
  smart remove squid -y
  rm -rf /etc/squid
  rm -rf /var/cache/squid
  rm -rf /var/log/squid/access.log
  smart install squid -y
  #comando para importar este squid.conf no "vi" (veja cp.txt)
  #  :r !lynx -dump http://www.zago.eti.br/squid/acl/suse101-por-palavra.txt
  cd /etc/squid
  wget 200.204.198.164/zago/squid/acl/suse101-por-palavra.txt
  wget  200.204.198.164/zago/squid/acl/direto.txt
  wget 200.204.198.164/zago/squid/acl/negapalavra.txt
  wget  200.204.198.164/zago/squid/acl/liberapalavra.txt
  mv squid.conf squid.conf-ori
  cp /etc/squid/suse101-por-palavra.txt /etc/squid/squid.conf
  rcsquid start

Com esta configuração acima, em todo acesso o Squid confere a lista de palavras proíbidas em /etc/squid/negapalavra.txt

Quando encontrar na URL qualquer palavra listada no arquivos acma, nega o acesso e exibe uma tela de aviso, tela esta que pode ser personalizada.

Como exemplo, a palavra sexy consta na lista e portanto os sites abaixo estão bloqueados, faça um teste, tente acessar estes sites;

http://www.sexy.com.br/
http://www.sexyhot.com.br/

Recebeu o aviso do proxy em lugar da página normal, acessou outros sites normalmente, então funcionou!

Edite o arquivo /etc/squid/negapalavra.txt, use seu editor preferido, tem que salvar em modo texto puro, não pode editar com programas do DOS/Windows.

Considere enjaular os usuários mais rebeldes, em lugar de bloquear palavras, pode criar um lista de sites que eles podem acessar, veja o tópico sobre controle por IP.

No log deve encontrar registros semelhantes a estes, observe o DENIED nas URL que contém sexy;

  1131305210.685      0 192.168.1.53 TCP_DENIED/403 1389 GET http://www.sexy.com.br/ - NONE/- text/html
  1131305224.845    808 192.168.1.53 TCP_MISS/200 1606 GET http://www.google.com.br/ - DIRECT/64.233.161.99 text/html
  1131305321.397      0 192.168.1.53 TCP_DENIED/403 1417 GET http://www.sexyhot.com.br/favicon.ico - NONE/- text/html

Na acl liberapalavra.txt consta as excessões, os sites que mesmo contendo a palavra negada em alguma parte da URL deverão ser liberados.

Controle de acesso pelo IP da estação - enjaular usuário

Nesta opção de liberar acesso conforme o IP da estação, tem seus prós e contras, como a liberação de acesso ocorre conforme o IP da estação, se usuário alterar IP por outro que tenha acesso ele navega com as permissões do outro IP, mas isto é questão para outro tópico, fixar IP por MAC e outros controles de rede, tirar direitos de alterações na estação e outras tecnicas...

A grande vantagem é enjaular o usuário para acessar somente os sites previamente definidos pelo administrador da rede, criar uma lista de sites que determinado IP pode acessar e negar o resto.

Pode criar varias listas de sites e varias listas de IP, assim funciona como grupos, onde determinado grupo de IP tem acesso a determinados sites.

Nesta configuração requer ACL contendo a lista de IP e sites associados a ela, pode criar diversas, para facilitar o entendimento, vamos considerar que varios IP deverão acessar somente sites de bancos, algo como um grupo de usuários que acessam somente bancos, outro grupo de usuários tem acesso a outra lista de sites, veja exemplo de dois grupos de sites, bancos e restritos, cada qual com seu IP amarrado a uma lista de sites que podem acessar, veja este exemplo;

  www.zago.eti.br/squid/acl/ip_restrito.txt
  www.zago.eti.br/zago/squid/acl/ip_restrito_sites.txt
  www.zago.eti.br/squid/acl/ip_bancos.txt
  www.zago.eti.br/squid/acl/ip_bancos_sites.txt

Estações com seu IP em ip_bancos.txt (192.168.1.190 e 192.168.1.143) acessam somente os sites listados em ip_bancos_sites.txt (www.bradesco.com.br e www.bb.com.br), pode se criar quantas ACL forem necessárias e personalizar a seu modo, este é um exemplo somente.

Também tem uma ACL para IP liberados, liberar geral para alguns IP, mesmo assim pode bloquear palavras indejadas como na configuração anterior por palavra.

Na troca de configuração pode ocorrer problemas, dependendo da configuração anterior acaba ocorrendo erros relacionados a processos e cache e dando mais trabalho, reinstalando automaticamente recria os arquivos de configuração, diretórios com permissões corretas, prefiro remover e reinstalar via smart, caso não tenha na sua instalação, pode remover e reinstalar via yast, apt ou outra ferramenta.

Os passos a seguir desinstala, remove a configuração anterior incluindo o cache e reinstala o Squid, caso queira manter copia de alguma configuração ou ACL, então faça copia antes de inciar o processo de copiar e colar as linhas abaixo.

  rcsquid stop 
  squid -k shutdown
  sleep 30
  mv /etc/squid/ /tmp/squid/
  smart remove squid -y
  rm -rf /etc/squid
  rm -rf /var/cache/squid
  rm -rf /var/log/squid/access.log
  smart install squid -y
  mv /etc/squid/squid.conf /etc/squid/original2-squid.conf
  #comando para importar este squid.conf no "vi" (veja cp.txt)
  #  :r !lynx -dump http://www.zago.eti.br/squid/acl/suse101-por-ip.txt
  cd /etc/squid
  wget 200.204.198.164/zago/squid/acl/suse101-por-ip.txt
  wget  200.204.198.164/zago/squid/acl/direto.txt
  wget 200.204.198.164/zago/squid/acl/negapalavra.txt
  wget  200.204.198.164/zago/squid/acl/liberapalavra.txt
  wget  200.204.198.164/zago/squid/acl/ip_liberados.txt
  wget  200.204.198.164/zago/squid/acl/ip_restrito.txt
  wget  200.204.198.164/zago/squid/acl/ip_restrito_sites.txt
  wget  200.204.198.164/zago/squid/acl/ip_bancos.txt
  wget  200.204.198.164/zago/squid/acl/ip_bancos_sites.txt
  cp /etc/squid/suse101-por-ip.txt /etc/squid/squid.conf
  rcsquid start

Prontinho, não ocorrendo erros na copia ou inicialização do Squid é sinal de que deu tudo certo, agora com seu editor preferido, edite os arquivos em /etc/squid para incluir o IP das estações nos arquivos correspondentes, tente fazer um teste com uma estação, antes configure no servidor acrescentando o IP da uma estação em ip_restrito.txt, recarregue o squid e tente a navegação na estação, utilize outro navegador, configure para acessar a net via este proxy e deverá acessar somente os sites listados em ip_restrito_sites.txt e direto.txt, qualquer outro site receberá a tela de aviso do Squid informando "Access Denied. ", a tradução desta mensagem e outras formas de aviso é assunto para outro tópico.

Outras indicações

Página sobre SUSE 10.1
http://www.zago.eti.br/distro/suse10.1-dicas.html

Página principal sobre Squid
http://www.zago.eti.br/squid/A-menu-squid.html

Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html