Tutorial de Squid - CentOS 6.5

Publicado por Alvaro Alves em 11/06/2014

[ Hits: 20.171 ]

 


Tutorial de Squid - CentOS 6.5



Neste tutorial, iremos passar as dicas iniciais para a configuração de um proxy em nossa rede ( GNU/Linux) usando CentOS 6.5. Esperamos ajudar aos técnicos, que têm um pouco de preguiça de ler aqueles grandes tutoriais e ir diretamente ao ponto que interessa!

Sistema operacional utilizado: CentOS 6.5.

O Squid (proxy) é uma ferramenta muito poderosa utilizada para controle de navegação, entre outros. Com ela, é possível fazer cache de navegação onde o usuário chega a economizar até 30% de banda em uma empresa. Este controle de navegação pode ser feito de diversas maneiras e serão descritas neste material.

Primeiramente, precisamos instalar o mesmo, segue comandos de instalação no CentOS:

# yum install squid

Após instalado o Squid, vamos renomear o arquivo conf para termos um backup do mesmo e iremos limpar os comentários e linhas em vazio, com os comandos abaixo:

# mv /etc/squid/squid.conf /etc/squid/squid.ori
# cat /etc/squid/squid.ori | egrep -vi '^#|^$' > /etc/squid/squid.conf


Agora, já possuímos o arquivo /etc/squid/squid.conf limpo. Vamos ao funcionamento do Squid.

Tudo é definido por ACL, segue primeiro exemplo básico onde teremos um nome de ACL com seu respectivo valor:
  • acl nome_da_acl syntax valor

Exemplo:
  • acl marcelo src 192.168.0.1
  • acl rede src 192.168.0.0/24
  • acl TI src 192.168.0.1 192.168.0.2

Onde:
  • acl = como se fosse o comando.
  • marcelo = nome da ACL.
  • src = argumento para o comando ACL.
  • 192.168.0.1 = este é o valor que o nome da ACL terá.

Vamos aos tipos de ACL mais utilizados por administradores, sendo eles:
  • src :: significa origem, utilizado para regras que queiram ter um controle sobre uma origem.
  • dst :: significa destino, utilizado para regras que queiram ter um controle sobre um destino.
  • url_regex -i :: significa expressão regular, pode ser um site, IP, somente um nome etc.

Vamos aos exemplos:

acl ip_origem src 192.168.0.20
acl ip_destino dst 200.160.2.3
acl expressão_regular url_regex -i www.mundoopen.com.br mundoopen.com.br mundoopen porno sexo

Estas são as principais ACLs utilizadas no Squid. Após a definição das ACLs, precisamos definir o que serão feitas com elas e é aí que entra a sintaxe http_access, que pode ter como ação tanto allow (permitir), como deny (negar).

Seguem alguns exemplos:

acl marcelo src 192.168.0.20
http_access allow marcelo

Neste caso acima, liberamos o IP 192.168.0.20 totalmente para navegação.

acl marcelo src 192.168.0.20
acl sites_marcelo .mundoopen. .uol. .terra.
http_access allow marcelo sites_marcelo
http_access deny all

No caso acima, estamos liberando o IP 192.168.0.20 somente para os sites contidos em sites_marcelo e após isso, estamos bloqueando tudo.

Quando quisermos definir o que será feito com a ACL, utilizamos a sintaxe http_access "valor" acl, onde valor pode ser allow e deny. E acl, é o nome de uma ACL que tem que estar criada anteriormente.

Segue algumas explicações sobre o conf e depois mais exemplos de configuração:
  • 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. Poderiam ser os protocolos FTP ou HTTP. Se você não conhece o protocolo cache_object, não se preocupe é um protocolo do Squid que apenas retorna informação para o servidor de como o cache está configurado, ou como ele está rodando.
  • acl localhost src 127.0.0.1/32 :: esta ACL está definindo o próprio servidor localhost como origem.
  • acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 :: esta ACL está definindo o próprio servidor localhost como destino.
  • acl localnet src 10.0.0.0/8 # RFC1918 possible internal network :: define o rede 10.0.0.0/8 com o nome localnet.
  • acl localnet src 172.16.0.0/12 # RFC1918 possible internal network :: adiciona a rede 172.16.0.0/12 ao nome localnet.
  • acl localnet src 192.168.0.0/16 # RFC1918 possible internal network :: adiciona a rede 192.168.0.0/16 ao nome localnet.
  • acl SSL_ports port 443 :: aqui temos um tipo de ACL que ainda não comentamos que é a "port", esta é definida para declararmos regras utilizando portas de acesso.
  • acl Safe_ports port 80 # http :: mesma coisa, porém, colocou outro nome para identificar melhor.
  • acl Safe_ports port 21 # ftp :: adicionou a porta 21 à ACL Safe_ports.
  • acl Safe_ports port 443 # https :: adicionou a porta 443 à ACL Safe_ports.
  • acl Safe_ports port 70 # gopher :: adicionou a porta 70 à ACL Safe_ports.
  • acl Safe_ports port 210 # wais :: adicionou a porta 210 à ACL Safe_ports.
  • acl Safe_ports port 1025-65535 # unregistered ports :: adicionou as portas 1025-65535 à ACL Safe_ports.
  • acl Safe_ports port 280 # http-mgmt :: adicionou a porta 280 à ACL Safe_ports.
  • acl Safe_ports port 488 # gss-http :: adicionou a porta 488 à ACL Safe_ports.
  • acl Safe_ports port 591 # filemaker :: adicionou a porta 591 à ACL Safe_ports.
  • acl Safe_ports port 777 # multiling http :: adicionou a porta 777 à ACL Safe_ports.
  • acl CONNECT method CONNECT :: esta ACL contém o método de acesso aos arquivos na rede (GET/POST). O método CONNECT vale tanto por GET como por POST.

A partir de agora, serão as ações tomadas em cima das ACLs (permitir ou negar):
  • http_access allow manager localhost :: permite que a ACL manager criada lá em cima seja utilizada somente pela outra ACL localhost.
  • http_access deny manager :: bloqueia a ACL manager para toda rede.
  • http_access deny !Safe_ports :: bloqueia qualquer tipo de acesso a portas que não sejam as definidas na ACL Safe_ports.
  • http_access deny CONNECT !SSL_ports :: bloqueia qualquer tipo de método de acesso definido na ACL CONNECT que não sejam para portas seguras que estão na ACL SSL_ports.
  • http_access allow localnet :: libera totalmente a ACL localnet (no caso todas as redes lá em cima).
  • http_access allow localhost :: libera totalmente a ACL localhost.
  • http_access deny all :: bloqueia tudo que não estiver definido em alguma ACL neste arquivo.
  • http_port 3128 :: define a porta utilizada pelo Squid (no caso default, 3128).
  • coredump_dir /var/spool/squid :: diretório de spool do Squid (onde armazenará o cache).

Com isso, todas as linhas do conf foram comentadas. Agora, vamos às conclusões sobre como esse conf vem por padrão.

Por padrão, o conf vem liberando acesso total a todas as redes privadas conhecidas (10.0.0.0 172.16.0.0 192.168.0.0) e também para o próprio servidor localhost.

No final do arquivo, existe uma regra que bloqueia tudo que for diferente a estas redes:
  • A porta configurada é a 3120.
  • O diretório de spool do Squid que vem por default é /var/spool/squid.
  • Os acessos permitidos são as portas mais conhecidas: 80, 21, 443 etc.

Creio que, com a leitura de todo o conteúdo acima, já dá para ter uma boa ideia sobre como funciona a configuração do Squid.

Dicas gerais

Segue mais alguns exemplos que é possível fazer no Squid, apenas para que os leitores fiquem um pouco mais craques do assunto.

É possível criar ACLs e, ao invés de colocarmos o conteúdo diretamente na linha do Squid, criamos um arquivo e dentro deste, colocamos o conteúdo um após o outro, exemplo:

acl IP_DIRETORES src /etc/squid/IP_DIRETORES
http_access allow IP_DIRETORES

Onde, dentro do arquivo IP_DIRETORES, está o conteúdo abaixo:

10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5

É possível fazer bloqueio de tudo, "exceto" algum conteúdo utilizando o simbolo "!". Segue exemplo:
  • acl alvaro src 192.168.0.1
  • acl sites_alvaro url_regex -i www.mundoopen.com.br www.uol.com.br www.terra.com.br
  • http_access deny alvaro !sites_alvaro (Repare que está sendo feito o bloqueio de tudo para a ACL alvaro menos os sites contidos na outra ACL chamada sites_alvaro)

É possível utilizar alguns caracteres chave para fazer um bloqueio geral que contenha determinado domínio, exemplo:

acl dominio_bloqueado url_regex -i .uol. .terra.
http_access deny dominio_bloqueado

Neste caso acima, quando utilizamos o "." entre a palavra, significa a mesma coisa que estivesse bloqueando qualquer domínio que tenha no meio "uol" ou "terra", exemplo:
  • www.uol.com.br
  • batepapo.uol.com.br
  • jogos.uol.com.br
  • www.uol.net.br
  • www.uol.org.br
  • Qualquer coisa que tenha .uol. ou .terra.

Utilizamos isso, quando queremos realmente bloquear tudo referente à um determinado domínio.

Bloqueio utilizando palavra, exemplo:

acl dominio_bloqueado url_regex -i uol terra
http_access deny dominio_bloqueado

Neste caso acima, quando bloqueamos um nome sem o "." antes ou depois, estamos bloqueando TUDO que contenha esta parte da palavra no domínio, exemplo:
  • uol.com.br
  • uolmania.com.br
  • logicauol.com.br
  • mandaterra.com.br
  • terramania.com.br

Repare que está sendo bloqueado tudo que contenha a palavra uol ou terra e não os domínios propriamente ditos, precisamos tomar cuidado com isso.

Após cada alteração, podemos utilizar o comando service squid reload para que tenham efeito.

Conclusão

Bom pessoal, com estes exemplos, já podemos começar a configurar um proxy para início de estudos, porém, há mais algumas configurações que são possíveis utilizando o Squid.

E são muito interessantes, como tcp_outgoing_access, proxy transparente e autenticação de usuário, fora a ferramenta de geração de gráficos de acesso, chamada Sarg, porém, em outro momento iremos complementar com todos estes assuntos.

Veja: Servidor DHCP Linux

Esperamos ter ajudado.
Equipe Mundo Open

Outras dicas deste autor

Estrutura de diretórios do GNU/Linux

Os usuários e permissões no sistema GNU/Linux

Syslog - Gerenciamento de logs do sistema

Arquivando e comprimindo arquivos

Gerenciamento de processos no GNU/Linux

Leitura recomendada

Sinara Duarte e o Software Livre na Educação

Ubuntu (+ restricted-extras) x Linux Mint

O Acesso é livre e o Domínio é Público

Lixeira no Samba

tesseract - Reconhecimento de caracteres em imagens

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts