Pesquisa de site

Configurando o servidor proxy Squid com acesso restrito e configurando clientes para usar proxy - Parte 5


Um Linux Foundation Certified Engineer é um profissional qualificado que tem experiência para instalar, gerenciar e solucionar problemas de serviços de rede em sistemas Linux e é responsável pelo design, implementação e manutenção contínua do sistema- arquitetura ampla.

Apresentando o Programa de Certificação Linux Foundation.

Na Parte 1 desta série, mostramos como instalar o squid, um servidor proxy de cache para clientes web. Por favor, consulte essa postagem (link fornecido abaixo) antes de continuar se você ainda não instalou o squid em seu sistema.

  1. Parte 1 – Instalar serviços de rede e configurar inicialização automática na inicialização

Neste artigo, mostraremos como configurar o servidor proxy Squid para conceder ou restringir o acesso à Internet e como configurar um cliente http, ou navegador da web, para usar esse servidor proxy.

Configuração do meu ambiente de teste

Servidor Lula
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Máquina Cliente 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Máquina Cliente 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Lembremos que, em termos simples, um servidor proxy web é um intermediário entre um (ou mais) computadores clientes e um determinado recurso de rede, sendo o mais comum o acesso à Internet. Em outras palavras, o servidor proxy está conectado de um lado diretamente à Internet (ou a um roteador conectado à Internet) e do outro lado a uma rede de computadores clientes que acessarão a World Wide Web através dele.

Você pode estar se perguntando: por que eu gostaria de adicionar mais um software à minha infraestrutura de rede?

Aqui estão os 3 principais motivos:

1. O Squid armazena arquivos de solicitações anteriores para acelerar transferências futuras. Por exemplo, suponha que client1 baixe CentOS-7.0-1406-x86_64-DVD.iso da Internet. Quando o client2 solicita acesso ao mesmo arquivo, o squid pode transferir o arquivo do seu cache em vez de baixá-lo novamente da Internet. Como você pode imaginar, você pode usar esse recurso para acelerar as transferências de dados em uma rede de computadores que exigem algum tipo de atualização frequente.

2. ACLs (Listas de Controle de Acesso) nos permitem restringir o acesso a sites e/ou monitorar o acesso por usuário. Você pode restringir o acesso com base no dia da semana ou hora do dia, ou domínio, por exemplo.

3. Ignorar filtros da web é possível através do uso de um proxy da web ao qual são feitas solicitações e que retorna o conteúdo solicitado a um cliente, em vez de fazer com que o cliente o solicite diretamente à Internet.

Por exemplo, suponha que você esteja logado em client1 e queira acessar www.facebook.com através do roteador da sua empresa. Como o site pode estar bloqueado pelas políticas da sua empresa, você pode conectar-se a um servidor proxy da web e solicitar acesso a www.facebook.com. O conteúdo remoto é então retornado a você por meio do servidor proxy da web, ignorando as políticas de bloqueio do roteador da sua empresa.

Configurando o Squid – O Básico

O esquema de controle de acesso do servidor proxy web Squid consiste em dois componentes diferentes:

  1. Os elementos ACL são linhas diretivas que começam com a palavra “acl” e representam tipos de testes que são executados em qualquer transação de solicitação.
  2. As regras da lista de acesso consistem em uma ação permitir ou negar seguida por vários elementos ACL e são usadas para indicar qual ação ou limitação foi a ser aplicado para uma determinada solicitação. Eles são verificados em ordem e a pesquisa na lista termina assim que uma das regras corresponde. Se uma regra tiver vários elementos ACL, ela será implementada como uma operação booleana AND (todos os elementos ACL da regra devem ser correspondentes para que a regra seja correspondente).

O arquivo de configuração principal do Squid é /etc/squid/squid.conf, que tem ~5.000 linhas, pois inclui diretivas de configuração e documentação. Por esse motivo, criaremos um novo arquivo squid.conf apenas com as linhas que incluem as diretivas de configuração para nossa conveniência, deixando de fora as linhas vazias ou comentadas. Para fazer isso, usaremos os seguintes comandos.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

E então,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Agora, abra o arquivo squid.conf recém-criado e procure (ou adicione) os seguintes elementos ACL e listas de acesso.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

As duas linhas acima representam um exemplo básico do uso de elementos ACL.

  1. A primeira palavra, acl, indica que esta é uma linha de diretiva de elemento ACL.
  2. A segunda palavra, localhost ou localnet, especifica um nome para a diretiva.
  3. A terceira palavra, src neste caso, é um tipo de elemento ACL usado para representar um endereço IP de cliente ou intervalo de endereços, respectivamente. Você pode especificar um único host por IP (ou nome de host, se tiver algum tipo de resolução DNS implementada) ou por endereço de rede.
  4. O quarto parâmetro é um argumento de filtragem que é “alimentado” para a diretiva.

As duas linhas abaixo são regras de lista de acesso e representam uma implementação explícita das diretivas ACL mencionadas anteriormente. Em poucas palavras, indicam que o acesso http deve ser concedido se a solicitação vier da rede local (localnet) ou de localhost. Especificamente, qual é a rede local permitida ou endereços de host locais? A resposta é: aquelas especificadas nas diretivas localhost e localnet.

http_access allow localnet
http_access allow localhost

Neste ponto você pode reiniciar o Squid para aplicar quaisquer alterações pendentes.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

e então configure um navegador cliente na rede local (192.168.0.104 no nosso caso) para acessar a Internet através do seu proxy da seguinte forma.

No Firefox

1. Vá ao menu Editar e escolha a opção Preferências.

2. Clique em Avançado, depois na guia Rede e, finalmente, em Configurações

3. Verifique a Configuração manual do proxy e insira o endereço IP do servidor proxy e a porta onde ele está escutando para conexões.

Nota Por padrão, o Squid escuta na porta 3128, mas você pode substituir esse comportamento editando a lista de acesso regra que começa com http_port (por padrão é http_port 3128).

4. Clique em OK para aplicar as alterações e pronto.

Verificando se um cliente está acessando a Internet

Agora você pode verificar se o seu cliente de rede local está acessando a Internet através do seu proxy da seguinte maneira.

1. No seu cliente, abra um terminal e digite,

ip address show eth0 | grep -Ei '(inet.*eth0)'

Esse comando exibirá o endereço IP atual do seu cliente (192.168.0.104 na imagem a seguir).

2. Em seu cliente, use um navegador da web para abrir qualquer site (linux-console.net neste caso).

3. No servidor, execute.

tail -f /var/log/squid/access.log

e você terá uma visualização ao vivo das solicitações atendidas pelo Squid.

Restringindo o acesso por cliente

Agora, suponha que você queira negar explicitamente o acesso a esse endereço IP de cliente específico, mantendo ao mesmo tempo o acesso para o restante da rede local.

1. Defina uma nova diretiva ACL como segue (eu a chamei de ubuntuOS mas você pode nomeá-la como quiser).

acl ubuntuOS src 192.168.0.104

2. Adicione a diretiva ACL à lista de acesso localnet que já está em vigor, mas prefaciando-a com um sinal de exclamação. Isso significa, “Permitir acesso à Internet para clientes que correspondam à diretiva localnet ACL, exceto aquele que corresponda à diretiva ubuntuOS”.

http_access allow localnet !ubuntuOS

3. Agora precisamos reiniciar o Squid para aplicar as alterações. Então, se tentarmos navegar em qualquer site, descobriremos que o acesso foi negado agora.

Configurando o Squid – Ajuste Fino

Restringindo o acesso por domínio e/ou por hora do dia/dia da semana

Para restringir o acesso ao Squid por domínio usaremos a palavra-chave dstdomain em uma diretiva ACL, como segue.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Onde forbidden_domains é um arquivo de texto simples que contém os domínios aos quais desejamos negar acesso.

Finalmente, devemos conceder acesso ao Squid para solicitações que não correspondam à diretiva acima.

http_access allow localnet !forbidden

Ou talvez queiramos permitir o acesso a esses sites apenas durante um determinado horário do dia (das 10h às 11h) apenas na segunda-feira (M), Quarta-feira (W) e Sexta-feira (F).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

Caso contrário, o acesso a esses domínios será bloqueado.

Restringindo o acesso por autenticação de usuário

O Squid suporta vários mecanismos de autenticação (Basic, NTLM, Digest, SPNEGO e Oauth) e auxiliares (banco de dados SQL, LDAP, NIS, NCSA, para citar alguns). Neste tutorial usaremos autenticação básica com NCSA.

Adicione as seguintes linhas ao seu arquivo /etc/squid/squid.conf.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Nota: No CentOS 7, o plugin NCSA para squid pode ser encontrado em /usr/lib64/squid/basic_nsca_auth, então mude de acordo na linha acima.

Alguns esclarecimentos:

  1. Precisamos dizer ao Squid qual programa auxiliar de autenticação usar com a diretiva auth_param especificando o nome do programa (provavelmente, /usr/lib/squid/ncsa_auth ou /usr/lib64/squid/basic_nsca_auth), além de quaisquer opções de linha de comando (/etc/squid/passwd neste caso), se necessário.
  2. O arquivo /etc/squid/passwd é criado através do htpasswd, uma ferramenta para gerenciar autenticação básica através de arquivos. Isso nos permitirá adicionar uma lista de nomes de usuário (e suas senhas correspondentes) que poderão usar o Squid.
  3. credentialsttl 30 minutos exigirá a inserção de seu nome de usuário e senha a cada 30 minutos (você também pode especificar esse intervalo de tempo com horas).
  4. casesensitive ativado indica que nomes de usuários e senhas diferenciam maiúsculas de minúsculas.
  5. realm representa o texto da caixa de diálogo de autenticação que será usada para autenticar no squid.
  6. Finalmente, o acesso é concedido somente quando a autenticação do proxy (proxy_auth REQUIRED) é bem-sucedida.

Execute o seguinte comando para criar o arquivo e adicionar credenciais para o usuário gacanepa (omita o sinalizador -c se o arquivo já existir).

htpasswd -c /etc/squid/passwd gacanepa

Abra um navegador da web na máquina cliente e tente navegar para qualquer site.

Se a autenticação for bem-sucedida, o acesso será concedido ao recurso solicitado. Caso contrário, o acesso será negado.

Usando cache para acelerar a transferência de dados

Um dos diferenciais do Squid é a possibilidade de armazenar em cache os recursos solicitados da web para o disco, a fim de agilizar futuras solicitações desses objetos pelo mesmo cliente ou por outros.

Adicione as seguintes diretivas em seu arquivo squid.conf.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Alguns esclarecimentos sobre as diretivas acima.

  1. ufs é o formato de armazenamento do Squid.
  2. /var/cache/squid é um diretório de nível superior onde os arquivos de cache serão armazenados. Este diretório deve existir e ser gravável pelo Squid (o Squid NÃO criará este diretório para você).
  3. 1000 é a quantidade (em MB) a ser usada neste diretório.
  4. 16 é o número de subdiretórios de 1º nível, enquanto 256 é o número de subdiretórios de 2º nível dentro de /var/spool/squid.
  5. A diretiva maximum_object_size especifica o tamanho máximo dos objetos permitidos no cache.
  6. refresh_pattern diz ao Squid como lidar com tipos de arquivos específicos (.mp4 e .iso neste caso) e por quanto tempo ele deve armazenar os arquivos solicitados. objetos em cache (2.880 minutos=2 dias).

O primeiro e o segundo 2880 são limites inferior e superior, respectivamente, de quanto tempo objetos sem um tempo de expiração explícito serão considerados recentes e, portanto, serão servidos pelo cache, enquanto 0% é a porcentagem da idade dos objetos (tempo desde a última modificação) que cada objeto sem prazo de validade explícito será considerado recente.

Estudo de caso: baixando um arquivo .mp4 de 2 clientes diferentes e testando o cache

O primeiro cliente (IP 192.168.0.104) baixa um arquivo 71 MB .mp4 em 2 minutos e 52 segundos.

O segundo cliente (IP 192.168.0.17) baixa o mesmo arquivo em 1,4 segundos!

Isso ocorre porque o arquivo foi servido a partir do cache do Squid (indicado por TCP_HIT/200) no segundo caso, ao contrário da primeira instância, quando foi baixado diretamente do a Internet (representada por TCP_MISS/200).

As palavras-chave HIT e MISS, juntamente com o código de resposta 200 http, indicam que o arquivo foi servido com sucesso nas duas vezes, mas o cache foi HIT e Perdida respectivamente. Quando uma solicitação não pode ser atendida pelo cache por algum motivo, o Squid tenta atendê-la pela Internet.

Conclusão

Neste artigo discutimos como configurar um proxy de cache web Squid. Você pode usar o servidor proxy para filtrar conteúdo usando critérios escolhidos e também para reduzir a latência (uma vez que solicitações de entrada idênticas são atendidas pelo cache, que está mais próximo do cliente do que o servidor web que realmente está servindo o conteúdo, resultando em mais rapidez transferências de dados) e também tráfego de rede (reduzindo a quantidade de largura de banda usada, o que economiza dinheiro se você estiver pagando pelo tráfego).

Você pode consultar o site do Squid para obter mais documentação (certifique-se de verificar também o wiki), mas não hesite em nos contatar se tiver alguma dúvida ou comentário. Teremos o maior prazer em ouvir de você!