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

Por: Pedro Franca em 18/07/2012


Instalação e configuração



Instalando o Squid

O Squid é feito de apenas um arquivo de configuração. O ambiente que foi feito este procedimento, foi no Debian Squeeze.

Então vamos instalar o Squid. Execute:

# apt-get update
# apt-get upgrade
# apt-get install squid


Agora, vamos renomear o arquivo original do Squid, que está em: "/etc/squid/squid.conf"

Então execute:

# mv /etc/squid/squid.conf /etc/squid/squid.conf.padrao

Agora temos que criar um novo arquivo. Então, execute:

# touch /etc/squid/squid.conf

Agora temos que editar este arquivo novo. Execute:

# cd /etc/squid
# nano squid.conf


Dentro deste arquivo temos que colocar 4 linhas, por enquanto, são elas:

http_port 3128 # PORTA QUE O SQUID VAI USAR
visible_hostname Nome do Server # NOME DO SERVIDOR QUE O SQUID VAI LER
acl all src 0.0.0.0/0.0.0.0 # CRIA UM POLITICA DE ACESSO PARA TODOS, QUE INCLUI TODOS OS ENDEREÇOS DE IP POSSÍVEIS.
http_access allow all # CRIA UMA POLÍTICA DE ACESSO PARA TODOS, QUE INCLUI TODOS OS ENDEREÇOS DE IP POSSÍVEIS.


Salve e saia.

Agora, para testar o servidor reinicie o serviço. Então, execute:

# /etc/init.d/squid restart

Criando a configuração básica

O problema em deixar o arquivo com apenas estas 4 linhas, é que o Proxy fica muito aberto, e se não tiver um Firewall na sua rede, a situação fica ainda pior.

Mas acho que não é o caso de quem está lendo, porque um bom administrador de redes tem que ter um firewall na rede bem configurado.

Então, vamos gerar um arquivo mais completo, permitindo assim que só os micros da rede local acessem o proxy, e claro, definir mais políticas de segurança.

Então vamos lá, execute:

# nano /etc/squid/squid.conf

Dentro deste arquivo, adicione as seguintes linhas:

# Configuracoes Squid
http_port 3128 transparent # Tipo do proxy, no nosso caso transparente
visible_hostname nome # O nome do seu server
error_directory /usr/share/squid/errors/English # Idioma dos erros, no caso eu deixo Inglês, mas você pode colocar em portugues, mudando English para Portuguese
hierarchy_stoplist cgi-bin? # Quando o cache lotar, ele sobrescreve o cache
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 512 MB # Quantidade de memória RAM dedicada a cache
maximum_object_size_in_memory 200 KB # Determina o tamanho máximo na memória RAM dos arquivos que serão guardados no cache
maximum_object_size 3 GB # Tamanho máximo dos arquivos armazenado no cache do HD
minimum_object_size 0 KB # Tamanho mínimo dos arquivos armazenados no Cache do HD
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 # Arquivo onde ficam guardados os log do 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 # Onde fica guardado o cache dos logs
cache_log /var/log/squid/cache.log
cache_swap_log /var/spool/squid/swap.log
cache_mgr seuemail@seuprovedor.com.br # E-mail que aparece no erro da página ao ser bloqueada
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 são responsáveis por limitar as portas que o proxy irá usar
acl all src 0.0.0.0/0.0.0.0 # Política de acesso liberado para todos na rede usando o proxy
acl manager proto cache_object
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
acl SSL_ports port 443 563 # snews # Porta segura, você pode adicionar quantas porta você precisar
acl Safe_ports port 80 # http # Porta segura, você pode adicionar quantas porta você precisar

# Travando micros locais para usaram o proxy
http_access allow localhost # Importante essa duas linhas sempre está na final do arquivos
http_access allow redelocal # Importante essa duas linhas sempre está na final do arquivos


Salve e saia do arquivos. Reinicie o Squid:

# /etc/init.d/squid restart

    Próxima página

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

Monitoração com Zabbix no Debian Squeeze

O poderoso Nagios

OpenVPN para clientes Windows no Debian Squeeze

Leitura recomendada

Squid Plus 2007 para Debian 4

Squid + proxy transparente + autentificação + SSL

Squid autenticando em base Active Directory

Instalando o MySAR no CentOS 5.5

Squid com autenticação e ACLs apartir do grupos do Active Diretory

  
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