Instalando Squid a partir do código fonte


Introdução, pré-requisitos e obtendo o Squid

Existem centenas de tutorias pela internet ensinando como instalar e/ou configurar o Squid, porém a maioria ensina como obtê-lo a partir dos repositórios das distribuições mais usadas. No entanto, em alguns momentos nos deparamos com a necessidade de algumas funções mais específicas do Squid e eventualmente descobrimos que a versão pré-compilada obtida através dos repositórios não vem com aquela opção habilitada durante a compilação. A saída acaba sendo recompilar o Squid na mão, o que pode acabar se tornando uma tarefa meio árdua para iniciantes.

Compilando o Squid

Extraia o arquivo com o código fonte e entre no diretório extraído pelo terminal. O comando:

# ./configure --help

Mostra todos os parâmetros aceitos para a compilação. Se você procura por uma funcionalidade muito específica do Squid, procure aqui sobre como habilitá-la. Anote em um local todos os parâmetros desejados. No meu caso estou utilizando os seguintes parâmetros:

# ./configure --prefix=/usr --enable-shared --enable-icmp --enable-delay-pools --enable-sll --enable-linux-netfilter --enable-auth=basic --enable-basic-auth-helpers=NCSA,LDAP,SMB

Onde:

  • –prefix=/usr = indica o local onde o Squid será instalado. Com isso o arquivo de configuração estará em /usr/etc/squid.conf. De acordo com o FHS (Filesystem Hierarchy Standard), que determina os padrões para sistemas Unix, aplicativos que não são de uso exclusivo do sistema devem ir neste local, portanto seguirei a norma. ;p
  • –enable-shared = habilita bibliotecas compartilhadas
  • –enable-icmp = habilita suporte a icmp
  • –enable-delay-pools = habilita os delay pools, que servem para controle de banda da internet
  • –enable-ssl = habilita suporte a ssl
  • –enable-linux-netfilter = habilita suporte ao proxy transparente com o firewall do Linux
  • –enable-auth=basic = habilita suporte a autenticações
  • –enable-basic-auth-helpers=NCSA,LDAP,SMB = determina quais os métodos de autenticação estarão disponíveis.

Suas necessidades podem exigir mais parâmetros ou menos, mas a nível de aprendizado estes já são o suficiente.

O script de configuração demora apenas alguns segundos. Caso alguma dependência para a compilação esteja faltando no sistema, os erros aparecerão aqui, portanto leia as últimas linhas para se certificar de que tudo ocorreu como se espera e, em caso de problemas, as dependências faltantes estarão listadas. Ao terminar execute o comando “make” para efetivamente compilar o código.

O make demora bem mais. Ao terminar instale com o comando “make install”. Este último sempre deve ser executado como root.

Como dito anteriormente, o arquivo de configuração do Squid estará em /usr/etc/squid.conf. Este é o arquivo “padrão” e possui uma descrição detalhada sobre todas as opções do Squid. Renomeie o squid.conf para squid.conf.old ou algo assim e crie um novo squid.conf com seu editor favorito. No meu caso gosto do Vim:

# mv /usr/etc/squid.conf /usr/etc/squid.conf.old
# vim /usr/etc/squid.conf

Agora com um novo arquivo em branco podemos configurar o Squid.

Configurando o Squid

Para a configuração realmente não existe uma receita mágica que funcione para todos os ambientes. Cada um criará seu arquivo de acordo com as necessidades. Você pode querer exigir autenticação dos usuários ou não, ou controlar a banda disponível, restringir o uso em determinados horários etc.

Não cobrirei aqui a parte da configuração de forma geral. Como o título do artigo diz, viso apenas a instalação, mas alguns parâmetros se fazem necessários no arquivo do squid.conf.

O primeiro parâmetro necessário é o “cache_effective_user” que diz sobre qual usuário o Squid será executado. Este parâmetro é importante, pois ao executar o Squid como root, seus subprocessos são executados sob o usuário especificado. Se fosse encontrada uma falha grave na segurança do Squid, um usuário mal intencionado poderia obter privilégios administrativos. Coloque algo como:

cache_effective_user squid

que significa que o Squid rodará como o usuário squid. Obviamente teremos que criar este usuário posteriormente. Caso esta linha não seja inserida, o Squid usa por padrão o usuário “nobody”. Se ele não existir em seu sistema você terá problemas para criar os diretórios de cache. Portanto aconselho criar o usuário Squid para evitar dores de cabeça.

A seguir é necessário especificar o arquivo de log do Squid e o diretório de cache. Isso é feito com os parâmetros:

cache_access_log /usr/var/logs/access.log
cache_dir /usr/var/cache 2048 16 256

Obviamente o arquivo de log e o diretório de cache podem estar em qualquer localização, esta que citei é o padrão do Squid e gosto de usá-la. Mude caso deseje. Na segunda linha, o 2048 determina o tamanho do cache em MB e o 16 e 256 determinam quantos diretórios e quantos subdiretórios serão criados para o cache.

A seguir vai o parâmetro que coloca as páginas de erro do Squid em português, caso não queira que elas fiquem na linguagem padrão que é o inglês:

error_directory /usr/share/errors/Portuguese

Apenas lembrando que se você instalou o Squid em outro diretório diferente de /usr, este diretório de erros também estará em outro lugar.

Um exemplo de arquivo de configuração básico mas funcional, com estes parâmetros que acabei de mostrar foi feito pelo Carlos E. Morimoto em seu livro Servidores Linux:

http_port 3128
visible_hostname proxy-server
cache_effective_user squid
error_directory /usr/share/errors/Portuguese
cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /usr/var/cache 2048 16 256
cache_access_log /usr/var/logs/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl bloqueados url_regex -i "/usr/etc/bloqueados"
http_access deny bloqueados
acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all

As linhas em negrito foram alteradas ou criadas por mim para refletir o que expliquei até agora.

Feito isso, será necessário criar o usuário “squid” e os diretórios que especificamos na configuração e a seguir dar a este usuário a propriedade destes diretórios. Na linha de comando, como root:

# useradd squid -s /bin/false
# mkdir /usr/var/cache /usr/var/logs
# chown -R squid. /usr/var/cache /usr/var/logs

Repare no ponto após “squid” para que os arquivos herdem também o grupo a que pertence o squid. O parâmetro -s de useradd serve para especificar um shell para o usuário. O /bin/false significa que ele não terá um shell válido, e como não especificamos também um diretório home ou uma senha, este será um usuário “castrado”, que não poderá se logar no sistema, mas tem acessos aos arquivos de sua propriedade.

Finalmente criamos a estrutura do cache do Squid com o comando “squid -z”. Se tudo ocorrer bem serão exibidas no terminal as mensagens dos diretórios sendo criados.

Mais algumas dicas

Pode-se notar que o script de inicialização do Squid encontrado em pacotes pré-compilados não vai estar presente. Normalmente em /etc/init.d/squid, ele é usado para iniciar, parar ou reiniciar o Squid. Embora seja possível criar este arquivo escrevendo um script para os comandos de inicialização e criando um link para eles dentro dos diretórios de inicialização dos runlevels, talvez seja mais fácil apenas usar a linha de comando.

Para iniciar o Squid, simplesmente digite “squid” como root. Para recarregar o arquivo de configuração após alguma alteração, rode “squid -k reconfigure”, para finalizar o Squid, use “squid -k kill”, sempre como root.

Para que não seja necessário executar o Squid a cada inicialização do servidor, adicione o comando “squid” no arquivo /etc/rc.d/rc.local (para Slackware) ou /etc/init.d/rc.local (para Debian, Fedora e derivados).

Extrapolando um pouco mais:

Para os mais exigentes que realmente querem o script de inicialização tal como ele exite nas versões pré-compiladas, segue o caminho das pedras:

Crie um arquivo com seu editor de textos em /etc/init.d/squid (para Debian e Fedora) ou /etc/rc.d/rc.squid (para Slackware). Dentro do arquivo coloque o seguinte script:

#!/bin/bash

iniciar(){
squid
}

parar(){
squid -k kill
}

recarregar(){
squid -k reconfigure
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
"reload") recarregar ;;
*) echo "Use os parâmetros start, stop, restart ou reload"
esac

Depois dê permissão de execução para o arquivo com um:

# chmod +x /etc/init.d/squid (Debian/Fedora)

ou

# chmod +x /etc/rc.d/rc.squid (Slackware)

A partir de agora você pode iniciá-lo, pará-lo, reiniciá-lo ou apenas recarregar o arquivo de configurações usando /etc/init.d/squid com os parâmetros start, stop, restart ou reload como em:

# /etc/init.d/squid start

Para que o script seja executado durante o boot é preciso criar um link para ele dentro da pasta /etc/rc5.d (para Debian e Fedora) como em:

# cd /etc/rc5.d
# ln -s ../init.d/squid S21squid

Obs.: No caso do servidor não entrar no modo gráfico, o runlevel será 3 em vez de 5 de forma que o diretório a entrar será /etc/rc3.d.

Ou, no Slackware, edite o arquivo /etc/rc.d/rc.M e insira estas linhas no final do arquivo:

# Inicia o squid:
if [ -x /etc/rc.d/rc.squid ]; then
. /etc/rc.d/rc.squid start
fi

A partir daí o Squid será inicializado com o sistema. Para que ele pare de inicializar, apenas retire a permissão de execução para o /etc/init.d/squid (ou /etc/rc.d/rc.squid no Slackware) com um:

# chmod -x /etc/init.d/squid

Conclusão

Muitos esbarram no problema das diferenças entre o Squid pré-compilado, que é obtido dos repositórios, do Squid instalado a partir do código fonte. E os tutoriais nem sempre explicam as diferenças adicionais que existem na instalação do Squid compilado manualmente.

Meu objetivo aqui é servir de um “pontapé inicial” para aqueles que querem aprender a usar o Squid a partir do código fonte e deixá-lo funcional para a partir daí cada um configurar da maneira que deseja.

Sugestões e dicas sobre o artigo serão muito bem vindas, bem como erros que porventura venham a encontrar.

Bibliografia

One Response to Instalando Squid a partir do código fonte

  1. Douglas disse:

    Boa, tava kerendo configurar um servidor proxy aqui na empresa onde trabalho e axei essa config mto boa, funcionou perfeitamente aqui.

    Ah vê se coloca informações sobre LAMP, ok..
    Vou aguardar..

Conte-nos o que achou...

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: