CONTROLE DE ACESSOS PELO SQUID
Publicado por Djair Dutra C. Jr. 24/02/2006
[ Hits: 9.189 ]
Enviei um artigo que na verdade deveria ser este script, mas tudo bem. Estou enviando agora o sript, porque algumas pessoas me reportaram erros na execução do código, que quando é publicado como arquivo são quebradas algumas linhas e realmente assim não funciona.
Requisitos para a aplicação do script
Desenvolvi este script na pressa e em apenas um dia deixei-o pronto. A necessidade era criar "rapidamente" uma solução amigável que fizesse o trabalho de controlar os acessos do Squid.
Já o coloquei para funcionar no cyber café do provedor onde trabalho e até agora não recebi nenhuma reclamação, mas admito que foi apenas o primeiro passo para um projeto maior. Este script ainda está cru.
Na verdade este script apenas acrescenta usuários ao Squid e permite criar uma lista de restrições para acessos e downloads. Não há nele nenhuma referência ao firewall (iptables) ou controle de banda (cbq). Com o script é possível:
Adicionar clientes ao Squid;
Excluir clientes.
Diferenciar clientes por tipo de acesso:
ACESSO TOTAL: Tem acesso total às páginas e não "cai" em nenhuma restrição de páginas, download ou velocidade do download.
ACESSO RESTRITO: Tem acesso, mas passa por todas as restrições criadas pelo administrador da rede. Não acessa sites pornográficos, sites hackers, nem faz downloads de arquivos especificados pelo administrador da rede.
Adicionar/excluir lista de restrições (URLs);
Adicionar/excluir lista de arquivos bloqueados para download;
Adicionar/excluir lista de exceções aos bloqueios.
Se, por exemplo, você bloqueou a palavra sexo, mas deseja abrir um site de nome sexoseguro, no qual não há conteúdo pornográfico, terá problemas. Neste caso você deverá adicionar a exceção sexoseguro. Dessa forma a palavra sexo continuará bloqueada, mas quando o site for sexoseguro, o acesso será liberado. Bacana, né?!?! :-)
Como já disse anteriormente, desenvolvi este script na pressa, portanto não pensei numa solução que abrangesse todas as distribuições Linux. Na verdade todos os comandos do script estão baseados na organização dos arquivos de um Conectiva Linux 10, mas podem ser editados para adaptar o script a qualquer outra distro.
Configuração do Squid
O script é baseado numa distribuição Conectiva Linux 10, com o Squid atualizado (2.5.STABLE9) pelo apt-get.
Veja a versão do seu Squid com o comando:
$ squid -v
Se você tiver tudo nas mãos, então vamos meter a mão na massa.
1. Dentro da pasta /etc/squid/, crie os seguintes arquivos (sem extensão):
acesso_total
acesso_restrito
bloqueado
liberado
download
2. Coloque as linhas abaixo nas ACLs do squid.conf sem alterar sua ordem:
############# DECLARANDO AS ACLs #############
# PCs com acesso total
acl acesso_total src "/etc/squid/acesso_total"
# PCs com acesso restrito
acl acesso_restrito src "/etc/squid/acesso_restrito"
# Lista de extensões bloqueadas para download (.avi .exe .wmv)
acl download url_regex -i "/etc/squid/download"
# Lista para bloqueio de sites
acl bloqueado url_regex -i "/etc/squid/bloqueado"
# Lista de exceções aos bloqueios
acl liberado url_regex -i "/etc/squid/liberado"
############# ATIVANDO AS ACLs #############
http_access allow acesso_total
http_access allow liberado
http_access deny download
http_access deny bloqueado
http_access allow acesso_restrito
http_access deny all
3. Crie conteúdos de teste para os arquivos vazios, conforme o exemplo:
acesso_total = IPs dos clientes com acesso total ao Squid;
acesso_restrito = IPs dos clientes com acesso restrito;
bloqueado = palavras de URLs que deseja bloquear;
liberado = exceções à regra anterior;
download = extensões de arquivos que não podem ser baixados. Exemplo:
$.exe
$.zip
$.iso
$.cab
4. Dê um restart ou um reload no Squid para testar. Se ocorrer algum erro, devem ser os arquivos vazios ou preenchidos incorretamente. Confira os IPs e as extensões.
5. Se desejar dar uma melhorada no visual e nas mensagens de erro do Squid, crie arquivos HTML com mensagens referentes ao bloqueio de páginas e downloads e coloque-os dentro do diretório /usr/share/squid/errors/Portuguese/.
Depois adicione a linha abaixo ao squid.conf, na seção error_directory, para que o Squid saiba onde estão os arquivos HTML de erro:
error_directory /usr/share/squid/errors/Portuguese
Adicione as linhas abaixo no squid.conf, na seção deny_info:
deny_info download.htm download
deny_info bloqueado.htm bloqueado
No exemplo acima criei os arquivos download.html e bloqueado.html com mensagens informando sobre as restrições o Squid.
Iniciando o script
Se todos os passos anteriores estiverem corretos, agora é só copiar o código-fonte abaixo pata um arquivo e correr pro abraço.
Não esqueça de tornar o arquivo executável através do comando:
chmod 0500 <nome_do_arquivo>
Script do "programa":
########### SCRIPT ###########
#!/bin/sh
atualiza () {
/etc/init.d/squid reload
cliente=""
ip=""
mac=""
tipoc=""
del_cli=""
busca_cli=""
exclusao=""
tipocliente=""
palavra=""
lista=""
}
excluir () {
if [ "$del_cli" == "" ]; then
dialog --stdout --msgbox "O campo está em branco. Esta operação será cancelada." 0 0
else
`cat /etc/squid/acesso* | grep -i $del_cli > /tmp/busca` &&
dialog --stdout --title "DADOS DOS CLIENTES QUE SERÃO EXCLUÍDOS" --textbox /tmp/busca 0 0
dialog --stdout --yesno "CONFIRMA A EXCLUSÃO DO CLIENTE?" 0 0
if [ $? = 0 ]; then
`cat /etc/squid/acesso_restrito | grep -v $del_cli > /etc/squid/acesso_restrito`
`cat /etc/squid/acesso_total | grep -v $del_cli > /etc/squid/acesso_total`
atualiza
dialog --stdout --msgbox "O Cliente foi excluído com sucesso!" 0 0
else
/etc/squid/squid_reload
fi
fi;
}
adicionar_total () {
echo "$ip" >> /etc/squid/acesso_total
atualiza
dialog --stdout --msgbox "O Cliente foi adicionado com sucesso!" 0 0
}
adicionar_restrito () {
echo "$ip" >> /etc/squid/acesso_restrito
atualiza
dialog --stdout --msgbox "O Cliente foi adicionado com sucesso!" 0 0
}
#dialog --msgbox "Verificar se o erro que está acontecendo na hora de excluir dados no meio de um alista é por causa do comando /etc/squid/squid_control, que reabre o form. Criar uma variável com o nome início, onde as variáveis são zeradas e substituir dos os /etc/squid/squid_config" 0 0
abertura=$(dialog --stdout --backtitle "SQUID CONTROL VERSÃO 0.1" --title 'MENU PRINCIPAL' --menu "Controle do Squid Proxy - Radio Connect" 0 0 0 1 'ADICIONAR CLIENTE' 2 'REMOVER CLIENTE' 3 'VISUALIZAR CLIENTES' 4 'ADICIONAR PALAVRAS (BLOQUEIOS/EXCEÇÕES)' 5 'REMOVER PALAVRAS (BLOQUEIOS/EXCEÇÕES)' 6 'VISUALIZAR (BLOQUEIOS/EXCEÇÕES)' 7 'TESTE DE CONEXÃO' 8 'SOBRE' 9 'FECHAR')
#########################################################################
if [ "$abertura" == '1' ]; then
cliente=$(dialog --stdout --inputbox "Digite o NOME do cliente: " 0 0)
ip=$(dialog --stdout --inputbox "Digite o IP do cliente:" 0 0)
mac=$(dialog --stdout --inputbox "Digite o MAC do cliente:" 0 0)
tipoc=$(dialog --stdout --menu "Escolha o tipo de acesso para o cliente: $cliente" 0 0 0 1 'Acesso total à internet' 2 'Acesso restrito à internet')
# CHECANDO CAMPOS EM BRANCO
if [ "$cliente" == "" ]; then
dialog --stdout --msgbox "O nome do cliente está em branco. Tente novamente." 0 0
/etc/squid/squid_control
elif [ "$ip" == "" ]; then
dialog --stdout --msgbox "O IP do cliente está em branco. Tente novamente." 0 0
/etc/squid/squid_control
elif [ "$mac" == "" ]; then
dialog --stdout --msgbox "O MAC do cliente está em branco. Tente novamente." 0 0
/etc/squid/squid_control
elif [ "$tipoc" == "" ]; then
dialog --stdout --msgbox "O tipo de acesso do cliente está em branco. Tente novamente." 0 0
/etc/squid/squid_control
else
if [ "$tipoc" == '1' ]; then
adicionar_total
elif [ "$tipoc" == '2' ]; then
adicionar_restrito
fi;
fi
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == '2' ]; then
exclusao=$(dialog --stdout --menu "BUSCA DE CLIENTES PARA EXCLUSAO:" 0 0 0 1 'POR IP' 2 'POR MAC' 3 'PESQUISAR NOME')
if [ "$exclusao" == '1' ]; then
del_cli=$(dialog --stdout --inputbox "Digite o IP do cliente:" 0 0)
excluir
elif [ "$exclusao" == '2' ]; then
del_cli=$(dialog --stdout --inputbox "Digite o MAC do cliente:" 0 0)
excluir
elif [ "$exclusao" == '3' ]; then
busca_cli=$(dialog --stdout --inputbox "Digite o nome do cliente ou ou apenas parte dele." 0 0)
`cat /etc/squid/acesso* | grep -i $busca_cli > /tmp/busca` &&
dialog --stdout --textbox /tmp/busca 0 0
fi
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == "3" ]; then
tipocliente=$(dialog --stdout --menu "Escolha o tipo de clientes" 0 0 0 1 'Clientes com acesso total à internet' 2 'Clientes com acesso restrito à internet')
if [ "$tipocliente" == '1' ]; then
dialog --textbox /etc/squid/acesso_total 0 0
elif [ "$tipocliente" == '2' ]; then
dialog --textbox /etc/squid/acesso_restrito 0 0
fi;
/etc/squid/squid_control
########################################################################
elif [ "$abertura" == "4" ]; then
tipopalavra=$(dialog --stdout --menu "Escolha a lista que deseja adicionar palavras:" 0 0 0 1 'BLOQUEIOS' 2 'EXCEÇÕES')
if [ "$tipopalavra" == '1' ]; then
palavra=$(dialog --stdout --inputbox "Digite a palavra que deseja adicionar à lista de bloqueios: " 0 0)
echo "$palavra" >> /etc/squid/bloqueado
atualiza
elif [ "$tipopalavra" == '2' ]; then
palavra=$(dialog --stdout --inputbox "Digite a palavra que deseja adicionar à lista de exceções: " 0 0)
echo "$palavra" >> /etc/squid/liberado
atualiza
fi
/etc/squid/squid_control
########################################################################
elif [ "$abertura" == "5" ]; then
tipopalavra=$(dialog --stdout --menu "Escolha a lista que deseja remover palavras:" 0 0 0 1 'BLOQUEIOS' 2 'EXCEÇÕES')
if [ "$tipopalavra" == '1' ]; then
palavra=$(dialog --stdout --inputbox "Digite a palavra que deseja remover da lista de bloqueios: " 0 0)
`cat /etc/squid/bloqueado | grep -v $palavra > /etc/squid/bloqueado`
atualiza
elif [ "$tipopalavra" == '2' ]; then
palavra=$(dialog --stdout --inputbox "Digite a palavra que deseja remover da lista de exceções: " 0 0)
`cat /etc/squid/liberado | grep -v $palavra > /etc/squid/liberado`
atualiza
fi
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == "6" ]; then
lista=$(dialog --stdout --menu "Escolha a lista que deseja visualizar" 0 0 0 1 'Lista de palavras bloqueadas' 2 'Lista de Excessões')
if [ "$lista" == '1' ]; then
dialog --textbox /etc/squid/bloqueado 0 0
elif [ "$lista" == '2' ]; then
dialog --textbox /etc/squid/liberado 0 0
fi;
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == "7" ]; then
destino=$(dialog --stdout --inputbox "Defina o endereço de destino:" 0 0 "200.253.131.10")
quant=$(dialog --stdout --inputbox "Defina a quantidade de pings enviados:" 0 0 "10")
tamanho=$(dialog --stdout --inputbox "Defina o tamanho dos pacotes:" 0 0 "64")
dialog --infobox "Aguarde enquanto o teste é realizado." 0 0
#if [ "$destino == "" ]; then
#dialog --msgbox "O valor do destino não foi definido." 0 0
#elif [ "$tamanho == "" ]; then
#dialog --msgbox "O valor do tamanho dos pacotes não foi definido." 0 0
#elif [ "$quant == "" ]; then
#dialog --msgbox "O valor da quantidade de pacotes não foi definido." 0 0
#else
ping -c $quant -s $tamanho $destino > /tmp/testping
dialog --title "RESULTADO DO TESTE" --textbox /tmp/testping 0 0
#fi
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == "8" ]; then
dialog --msgbox "SQUID CONTROL VESAO 0.1
Versão para: Conectiva Linux / Squid Cache 2.5
Desenvolvido por: Djair Dutra Cordeiro Jr.
djairdutra@hotmail.com / djair@radioconnect.com.br
(88) 9221-4351 / (88) 3631-2244" 0 0
/etc/squid/squid_control
#########################################################################
elif [ "$abertura" == "9" ]; then
clear
fi;
# Regras para o botão cancelar do menu principal
#clear
Script para instalação de um servidor web
Monitorar pppe-server, radius e proxy (estilo fastfood)
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (20)
Problemas com Driver NVIDIA (0)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)









