Você está na página 1de 28
Linux Network Servers Proxy Squid www.4linux.com.br

Linux Network Servers Proxy Squid

www.4linux.com.br

- 2

Sumário

Proxy Squid Parte 1

3

1.1. Objetivos

4

1.2. Introdução

4

1.2.1. Proxy Manual

5

1.2.2. Proxy

Transparente

5

1.3.

O que é uma ACL?

6

1.3.1. Tipos de ACL

1.4. Squid como cache

1.4.1. Cache em disco

1.5. Configurando um cliente manualmente

1.5.1. Testando os filtros

1.6. Criando Blacklists e Whitelists

1.6.1. Testando os filtros

1.7. Proxy com autenticação

Índice de tabelas

Índice de Figuras

6

10

11

14

17

20

21

26

Proxy Squid Parte 1 - 3

Proxy Squid Parte 1

Proxy Squid Parte 1 - 4

1.1. Objetivos

Funções do Squid: Cache / Filtro de conteúdo;

O que é um ACL?

Instalação do Squid;

Configuração da estrutura do Cache em disco e memória RAM;

Configuração de um exemplo de filtro de conteúdo;

Proxy com autenticação;

1.2. Introdução

Nesta aula, iremos observar algumas particularidades do Proxy web Squid, uma solução Open Source amplamente utilizada no mercado como: acelerador e filtro de conteúdo Web.

Imagine que os seus usuários necessitem acessar com frequência um site de notícias. A cada requisição, o navegador Web resolve o DNS deste site, faz a requisição ao servidor Web encontrado e traz o conteúdo até o usuário.

servidor Web encontrado e traz o conteúdo até o usuário. Agora, imagine que 500 clientes estão

Agora, imagine que 500 clientes estão acessando este site. Desperdício de banda, não acha?

As soluções Web Proxy foram desenvolvidas justamente para contornar este problema. Imagine o mesmo cenário acima, só que desta vez, ao invés de consultar o site, o navegador consulta o "Web Proxy" previamente configurado, e então o servidor "proxy" faz a consulta ao site, só que antes de entregar a requisição ao cliente, o servidor "proxy" armazena o conteúdo do site em um diretório num disco rígido e, quando um segundo cliente acessar o mesmo site, o servidor "proxy" verifica se o conteúdo esta armazenado em "cache".

Proxy Squid Parte 1 - 5

Em caso positivo, o servidor entrega o conteúdo do "cache", acelerando a navegação e economizando banda. Além disso, o "Web Proxy" também pode agir como filtro de conteúdo, verificando se é desejável que aquele conteúdo seja acessível para aquele usuário, endereço IP ou Mac Address, e então libera ou nega o acesso de acordo com o especificado nas ACL's (Access Control List), item que veremos mais adiante.

O Web Proxy pode trabalhar de dois modos: manual ou transparente.

1.2.1. Proxy Manual

Em um proxy manual, o navegador sabe que é necessário fazer uma requisição ao servidor "proxy", então temos uma série de funções que o "browser" pode solicitar, como forçar a atualização do "cache", verificar se as credenciais de autenticação foram fornecidas previamente, ou seja, o cliente sabe que deve falar com um "proxy" e fará a requisição direto a este. Além disso, o servidor, por sua vez, possui o número IP do cliente que fez aquela requisição, o que possibilita criar regras específicas e controle de logs mais apurados.

1.2.2. Proxy Transparente

Em um proxy transparente não há necessidade de configurarmos o "browser". O cliente fará sua requisição ao "gateway" padrão daquela rede e então, com uma regra de "firewall" previamente configurada, o "gateway" fará o redirecionamento para o proxy, que por sua vez realizará seu trabalho.

A maior vantagem deste modelo é que não temos a necessidade de configurarmos os navegadores Web manualmente, o que seria justificável em uma rede onde não temos o poder de manipular o computador dos usuários, como um provedor de internet, por exemplo.

Proxy Squid Parte 1 - 6

Em compensação, perderemos a flexibilidade dos logs e autenticação, já que o navegador web não sabe que está passando por um proxy e também teremos que fazer "NAT" para acessos a sites que utilizam "HTTPS", já que o "Squid" não sabe lidar com este tipo de conteúdo quando está trabalhando de forma transparente.

1.3. O que é uma ACL?

ACL, ou Access Control List, como o próprio nome diz é uma maneira de criar listas de acesso no Squid.

Com elas podemos criar uma regra dizendo que a ACL de nome "MyNetwork" engloba todos os endereços originados em 192.168.200.0/24, ou seja, é uma ACL que "casa" com a rede inteira.

1.3.1. Tipos de ACL

Basicamente, as ACL's disponíveis no Squid para utilização na maioria dos casos podem ser agrupadas na seguinte lista:

na maioria dos casos podem ser agrupadas na seguinte lista: • ACL's de origem • ACL's

ACL's de origem

ACL's de destino

ACL's de horário

E sua utilização acontece da seguinte forma:

acl <nome da acl> <tipo da acl> <padrão da acl>

Proxy Squid Parte 1 - 7

ACL's de origem são utilizadas para controlar todo e qualquer acesso que tenha como origem um determinado padrão. Essa origem, geralmente é um endereço de host ou endereço de rede.

Também pode ser configurado um domínio, mas tenha em mente que, neste caso, é necessário que seu servidor Proxy esteja completamente hábil a resolver estes endereços.

esteja completamente hábil a resolver estes endereços. acl MyNetwork src 192.168.200.0/24 acl gateway src

acl MyNetwork src 192.168.200.0/24 acl gateway src 192.168.200.1

ACL's de destino são mais comuns e popularmente utilizadas para criar padrões que casem com determinados endereços de rede, endereços de domínio, partes de um domínio e também por expressões regulares. Vamos dar uma olhada na construção dessas ACL's.

Vamos dar uma olhada na construção dessas ACL's. acl Servers dst 192.168.200.2 192.168.200.3 acl 4linux

acl Servers dst 192.168.200.2 192.168.200.3 acl 4linux dstdomain .dexter.com.br acl Brasil dstdomain .com.br

Proxy Squid Parte 1 - 8

ACL's de horário são muito úteis, quando queremos, por exemplo, permitir acesso a sites de relacionamento durante o horário de almoço ou fora do horário de expediente.

acl almoco time 13:00-14:00 acl parte_manha time 08:00-12:59o horário de almoço ou fora do horário de expediente. Outro formato: acl parte_manha time MTWHF

acl almoco time 13:00-14:00 acl parte_manha time 08:00-12:59 Outro formato: acl parte_manha time MTWHF 08:00-12:59

Outro formato:

acl parte_manha time MTWHF 08:00-12:5913:00-14:00 acl parte_manha time 08:00-12:59 Outro formato: Abreviação S Dia da semana domingo M

Outro formato: acl parte_manha time MTWHF 08:00-12:59 Abreviação S Dia da semana domingo M

AbreviaçãoOutro formato: acl parte_manha time MTWHF 08:00-12:59 S Dia da semana domingo M segunda-feira T

S

Dia da semana

domingo

M

segunda-feira

T

terça-feira

W

quarta-feira

H

quinta-feira

F

sexta-feira

A

sábado

Proxy Squid Parte 1 - 9

LEMBRETE – Tipos de ACLProxy Squid Parte 1 - 9 src – Filtro por rede ou endereço IP; time –

src – Filtro por rede ou endereço IP; time – Filtro por hora e dia da semana; urlpath_regex – filtro de complemento de uma "url"; url_regex – Filtro de uma "string" na "url"; dstdomain – Filtro de uma "url"; proxy_auth – Filtro por usuários autenticados; arp – Filtro por "MAC Address"; maxconn – Filtro por conexões; proto – Filtro por protocolos; port – Filtro por porta.

Para saber quais são e como utilizá-las, acesse:

021f45033c4ee1b1fc5bdd4f5c49ddcd08f45bd1porta. Para saber quais são e como utilizá-las, acesse: http://wiki.squid-cache.org/SquidFaq/SquidAcl#head- Para

http://wiki.squid-cache.org/SquidFaq/SquidAcl#head-

Para instalar o squid, execute o comando abaixo:

# aptitude install squidPara instalar o squid, execute o comando abaixo: Para administrar o squid, é necessário saber onde

o squid, execute o comando abaixo: # aptitude install squid Para administrar o squid, é necessário

Para administrar o squid, é necessário saber onde encontram-se determinados arquivos:

/etc/squid/squid.conf - Arquivo de configuração

/var/log/squid/*- Arquivos de log do squid.

/var/spool/squid - Diretório que contém o cache do squid

Proxy Squid Parte 1 - 10

Faça backup do arquivo de configuração original:

cp /etc/squid/squid.conf /etc/squid/squid.conf.backup#

#

vim /etc/squid/squid.conf#

#

Para que o squid ouça apenas uma rede, troque o valor do parâmetro "http_port 3128" para:

troque o valor do parâmetro "http_port 3128" para: http_port 192.168.200.1:3128 1.4. Squid como cache Imagine

http_port 192.168.200.1:3128

1.4. Squid como cache

Imagine que os seus usuários necessitam acessar com frequência um site. A cada requisição, o DNS deste site é resolvido, faz a requisição ao servidor Web encontrado, traz o conteúdo até o usuário.

Agora, imagine que 300 clientes estão acessando este site

As soluções Web

Proxy foram desenvolvidas justamente para contornar este problema.

O servidor Proxy faz a consulta ao site, só que, antes de entregar a requisição ao cliente, o servidor Proxy armazena o conteúdo do site em um diretório do disco rígido e, quando um segundo cliente acessar o mesmo site, o servidor Proxy verifica se o conteúdo está armazenado em cache. Isso acelera e economiza banda!

Proxy Squid Parte 1 - 11

1.4.1. Cache em disco

cache_dir <tipo> <diretório> <espaço> <L1> <L2> <opções>Proxy Squid Parte 1 - 11 1.4.1. Cache em disco tipo : Para a maioria dos

<L1> <L2> <opções> tipo : Para a maioria dos casos, o padrão ufs é o ideal.

tipo: Para a maioria dos casos, o padrão ufs é o ideal. Os tipos diskd : Para a maioria dos casos, o padrão ufs é o ideal. Os tipos diskd e aufs são utilizados para IO assíncrono. O cache em disco pode ser desabilitado definindo o tipo como null (se suportado). diretório: Especifica o caminho onde os objetos serão armazenados. Caso o cache não seja desejado, defina o caminho como /dev/null. espaço: Específica o tamanho máximo para o cache em disco. Se atingir o espaço máximo, os objetivos serão repostos. L1 e L2: L1 corresponde ao número de subdiretórios criados a partir do diretório de spool (cache) representado por <diretório> e L2 ao número de subdiretórios criados abaixo de L1.

e L2 ao número de subdiretórios criados abaixo de L1. Iremos especificar 500MB de cache, com

Iremos especificar 500MB de cache, com 16 diretórios e 256 subdiretórios:

cache_dir ufs /var/spool/squid 500 16 256500MB de cache, com 16 diretórios e 256 subdiretórios: /var/spool/squid indica o diretório no qual o

subdiretórios: cache_dir ufs /var/spool/squid 500 16 256 /var/spool/squid indica o diretório no qual o Squid

/var/spool/squid indica o diretório no qual o Squid armazena os arquivos do cache; O 500 indica a quantidade de espaço no HD (em MB) que será usada para o cache.

Você pode aumentar o valor se você tiver mais espaço no disco e quiser que o Squid armazene os arquivos baixados por mais tempo. Os números 16 e 256 indicam a quantidade de subdiretórios que serão criados dentro do diretório.

Proxy Squid Parte 1 - 12

Definindo o cache que será armazenado em memória:

1 - 12 Definindo o cache que será armazenado em memória: cache_mem 32 MB Você pode

cache_mem 32 MB

Você pode reservar 16 ou 32 ou 64 MB para o cache em um servidor não dedicado, que atende a apenas alguns computadores (como o servidor de uma pequena rede local) e até 1/3 da memória RAM total em um servidor proxy dedicado.

Para que o cache na memória armazene arquivos de até 128 KB, por exemplo, adicione a linha:

arquivos de até 128 KB, por exemplo, adicione a linha: maximum_object_size_in_memory 128 KB Se você quiser

maximum_object_size_in_memory 128 KB

Se você quiser que o cache armazene arquivos de até 256 MB, por exemplo, as linhas ficariam:

arquivos de até 256 MB, por exemplo, as linhas ficariam: maximum_object_size 256 MB minimum_object_size 0 KB

maximum_object_size 256 MB minimum_object_size 0 KB

Por padrão, sempre que o cache atingir 95% de uso, serão descartados arquivos antigos até que a porcentagem volte para um número abaixo de 90%:

até que a porcentagem volte para um número abaixo de 90%: cache_swap_low 90 cache_swap_high 95 Agora,

cache_swap_low 90 cache_swap_high 95

Agora, iremos parar o squid, verificar a sintaxe do arquivo de configuração, gerar o cache e então reiniciaremos o squid.

a sintaxe do arquivo de configuração, gerar o cache e então reiniciaremos o squid. # squid

# squid -z # invoke-rc.d squid start

Proxy Squid Parte 1 - 13

Dica: Toda vez que você mudar as ACL's você deve executar os comandos:

você mudar as ACL's você deve executar os comandos: # squid -k parse # squid -k

# squid -k parse

# squid -k reconfigure

Procure uma linha semelhante a esta:

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

Agora, depois desta linha, crie uma acl com a rede de origem, uma acl para domínios .com e uma acl para o domínio globo.com:

acl para domínios .com e uma acl para o domínio globo.com: acl RedeDexter src 192.168.200.0/24 acl

acl RedeDexter src 192.168.200.0/24 acl Internacional dstdomain .com acl Globo dstdomain .globo.com

Procure uma string chamada http_access deny all e coloque o seguinte conteúdo, antes desta regra:

deny all e coloque o seguinte conteúdo, antes desta regra: http_access allow RedeDexter Globo http_access deny

http_access allow RedeDexter Globo http_access deny RedeDexter International http_access allow RedeDexter http_access deny all

Proxy Squid Parte 1 - 14

A variável “http_access deny all” garante que só serão aceitos acessos cujo conteúdo seja equivalente à uma das ACLS acima.

cujo conteúdo seja equivalente à uma das ACLS acima. # /etc/init.d/squid restart 1.5. Configurando um cliente

# /etc/init.d/squid restart

1.5. Configurando um cliente manualmente

conteúdo seja equivalente à uma das ACLS acima. # /etc/init.d/squid restart 1.5. Configurando um cliente manualmente

Proxy Squid Parte 1 - 15

Proxy Squid Parte 1 - 15

Proxy Squid Parte 1 - 16

Proxy Squid Parte 1 - 16

Proxy Squid Parte 1 - 17

Proxy Squid Parte 1 - 17 1.5.1. Testando os filtros Tente acessar agora os seguintes endereços:
Proxy Squid Parte 1 - 17 1.5.1. Testando os filtros Tente acessar agora os seguintes endereços:

1.5.1. Testando os filtros

Tente acessar agora os seguintes endereços:

http://www.google.com

http://www.google.com.br

http://www.globo.com

Proxy Squid Parte 1 - 18

Proxy Squid Parte 1 - 18

Proxy Squid Parte 1 - 19

Proxy Squid Parte 1 - 19

Proxy Squid Parte 1 - 20

Proxy Squid Parte 1 - 20 1.6. Criando Blacklists e Whitelists O conceito de Blacklist e

1.6. Criando Blacklists e Whitelists

O conceito de Blacklist e Whitelist é muito simples:

Blacklist - Uma lista de palavras que eu quero negar.

Whitelist - Uma lista de domínios que eu quero liberar, mas que casam com a blacklist.

Para exemplificar o uso de blacklists e whitelists, vamos criar duas ACL's, uma negando qualquer url que contenha a palavra Linux, e outra liberando os sites www.linux.com e www.4linux.com.br.

Proxy Squid Parte 1 - 21

# vim /etc/squid/squid.conf

#

vim /etc/squid/squid.conf

acl RedeDexter src 192.168.200.0/24 acl Internacional dstdomain .com acl Globo dstdomain .globo.com acl blacklist url_regex linux acl whitelist dstdomain www.linux.com www.4linux.com.br http_access allow localhost http_access allow RedeDexter whitelist http_access deny RedeDexter blacklist http_access allow RedeDexter Globo http_access deny RedeDexter Internacional http_access allow RedeDexter http_access deny all

# /etc/init.d/squid restart

#

/etc/init.d/squid restart

1.6.1. Testando os filtros

Tente acessar agora os seguintes endereços:

http://www.4linux.com.br

http://www.4linux.com.br

http://www.linux.com

 

http://www.br-linux.org

http://www.vivaolinux.com.br

Proxy Squid Parte 1 - 22

Proxy Squid Parte 1 - 22

Proxy Squid Parte 1 - 23

Proxy Squid Parte 1 - 23

Proxy Squid Parte 1 - 24

Proxy Squid Parte 1 - 24

Proxy Squid Parte 1 - 25

Proxy Squid Parte 1 - 25

Proxy Squid Parte 1 - 26

1.7. Proxy com autenticação

Autenticação NCSA

O "Squid" possui um mecanismo de autenticação que pode trabalhar de diversas maneiras, e uma delas, a NCSA, utiliza o mesmo mecanismo de autenticação do servidor Web Apache.

Vamos configurar esse modelo de autenticação e criar uma ACL que exija autenticação também.

Vamos configurar a autenticação do Squid, adicionado o conteúdo abaixo no início do arquivo /etc/squid/squid.conf:

  # vim /etc/squid/squid.conf
 

#

vim /etc/squid/squid.conf

Descomente a linha abaixo:

  # auth_param basic program /uncomment and complete this line\
 

#

auth_param basic program /uncomment and complete this line\

E

a deixe assim:

  auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
 

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd

 

A tendência é usar um valor alto para dificultar o uso de programas de força

bruta que tentam por meio de ataques com dicionários descobrir a senha do usuário:

de força bruta que tentam por meio de ataques com dicionários descobrir a senha do usuário:

auth_param basic children 5

Proxy Squid Parte 1 - 27

O tempo de expiração da senha também pode ser alterado, o padrão é uma

hora:

authenticate_ttl 1 hourda senha também pode ser alterado, o padrão é uma hora: Definindo um ACL para ativar

ser alterado, o padrão é uma hora: authenticate_ttl 1 hour Definindo um ACL para ativar o

Definindo um ACL para ativar o recurso de autenticação:

acl password proxy_auth REQUIREDDefinindo um ACL para ativar o recurso de autenticação: Devemos dar permissão a essa ACL antes

recurso de autenticação: acl password proxy_auth REQUIRED Devemos dar permissão a essa ACL antes de qualquer

Devemos dar permissão a essa ACL antes de qualquer outra:

http_access deny !passwordDevemos dar permissão a essa ACL antes de qualquer outra: Cadastre um usuário para testar a

essa ACL antes de qualquer outra: http_access deny !password Cadastre um usuário para testar a autenticação.

Cadastre um usuário para testar a autenticação.essa ACL antes de qualquer outra: http_access deny !password Esse utilitário faz parte do pacote apache2-utils

!password Cadastre um usuário para testar a autenticação. Esse utilitário faz parte do pacote apache2-utils ,

Esse utilitário faz parte do pacote apache2-utils, caso não esteja instalado, instale-o:

# htpasswd -c /etc/squid/passwd mandarkglory

Obs.: Para cadastrar um segundo usuário retirar a flag “-c”.

Após toda a configuração, podemos reiniciar o serviço do Squid:

# /etc/init.d/squid restart

Proxy Squid Parte 1 - 28

Proxy Squid Parte 1 - 28 Na próxima aula iremos ver como fazer autenticação usando a
Proxy Squid Parte 1 - 28 Na próxima aula iremos ver como fazer autenticação usando a

Na próxima aula iremos ver como fazer autenticação usando a base de dados do OpenLDAP!