Pages

Saturday, May 27, 2006

Configuração Básica do Squid

Implementei um servidor proxy com o squid no meu computador.
Com o objetivo obter um melhor desempenho em algumas páginas e apreender a criar um filtro de conteúdo, para por exemplo, impedir o download de arquivos tipo .src.
Essa configuração foi feita apenas para um computador, ou seja, apenas o computador onde o squid está configurado precisa ter acesso ao proxy.
O arquivo é fruto de uma pequena pesquisa na internet e do livro "Redes e Servidores Linux, Guia Prático" de Carlos Morimoto. Além de uma pequena ajuda da Revista Linux Magazine número 16.

Segue abaixo o arquivo configurado.

# Arquivo de configuração do Squid /etc/squid/squid.conf
# 22 de maio de 2006
# J. F. Mitre
# -----------------------------------
# Define a porta do squid
http_port 3128

# Hostname da máquina.
# RECOMENDAÇÃO DO SQUID:
# Não especificar se não obtiver mensagens de erro
# visible_hostname $HOSTNAME

# Opções recomendadas pelos Squid

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache QUERY

# Especifica o tamanho da memória RAM reservada ao squid
cache_mem 32 MB
# Especifica o tamanho máximo do objeto residente na
# memória RAM reservada ao squid
maximum_object_size_in_memory 64 KB
# Especifica o tamanho máximo do objeto residente no HD
maximum_object_size 10 MB
# Especifica o tamanho mínimo do objeto residente no HD
minimum_object_size 0 MB
# A percentagem na qual começa a o esvaziamento do cache
cache_swap_low 90
# A limite do consumo do cache
cache_swap_high 95
# Especificações do cache em disco
# cache_dir tipo diretorio tamanho__MB num_de_dir num_de_subdir
cache_dir ufs /var/spool/squid 128 16 256
# Especifica o log do sistema
# É conveniente não modificar o path
cache_access_log /var/log/squid/access.log

# Padrão de atualização do cache
# Define que o arquivo será verificado sempre que tiver
# mais de 5 minutos de criado; e será modificado se tiver
# mais de 2 dias (2280) no HD.
# As três linhas precisam ser escritas em conjunto.
refresh_pattern ^ftp: 5 20% 2280
refresh_pattern ^gopher: 5 0% 2280
refresh_pattern . 5 20% 2280

# -----------------------------------------
# Regras ACL
# -----------------------------------------

# Libera o squid para ser utilizado por todos os ips
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object

# Regra localhost
# especifica que o localhost tem acesso ao proxy
acl localhost src 127.0.0.1/255.255.255.255

# Regra para a rede
# especifica quais ips da rede possuiram acesso ao proxy
# acl redelocal src 172.0.0.0/255.255.0.0


# Especificação das portas seguras
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, 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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

# Configuração de permissão de acesso
# Especificando o acesso a urls com certas palavras no dominio
acl palavraschave dstdom_regex -i /etc/squid/palavras.squid"
# Especificando o acesso a certos dominios
acl dominios dstdomain -i "/etc/squid/dominios.squid"
# Especificando o acesso a certos tipos de arquivo
acl arquivos url_regex -i "/etc/squid/arquivos.squid"

# -----------------------------------------
# Regras http_access
# -----------------------------------------


# Configuração da permissão de acesso
http_access deny dominios
http_access deny palavraschave
http_access deny arquivos

# regras básicas para o gerenciamento do proxy
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
# Proibe o acesso fora das portas listadas
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Permite o acesso do localhost ao proxy
http_access allow localhost
# http_access allow redelocal

# Nega o acesso a qualquer ip que não tenha
# sido listado como permitido pelas regras
# anteriores

http_access deny all

# Proxy transparente
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Notem que algumas configurações precisam ser modificadas conforme o objetivo da máquina, como o fato da rede local ter ou não acesso ao proxy. Outro tipo de modificação são os caminhos dados aos arquivos que contém as palavras, domínios e extensões proibidas.
É evidente que cada usuário/rede terá objetivos distintos. O meu era desempenho de conexão, não tenho uma rede, e portanto, não preciso me dedicar a cuidar da hora de acesso de cada usuário nem restringir o volume que cada máquina pode "sugar" da banda de rede, por exemplo.

[update]
Na versão 2.6 do squid (que acompanha o Ubuntu Edgy) possuí linhas diferentes da apresentada aqui para definir um proxy transparente. O Júlio Santos Monteiro escreveu um simples e excelente post sobre essas modificações.

Basicamente consiste em remover as 4 últimas linhas do arquivo acima e no lugar escrever:

http_port 3128 transparent vhost
[/update]

Technorati Tags:

6 comments:

  1. Gedersom (MT)12/9/06 22:35

    Ainda sou inexperiente, mas me deram a responsabilidade de configurar um firewall linux (ubuntu) recheado de regras. Depois de trocentas páginas pesquizadas sem sucesso e vários dias sob a maior pressão eis que surge o seu blog... Claro... Objetivo... Eficaz e Profissional!

    Graças ao seu artigo sobre firewall em conjunto com este aqui sobre squid e mais algumas coisinhas que eu já sabia, consegui montar o dito cujo

    É graças a pessoas como você que que não tem medo nem preguiça de compartilhar seu conhecimento... que as coisas "podem dar certo"

    Parabéns pelo nível dos artigos e pela iniciativa de "fazer acontecer".

    ReplyDelete
  2. Puxa, obrigado.
    São comentários iguais a esses que nos fazem continuar a escrever.
    Até breve.

    ReplyDelete
  3. E ai rapaz? Meu nome é Henrique sou iniciante em squid, passei quase o dia procurando algo bem elaborado, muito bom o seu blog, valeu mesmo

    Se tiver algum material sobre o Dansguardian agradecemos

    Abraços
    Henrique

    ReplyDelete
  4. Henrique,
    primeiro obrigado pelos elogios.

    Quanto ao Dansguardian, eu já pensei em escrever várias vezes sobre ele, mas nunca consegui ganhar a fluência necessária para colocar as explicações de forma suficientemente clara. Então, eu não me arrisco ainda nesse campo. De qualquer forma, se um dia isso mudar, "o blog será o primeiro a saber"...

    []'s

    ReplyDelete
  5. Boa noite, eu tenho um centos 6 onde já foi instalado o webmin e atraves dele instalei o squid proxy, qual o nome do arquivo .conf e onde ele se localiza?
    desde já agradeço.

    ReplyDelete
  6. Rogério, não sei te responder, mas a internet diz que é /etc/squid/squid.conf
    Eu até uso esse sistema, mas não uso mais o squid.

    ReplyDelete