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: 68.254 ]

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

OpenVPN para clientes Windows no Debian Squeeze

Monitoração com Zabbix no Debian Squeeze

Leitura recomendada

Autenticando usuários do Squid em um banco de dados MySQL

Bloqueando conteúdo com Squid no RedHat 9

Squid autenticando com firewall x CNS e conexão segura da Caixa

Squid autenticando em Windows 2003 com msnt_auth

Criando delay pools (Proxy/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 info@artemidia.net
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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts