Squid

28Jun07

E começando a postar sobre minha impressões sobre os cursos que faço no Comunidade.CDTC: Squid.

Estas serão anotações durante o curso qualquer dúvida estou a disposição para esclarecer.

squid…

Instalação:

Dependências:

adduser
coreutils
debconf (>= 1.2.9)
libc6 (>= 2.3.2.ds1-21) [not alpha, ia64]
libc6.1 (>= 2.3.2.ds1-21) [alpha, ia64]
libgcc1 (>= 1:3.4.1-3) [mips, mipsel]
libldap2 (>= 2.1.17-1)
libpam0g (>= 0.76)
logrotate (>= 3.5.4-1)
netbase
squid-common (= 2.5.9-10sarge2)

Pacotes Sugeridos:

logcheck-database
resolvconf (>= 0.40)
smbclient
squid-cgi
squidclient
winbind (>= 3.0.2)

APT

debian:~# apt-get update
debian:~# apt-get install squid

Configuração:

debian:~# updatedb
debian:~# locate squid.conf

Limpando o arquivo de configuração.

debian:~# cd /etc/squid
debian:/etc/squid# cp squid.conf squid_backup.conf
debian:/etc/squid# egrep −v “^#|^$” squid_backup.conf > squid.conf

Proxy Transparente

A primeira parte para configurar o Squid é definir o domínio da rede interna. Se a rede for, por exemplo, uma rede 176.16.0.0/24, então devemos definir a acl para a rede interna:

acl rede_interna src 176.16.0.0/24
http_access alow rede_interna

Obs.: acl (Access Control List ou lista de controle de acesso) é uma lista que define quem tem direito de acesso ou não a alguma coisa. Por exemplo, como definidos acima a acl rede_interna, todos que estiverem sob esse domínio terão ou não a permissão para acessar algum recurso.

Adicione agora as seguintes linhas ao arquivo squid.conf.

#Nessa linha dizemos ao Squid qual o site que ele acelerará
http_port 80 defaultsite=seu.site.principal
#Nessa linha dizemos ao Squid onde encontrar o site real
cache_peer ip.do.site 80 0 no-query originserver

Agora adicione antes ainda de rede interna acl:

acl all 0.0.0.0/0.0.0.0

Isso fará com algum acesso seja negado ou permitido à todos da rede.

Criando a lista de sites bloqueados

Crie o diretório bloqueados dentro de /etc/squid, nesse diretório ficarão as listas com as palavras, ips ou domínios a serem bloqueados.

debian:~# mkdir /etc/squid/bloqueados
debian:~# touch /etc/squid/bloqueados/block.txt
debian:~# touch /etc/squid/bloqueados/unblock.txt

Agora adicione as linhas a seguir logo após as primeiras acls no squid.conf.

acl blockedsites url_regex −i “/etc/squid/bloqueados/block.txt”
acl unblockedsites url_regex −i “/etc/squid/bloqueados/unblock.txt”

Criando acls

Uma parte muito interessante na criação de acls é que podemos criar diferentes acls, de acordo com o horário, data, ip, MAC e domínio.

Caso seja necessário bloquear o site do Youtube em uma empresa apenas no horário de expediente e para todos os empregados, exceto o presidente da empresa e o administrador da rede, teríamos que definir algumas acls.

Para definir uma acl para o presidente da empresa, poderíamos definí-la pelo MAC adress da placa de rede utilizada no computador do presidente.

acl presidente arp XX:XX:XX:XX:XX:XX

onde os X devem ser substituidos pelos valores do MAC.

Agora definimos uma acl para o administrador da rede, vamos fazê-lo utilizando o endereço ip.

acl admin src x.x.x.x

onde os x devem ser substituidos pelos valores do ip.

Vamos criar uma acl para o domínio do Youtube.

acl YOUTUBE dstdomain youtube.com

Por último, vamos definir a acl expediente para o horário de expediente e também final de semana.

acl expediente time MTWHF 8:0000−18:00
acl final_de_semana time SA 0:0000−24:00

Agora vamos definir os direitos de acesso.

http_access allow YOUTUBE admin presidente
http_access deny YOUTUBE all expediente
http_access allow YOUTUBE all final_de_semana

Bloqueando portas

acl SSL_ports port 443 # https
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
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

Depois de definir acls com as portas que são consideradas seguras, basta bloquear todas as outras.

http_access deny !Safe_ports

Configurando o cache

cache_mem 256 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
maximum_object_size_in_memory 20 KB
cache_dir aufs /var/cache/squid 4096 16 256
cache_access_log /var/log/squid/access.log

Reiniciando o Squid

debian:~# /etc/init/d/squid start

Proxy Reverso
Para configurar o Squid como proxy reverso, basta adicionar as seguintes opções no squid.conf.

http_port 80
httpd_accel_host 172.16.0.1
httpd_accel_port 80
httpd_accel_single_host on
httpd_accel_uses_host_header off

Limitação de banda e limitação de conexões por usuários
Limitação de banda

acl controle1 url_regex −i 172.16.0
acl controle2 url_regex −i ftp .exe .mp3 .tar.gz .gz .zip .rar .avi .mpeg .mpg .qt .ram .rm .is
delay_pools 2
delay_class 1 2
delay_parameters 1 −1//−1 −1//−1
delay_access 1 allow controle1
delay_class 2 2
delay_access 2 allow rede_interna
delay_access 2 allow controle2

Limitação de conexões

acl CONEXOES maxconn 10
http_access deny CONEXOES rede_interna

Obs.: para utilizar a limitação de banda é necessário que o Squid tenha sido compilado com a opção -enable-delay-pools.

Autenticação de usuários

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/
auth_param basic children 5
auth_param basic realm Digite seu Login

Criar um arquivo com as senhas.

debian:~# touch /etc/squid/passwd

Para inserir um novo usuário digite:

debian:~# htpasswd /etc/squid/passwd NOME_DO_USUARIO

Adicione também a seguinte acl.

acl rede_interna proxy_auth REQUIRED