29.4. O arquivo de configuração /etc/squid/squid.conf

Todas as definições do servidor proxy do Squid são feitas no arquivo /etc/squid/squid.conf . Para iniciar o Squid pela primeira vez, não são necessárias mudanças neste arquivo, mas clientes externos terão acesso negado inicialmente. O proxy é disponível para localhost. A porta padrão é 3128. O arquivo de configuração pré-instalado /etc/squid/squid.conf fornece informações detalhadas sobre as opções e vários exemplos. Praticamente todas as entradas começam com # (as linhas são comentadas) e as especificações relevantes podem ser encontradas no fim da linha. Os valores dados praticamente sempre se correlacionam com os valores padrão, portanto remover os sinais de comentário sem mudar nenhum dos parâmetros na realidade tem pouco efeito na maioria dos casos. Se possível, deixe o exemplo como é e insira as opções junto com os parâmetros modificados na linha abaixo. Desta maneira, os valores padrão podem ser facilmente recuperados e comparados com as mudanças.

[Tip]Adaptando o arquivo de configuração após uma atualização

Se você tiver atualizado de uma versão anterior do Squid, é recomendável editar o novo /etc/squid/squid.conf e aplicar somente as mudanças feitas no arquivo anterior. Se tentar usar o antigo squid.conf, há risco da configuração deixar de funcionar, porque as opções às vezes são modificadas e novas mudanças adicionadas.

29.4.1. Opções de configuração geral (seleção)

http_port 3128

Esta é a porta em que o Squid ouve as solicitações do cliente. A porta padrão é 3128, mas 8080 também é comum. Se quiser, especifique vários números de porta, separados por espaços em branco.

cache_peer hostname tipo proxy-port icp-port

Neste caso, digite um proxy pai, por exemplo, se quiser usar o proxy do seu ISP. Como hostname, digite o nome e o endereço IP do proxy a usar e, como tipo, digite pai. Para proxy-port, digite o número de porta que também é dado pelo operador do pai para uso no browser, normalmente 8080. Defina a icp-port para 7 ou 0 se a porta ICP do pai não for conhecida e seu uso for irrelevante para o provedor. Além disso, default e no-query podem ser especificados após os números de porta para proibir o uso do protocolo ICP. O Squid comporta-se então como um browser normal no que diz respeito ao proxy do provedor.

cache_mem 8 MB

Esta entrada define a quantidade de memória que o Squid pode usar para respostas muito populares. O padrão é 8 MB. Isto não especifica o uso de memória do Squid e poderá ser excedido.

cache_dir ufs /var/cache/squid/ 100 16 256

A entrada cache_dir define o diretório em que todos os objetos são armazenados no disco. Os números ao final indicam o espaço máximo de disco no MB a usar e o número de diretórios no primeiro e no segundo nível. O parâmetro ufs deve ser deixado sozinho. O padrão é 100 MB de espaço de disco ocupado no diretório /var/cache/squid e a criação de 16 subdiretórios dentro dele, cada um com mais 256 subdiretórios. Ao especificar o espaço de disco a usar, deixe espaço de disco de reserva suficiente. Os valores de um mínimo de 50% até um máximo de 80% do espaço de disco disponível são o ideal aqui. Os dois últimos números para os diretórios só devem ser aumentados com cuidado, porque diretórios demais também pode causar problemas de desempenho. Se você tiver vários discos que compartilhem o cache, digite várias linhas cache_dir.

cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log

Estas três entradas especificam os caminhos em que o Squid registra todas as suas ações. Normalmente, nada é mudado aqui. Se o Squid estiver passado por uma sobrecarga de uso pesado, pode fazer sentido distribuir o cache e os arquivos de registro em vários discos.

emulate_httpd_log off

Se a entrada for definida como on, obtenha arquivos de registro legíveis. Entretanto, alguns programas de avaliação não podem interpretar isto.

client_netmask 255.255.255.255

Com esta entrada, faça mascaramento dos endereços IP dos clientes nos arquivos de registro. O último dígito do endereço IP é definido como zero se você digitar 255.255.255.0 aqui. Você pode proteger a privacidade dos seus clientes desta maneira.

ftp_user Squid@

Com isto, defina a senha que o Squid deve usar para o login do FTP anônimo. Faz sentido especificar um endereço de e-mail válido aqui, porque alguns servidores de FTP os verificam para fins de validade.

cache_mgr webmaster

Um endereço de e-mail ao qual o Squid envia uma mensagem se ele falhar inesperadamente. O padrão é webmaster.

logfile_rotate 0

Se você executar squid -k rotate, o Squid poderá rotacionar arquivos de registro protegidos. Os arquivos são numerados neste processo e, após alcançarem o valor especificado, o arquivo mais antigo é sobregravado. O valor padrão é 0 porque os arquivos de registro de arquivamento e apagamento no SUSE Linux são realizados por uma tarefa cron definida no arquivo de configuração /etc/logrotate/squid.

append_domain <domain>

Com append_domain, especifique que domínio anexar automaticamente quando não for dado nenhum. Normalmente, o seu próprio domínio é digitado aqui, portanto digitar www no browser dá acesso ao seu próprio servidor da Web.

forwarded_for on

Se você definir a entrada como off, o Squid removerá o endereço IP e o nome do sistema do cliente das solicitações HTTP. Caso contrário, ele adicionará uma linha ao cabeçalho como

X-Forwarded-For: 192.168.0.0
negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Normalmente, não é necessário mudar esses valores. Porém, se você tiver uma conexão discada, é possível que às vezes a Internet não esteja acessível. O Squid detecta as solicitações que falharam e não emite novas solicitações, embora a conexão com a Internet tenha sido restabelecida. Neste caso, mude os minutos para segundos e, após você clicar em Recarregar no browser, o processo de discagem deve continuar em alguns segundos.

never_direct allow acl_name

Para impedir que o Squid faça solicitações diretamente da Internet, use o comando acima para forçar conexão com outro proxy. É necessário que ele tenha sido digitado anteriormente em cache_peer. Se all estiver especificado como acl_name, force todas as solicitações para que sejam encaminhadas diretamente ao pai. Isto pode ser necessário, por exemplo, se você estiver usando um provedor que estipula estritamente o uso de seus proxies ou nega acesso direto do seu firewall à Internet.

29.4.2. Opções de controles de acesso

O Squid fornece um sistema detalhado para controle do acesso ao proxy. Com a implementação de ACLs, ele pode ser configurado de forma fácil e abrangente. Isto envolve listas com regras que são processadas em seqüência. As ACLs devem ser definidas antes de serem usadas. Algumas ACLs padrão, como all e localhost, já existem. Entretanto, a simples definição de uma ACL não significa que ela será realmente aplicada. Isto só acontece em conjunto com regras http_access.

acl <acl_name> <type> <data>

Uma ACL requer pelo menos três especificações para defini-la. O nome <acl_name> pode ser escolhido arbitrariamente. Para <type>, selecione entre várias opções diferentes, que podem ser encontradas na seção ACCESS CONTROLS no arquivo /etc/squid/squid.conf . A especificação para <dados> depende do tipo de cada ACL e só pode ser lida em um arquivo, por exemplo, por meio de nomes de host, endereços IP ou URLs. A seguir, alguns exemplos simples:

acl mysurfers srcdomain .my-domain.com
acl teachers src 192.168.1.0/255.255.255.0
acl students src 192.168.7.0-192.168.9.0/255.255.255.0
acl lunch time MTWHF 12:00-15:00
http_access allow <acl_name>

http_access define quem tem permissão de usar o proxy e quem pode acessar o quê na Internet. Para isto, as ACLs devem ser fornecidas. localhost e all já foram definidos acima, o que pode negar ou permitir acesso com deny ou allow. Uma lista com qualquer número de entradas http_access pode ser criada, processada de cima para baixo e, dependendo do que ocorrer primeiro, o acesso é permitido ou negado ao respectivo URL. A última entrada deve ser sempre http_access deny all. No exemplo a seguir, o localhost tem livre acesso a tudo enquanto todos os outros hosts têm acesso completamente negado.

http_access allow localhost
http_access deny all

Em outro exemplo com estas regras, o grupo teachers (professores) sempre tem acesso à Internet. O grupo students (alunos) só tem acesso de segunda-feira a sexta-feira na hora do almoço.

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

Para fins de legibilidade, a lista com as entradas http_access só pode ser digitada na posição designada no arquivo /etc/squid/squid.conf. Isto é, entre o texto

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR
# CLIENTS

e o último

http_access deny all
redirect_program /usr/bin/squidGuard

Com esta opção, especifique um redirecionador como squidGuard, que permite bloquear URLs indesejados. O acesso de vários grupos de usuários à Internet pode ser controlado individualmente com a ajuda da autenticação de proxy e das ACLs adequadas. O squidGuard é um pacote separado que pode ser instalado e configurado.

auth_param basic program /usr/sbin/pam_auth

Se for necessário autenticar usuários no proxy, defina um programa correspondente, como pam_auth. Ao acessar pam_auth pela primeira vez, o usuário vê uma janela de login na qual deve digitar o nome de usuário e senha. Além disso, ainda é necessário usar uma ACL, de forma que apenas clientes com login válido podem usar a Internet:

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

REQUIRED após proxy_auth pode ser substituído por uma lista de nomes de usuários permitidos ou pelo caminho para essa lista.

ident_lookup_access allow <acl_name>

Com isto, execute uma solicitação de identificação para todos os clientes definidos via ACL para encontrar a identidade de cada usuário. Se você aplicar all ao <acl_name>, isto será válido para todos os clientes. Além disso, um daemon de identificação deve estar em execução em todos os clientes. No caso do Linux, instale o pacote pidentd para este fim. No caso do Microsoft Windows, há um software grátis para download na Internet. Para garantir que apenas clientes com pesquisa de identificação bem-sucedida sejam permitidos, defina uma ACL correspondente aqui:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Aqui, substitua também REQUIRED por uma lista de nomes de usuários permitidos. O uso de ident pode tornar o tempo de acesso um pouco lento, porque pesquisas de identificação são repetidas para cada solicitação.