Proxy transparente com Squid, com controle de banda e bloqueio por horários

O Squid permite compartilhar a conexão com a Internet entre vários computadores, servindo como ponte entre os usuários e a Internet. Ele analisa todo o tráfego de dados, separando assim, tudo que pode ou não passar, segundo a configuração que fizermos.

[ Hits: 65.324 ]

Por: Pedro Franca em 18/07/2012


Implementando os bloqueios



Bloqueando páginas impróprias

Agora vamos começar a limitar o acesso do pessoal, sobre a navegação de páginas na Web.

Para isso, vamos criar os arquivos que vão conter os links dos sites impróprios. E também, vamos definir a faixa de IPs que terão acesso total.

Então execute:

# touch /etc/squid/sites.permitido # sites permitidos
# touch /etc/squid/sites.negado # sites negados
# touch /etc/squid/palavras.negado # E palavras negadas

# touch /etc/squid/ip.funcionarios
# touch /etc/squid/ip.diretoria


Agora edite o arquivo "sites.permitido":

# nano /etc/squid/sites.permitido

Dentro deste arquivo, coloque os sites que você quer liberar.

Ex.: Sites de bancos, de notícias e etc... Isto depende da politica de cada empresa:

itau.com.br
bradesco.com.br
globo.com


Faça o mesmo com os outros arquivos, com suas respectivas informações:
  • Site.negado - Para sites que não terão acesso.
  • palavras.negada - Para palavras que serão bloqueadas dentro do site.

Dentro do arquivo "ip.funcionarios", defina as faixas de IPs que não terão acesso às páginas adicionadas nos arquivos "sites.negado" e "palavras.negado".

Dentro do arquivos "ip.funcionarios", coloque as informações da seguinte maneira:

192.168.1.100
192.168.1.101....


Faça o mesmo com o "ip.gerencia", salve e saia.

Vale uma dica, cuidado com o que se adiciona nos arquivos de bloqueio, pois bloquear palavras erradas, pode ocasionar muitos problemas.

Agora vamos adicionar estas informações no arquivo principal do Squid. Então execute:

# nano /etc/squid/squid.conf

Acima da seguinte linha:

# Travando micros locais para usaram o proxy
http_access allow localhost
http_access allow redelocal


Coloque estas informações:

# Grupos de Acesso
acl Diretoria src "/etc/squid/ip.diretoria"
acl Funcionarios src "/etc/squid/ip.funcionarios"

# Sites Permitido/Negado
acl SitesPermitido url_regex -i "/etc/squid/sites.permitido"
acl SitesNegado url_regex -i "/etc/squid/sites.negado"
acl PalavrasNegada url_regex -i "/etc/squid/sites.negado"

# Ativando as ACLs Personalizadas
http_access allow SitesPermitido
http_access deny SitesNegado
http_access deny PalavrasNegada
http_access allow Diretoria !SitesBloqueados # Isso significa que a faixa da diretoria terá acesso full sem bloqueio nenhum.
http_access allow Funcionarios
http_access deny all


Salve, saia e vamos restartar o Squid:

# /etc/init.d/squid stop
# squid -z
# /etc/init.d/squid start
# squid -k reconfigure


Toda vez que for fazer qualquer alteração no Squid, execute o seguinte comando para ele ler novamente as informações:

# squid -k reconfigure

Implementando controle de banda

Agora vamos implementar o controle de banda.

Primeiro, vamos criar 2 arquivos que terão os IPs liberados e os IPs com controle de banda.

Execute:

# nano /etc/squid/liberado
# nano /etc/squid/bloqueado


Dentro de cada arquivo, coloque a faixa de IPs que terão acesso livre e os que terão acesso limitado.

Exemplo:

# nano /etc/squid/liberado

192.168.1.100
192.168.1.102


Salve e saia. Faça o mesmo com o "bloqueado".

Agora vamos editar o arquivo principal do Squid:

# nano /etc/squid/squid.conf

No final do arquivo, antes das seguintes linhas:

http_access allow localhost
http_access allow redelocal
http_access deny all


Adicione as seguintes informações:

# Limitando Largura de banda
acl liberado src "/etc/squid/liberado"
acl limitado src "/etc/squid/limitado"
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow liberado # Faixa de IPs que não terá largura de banda.
delay_class 2 2
delay_parameters 2 174762/174762 32768/32768
delay_access 2 allow limitado # Faixa de IPs que terá a largura de banda


Salve e saia. Depois execute:

# squid -k reconfigure

Agora vou explicar como funciona este gerenciamento de banda do Squid.

A forma de calcular a largura de banda ideal para cada usuário é da seguinte madeira:
  • Um link de 2 megabit (2048 Kbits) corresponde a 526.848 bytes por segundo. Na regra do Squid, sempre usamos bytes, por isso devemos lembrar de fazer a conversão que é bem simples, dividimos o valor em kbits por 8 e multiplicamos por 2048 para ter o valor em bytes. * GUARDE ESSA REGRA.

  • No exemplo que colocamos no squid.conf, como nosso link é de 2 MB na opção delay_parameters 2 174762/174762 32768/32768, aqui definimos que o Squid usará 174762 Bytes por segundo, ou seja, + ou - 150 Mb do link só para o Squid.

    O resto que corresponde a 32768/32768, que é mais ou menos 30Kb por usuário para navegar e fazer download, ou seja se uma pessoa começar a fazer download na sua rede, a taxa de transferência não passará de 30 Kb, evitando assim um gargalo na rede.

Bloqueando por horário

Esta função é útil para muitas empresas que, no horário do almoço, acabam liberando sites de e-mail pessoal, redes sociais, entre outros, para os funcionários usarem, mas depois do horário de almoço, o proxy automaticamente começa a rejeitar as requisições.

Dentro do arquivo "squid.conf", você teria que colocar as seguintes informações para ativar essa regra:

# Bloqueando Madrugada
acl madrugada time 00:00-06:00
http_access deny madrugada


Neste caso, eu travei qualquer tipo de acesso na madrugada para evitar de um usuário espertinho deixar fazendo um download à noite.

Mas caso queira fazer da maneira que libere o proxy a partir de tal horário, troque a hora 00:00-06:00 e a ação da acl deny para allow.

Após isso, execute:

# squid -k reconfigure

É isso pessoal, espero que ajude.

Página anterior    

Páginas do artigo
   1. Instalação e configuração
   2. Implementando os bloqueios
Outros artigos deste autor

O poderoso Nagios

Monitoração com Zabbix no Debian Squeeze

OpenVPN para clientes Windows no Debian Squeeze

Leitura recomendada

Squid + proxy transparente + autentificação + SSL

Bloqueando conteúdo com Squid no RedHat 9

Squid no FreeBSD

Squid + Winbind + Samba no AD - Autenticando por grupos

Problemas com o Squid

  
Comentários
[1] Comentário enviado por danniel-lara em 18/07/2012 - 10:44h

Parabéns ficou muito bom mesmo
vou usar como referencia para o pessoal novado
que quer implantar o squid e não sabe como

muito bom mesmo
bem explicado

[2] Comentário enviado por thiagosmg em 18/07/2012 - 11:04h

Sensacional! me ajudou muito! excelente tutorial..
Abs.,
_PD

[3] Comentário enviado por Nilodanx52 em 18/07/2012 - 12:00h

E como fazer o squid do pfsense ser usado na rede aqui em casa?
tipo o brazilfw funfa tranquilo porem, como quero usar o pfsense agora, não esta usando o cache como deveria usar!

[4] Comentário enviado por vitorcid em 18/07/2012 - 12:06h

Muito bom... Pra ficar perfeito só falta controlar por usuários do AD ao invés de ips.
Será que é muito complicado?

Parabéns ficou ótimo.
abraço

[5] Comentário enviado por andersonnf em 18/07/2012 - 16:20h

Cara, bacana mesmo!
Obrigado!
Grande abraço!

[6] Comentário enviado por exsystem em 19/07/2012 - 08:26h


[4] Comentário enviado por vitorcid em 18/07/2012 - 12:06h:

Muito bom... Pra ficar perfeito só falta controlar por usuários do AD ao invés de ips.
Será que é muito complicado?

Parabéns ficou ótimo.
abraço


cara até que dá o problema é que o proxy não vai ficar transparente tem que configurar manualmente máquina por máquina.

[7] Comentário enviado por antonioclj em 19/07/2012 - 11:01h

Bom dia. Seria muito interessante você fazer um teste na sua configuração utilizando os benditos softwares UltraSurf e TOR. Se algum espertinho utilizá-los o mesmo pode ter acesso sem restrições. Fica a dica.

[8] Comentário enviado por waldemf em 19/07/2012 - 12:00h

Bem lembrado, mais essa restrição eu faço no iptables, bloqueando a porta 443, e liberando apenas os site que usam essa porta, e isso funciona perfeitamente! ;)

[9] Comentário enviado por alysonmatos em 19/07/2012 - 12:25h


[6] Comentário enviado por exsystem em 19/07/2012 - 08:26h:


[4] Comentário enviado por vitorcid em 18/07/2012 - 12:06h:

Muito bom... Pra ficar perfeito só falta controlar por usuários do AD ao invés de ips.
Será que é muito complicado?

Parabéns ficou ótimo.
abraço

cara até que dá o problema é que o proxy não vai ficar transparente tem que configurar manualmente máquina por máquina.


Você pode configurar proxy automaticamente, não precisa mais setar na mão.

[10] Comentário enviado por removido em 20/07/2012 - 00:39h

Boa amigo..

Eu particularmente, redireciono no iptables a porta 80, fazendo com que; se o usuario tentar acessar de outra forma qualquer(pela porta 80) ele é redirecionado à uma página que criei no apache que alerta sobre o bloqueio(avisa que somente acesso via proxy é permitido) ou simplesmente impede a rota sainte, e ainda no iptables, quando quero liberar o acesso de uma máquina específica uso NAT -I antes da política geral que usa NAT -A, ficou bem legal e atende no meu caso.
assim:

BLOQUEANDO TUDO:
iptables -t nat -A PREROUTING -s 10.0.0.1/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:8082 # criei uma página(sites) simples no Apache que responde nessa porta 8082.

iptables -t nat -I PREROUTING -s 10.0.0.10 -j ACCEPT

iptables -t nat -I PREROUTING -s 10.0.0.11 -j ACCEPT #mas assim esta liberando toda a rota, o meu não está bem assim, mas apenas pra entender.

Só uma dúvida que fiquei no squid.conf, na linha onde você libera a diretoria de forma geral, está assim ao fim do arquivo:

http_access allow Diretoria !SitesBloqueados

mas eu fiquei meio confuso aí, pois nas minhas confs, quando uso uma opção como está disposta aí seria +ou- assim

Libere a ACL Diretoria mas negue SitesBloqueados

pois o "!" reverte ou 'ignora' fazendo com que libere mas ainda sim bloqueie o acesso aos sitesbloqueados para Diretoria.

Mas apenas fiquei confuso, se funcionou pra ti, blz fica a dica pra eu desenrolar o meu e melhorar as associções das ACLs.

Abraços e parabéns, o Squid é ferramenta bem legal e seu Artigo ficou prático e excelente pra quem deseja partir daí e fazer uma ferramenta poderosa conhecendo as "intranhas" do sistema pra domina-lo.

Valeu

[11] Comentário enviado por waldemf em 20/07/2012 - 08:51h

Legal essa solução do apache particularmente não conhecia, e fiquei muito interessado, se poder me falar mais a respeito me manda um e-mail :)
Sobre a ACL, o "!" significa que essa acl Diretoria não irá ler ou processar a acl dos sitebloqueado, seria como um ignore, conforme você mesmo disse, tudo que vem dessa acl Diretoria para o proxy é liberada.
Nas minhas confs, funciona perfeitamente. :)

[12] Comentário enviado por JeffersonDAvila em 21/07/2012 - 21:32h

Show de bola seu artigo. Vou usar ele em um teste interno. Perfeito! :)

[13] Comentário enviado por ricardo_TI em 26/07/2012 - 14:35h

Boa tarde!

Artigo muito bom, me ajudou muito aqui. Porem tenho um dúvida com a acl diretoria. No meu caso não esta funcionado, ou seja o ip setado no ip.diretoria tem acesso restrito aos sites sitedos no sites.negado.

Mas parabens muito bem o Artigo.
Att,

[14] Comentário enviado por waldemf em 26/07/2012 - 15:16h

Poste su configuração aqui, apra poder analisar melhor. Você colocou o ! no final da ACL?

[15] Comentário enviado por ricardo_TI em 26/07/2012 - 15:34h

Segue squid.conf

http_port 3128 transparent
visible_hostname internet
error_directory /usr/share/squid/errors/Portuguese
hierarchy_stoplist cgi-bin?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 2048 MB
maximum_object_size_in_memory 200 KB
maximum_object_size 3 GB
minimum_object_size 0 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
access_log /var/log/squid/access.log squid
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 5048 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_swap_log /var/spool/squid/swap.log
cache_mgr [email protected]
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 10 20% 2280
refresh_pattern ^gopher: 10 0% 1440
refresh_pattern . 15 20% 2280

# Definicao das ACLs # ACLs sao responsaveis por limitar as portas que o proxy ira usar
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 192.168.0.0/255.255.255.0
acl redelocal src 192.168.0.0/24
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80

# Grupos de Acesso
acl Diretoria src "/etc/squid/ip.diretoria"
acl Funcionarios src "/etc/squid/ip.funcionarios"
#acl Bloqueados src "/etc/squid/ip.bloqueado"

# Sites Permitido/Negado
acl SitesPermitido url_regex -i "/etc/squid/sites.permitido"
acl SitesNegado url_regex -i "/etc/squid/sites.negado"
acl PalavrasNegada url_regex -i "/etc/squid/palavras.negado"

# Ativando as ACLs Personalizadas
http_access allow SitesPermitido
http_access deny SitesNegado
http_access deny PalavrasNegada
http_access allow Diretoria !SitesNegado
http_access allow Funcionarios
http_access deny all

#Controle de Banda
#acl grupo1 src "/etc/squid/grupo1"
#acl grupo2 src "/etc/squid/grupo2"
#acl grupo3 src "/etc/squid/grupo3.ilimitado"
#delay_pools 3
#delay_class 1 2
#delay_parameters 1 1048576/1048576 1048576/1048576
#delay_parameters 1 -1/-1 -1/-1 |Sem limite de banda
#delay_access 1 allow grupo1
#delay_class 2 2
#delay_parameters 2 1048576/1048576 1048576/1048576
#delay_access 2 allow grupo2
#delay_class 3 2
#delay_parameters 3 -1/-1 -1/-1
#delay_access 3 allow grupo3

# Bloqueando Madrugada
#acl madrugada time 00:00-06:00
#http_access deny madrugada

# Travando micros locais para usaram o proxy #****Importante essas duas LInhas estarem no final do arquivo***
http_access allow localhost
http_access allow redelocal

Muito obrigado pela atenção.

Att,

[16] Comentário enviado por waldemf em 26/07/2012 - 16:41h

Aparentemente sua configuração está certa, uma pergunta você configurou o proxy no browser da cliente, no caso da máquina da Diretoria?

[17] Comentário enviado por waldemf em 26/07/2012 - 16:42h

Cole aqui também o conteudo do do arquivo Diretoria.

[18] Comentário enviado por ricardo_TI em 26/07/2012 - 17:02h

ip.diretoria

192.168.0.53
192.168.0.60
192.168.0.80

IP, 53 é o meu que estou usando para testar, e 60, e 80 dos diretores da empresa.

E nos navegadores eu não configurei nada.


[19] Comentário enviado por waldemf em 26/07/2012 - 17:55h

Cara configura no navegador e faz o teste.
Acredito que seja isso. Boa sorte.

[20] Comentário enviado por ricardo_TI em 27/07/2012 - 13:06h

Fica o mistério, configurei o proxy, tambem não funcionou... Vou pesquisar mais, caso eu ache a solução posto aqui.

Obrigado!

Tirando isso, esta rodando 100% o squid. ;D

Att,

[21] Comentário enviado por nacs_ibc em 22/08/2012 - 20:08h

so uma duvida....

acl localhost src 127.0.0.1/255.255.255.255 # Troque pela faixa da sua rede local
acl redelocal src 192.168.0.0/24
acl to_localhost dst 127.0.0.0/8


tenho que fazer a troca somente na linha acl REDELOCAL ? ou tenho que colocar nas outras tambem..? grato !!!

[22] Comentário enviado por doldan em 23/08/2012 - 21:27h

Ricardo TI
na linha onde vc coloca:
http_access allow Diretoria !SitesNegado

esta dizendo que está permitido o acesso de quem estiver na acl Diretoria, mas restringindo o acesso do que estiver em SitesNegado, utilizo pareceido com isso no meu squid.
Essa linha do "squid.conf" permite algo exceto o que estiver após o "!".
utilizo esse sistema ao contrario do que vc esta usando ai, proibo algo exeto o que esta após o "!"
Ex.: uso assim:
http_access deny !internet
onde resrinjo o acesso a internet, com exceção de quem estiver no arquivo "internet", então no seu caso, esta liberando o acesso do grupo Diretoria, menos ao que estiver restrito no arquivo "sitesnegado".
Creio ser esse o seu problema ai, caso eu tenha entendido corretamente.

[23] Comentário enviado por edurando em 27/10/2012 - 12:54h

Olá,

Gostaria de configurar o squid com uma regra de controle de banda que derrubasse a banda de acesso a um determinado site. Velocidade baixa mesmo, não um bloqueio. Por exemplo: o acesso ao facebook fica liberado, mas a velocidade cai consideravelmente deixando o usuário sem paciência de continuar a navegação, desistindo dele. Pode ser uma alternativa válida, pois acredito que o bloqueio total incentiva o usuário a usar outras alternativas para burlar o sistema. Sou novo na área e gostaria de uma mãozinha.
Pode me ajudar?

[24] Comentário enviado por paulosilv123 em 02/05/2013 - 20:58h

BOa noite tenho uma unica duvida.


quando eu digo

http_access deny SitesNegado, ele só irar negar oque esta dentro de /etc/squid3/SitesNegado é ?

exemplo:

no meu

/etc/squid3/SitesNegado

só tem o site do facebook.com.br

/etc/squid3/SitesLiberados

só o globo.com

ai como fica só vai bloquear oque tem em sitesnegado é ?

desde já agradeço a todos.

[25] Comentário enviado por waldemf em 03/05/2013 - 09:59h

Olá, Paulosilv123
Exatamente, tudo que estiver no arquivo "SitesNegados" será bloqueado conforme a leitura do squid no arquivo antes de permitir ou negar sua solicitação, quando ele ler o arquivo e checar o que tem que ser feito na acls "http_access deny" ele efetua o bloqueio somente do que ele leu no arquivo de bloqueio.

[26] Comentário enviado por rodrigocontrib em 26/07/2014 - 17:19h

Olá amigo,
Sabe se da para eu fazer o controle de banda da rede torrent?
Quero liberar os torrents locais mas limitar a uma taxa relativa para os usuarios da rede.
Obrigado pelo artigo, me foi muito util :)
OBS : testei no meu ambiente e tudo funcionou bem.
Quero auxiliar com a utilização do parametro include para deixar o arquivo mais limpo, eu faço um include para o arquivoi /etc/squid/cond.d/myconf.conf isso é bom porque eu separo os tipos de configuração do ambiente, deixando um para o software e outro para as minhas acls
:)

[27] Comentário enviado por williammessias em 24/10/2014 - 10:45h

Show de bola este artigo. Parabéns!

[28] Comentário enviado por fcmorini em 24/04/2015 - 08:12h

Muito bacana o artigo, só fiquei com uma duvida na parte 2...
se eu tenho um link de 2048 kbps e quero transformado em bytes, o calculo não seria 2048 * 1024 / 8 = 262144 bytes?
enquanto seu artigo diz o seguinte.
...A forma de calcular a largura de banda ideal para cada usuário é da seguinte madeira:
Um link de 2 megabit (2048 Kbits) corresponde a 526.848 bytes por segundo. Na regra do Squid, sempre usamos bytes, por isso devemos lembrar de fazer a conversão que é bem simples, dividimos o valor em kbits por 8 e multiplicamos por 2048 para ter o valor em bytes. * GUARDE ESSA REGRA. ...

obrigado!


Contribuir com comentário