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_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:
-
http_access allow manager localhost
Dá acesso ao protocolo cache_object apenas para o
próprio servidor (localhost).
-
http_access deny manager
Nega o acesso ao protocolo cache_object para qualquer outra
máquina.
-
http_access deny !Safe_ports
Nega o acesso a qualquer outra porta além das definidas
na acl Safe_ports.
-
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:
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_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 -> -> -> , 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:
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.