Controle de clientes e acessos no Squid

Esse artigo mostra como criar e usar um script no Squid prontinho para um controle de clientes, acessos e downloads.

[ Hits: 74.202 ]

Por: Djair Dutra C. Jr. em 15/02/2006


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":

#!/bin/sh

# Controle do Squid Versão 0.1
# Originalmente desenvolvido por Djair Dutra C. Jr.
# djairdutra@hotmail.com ou djair@radioconnect.com.br

reload_squid (){
/etc/init.d/squid reload
}

add_cli (){

typec=
ipcli=

ipcli=$(dialog --stdout --inputbox "DIGITE O IP DO CLIENTE:" 0 0)

typec=$(dialog --stdout --menu "ESCOLHA O TIPO DE ACESSO DO CLIENTE:" 0 0 0 1 'ACESSO TOTAL' 2 'ACESSO RESTRITO')

   if [ $typec == '1' ]; then
   echo "$ipcli" >> /etc/squid/acesso_total
   reload_squid &&
   start
  
   elif [ $typec == '2' ]; then
   echo "$ipcli" >> /etc/squid/acesso_restrito
   reload_squid &&
   start

   else
   start

   fi
}

del_cli (){

delcli=$(dialog --stdout --inputbox "DIGITE O IP DO CLIENTE QUE DESEJA EXCLUIR:" 0 0)

if [ $delcli == "" ]; then

   dialog --stdout --msgbox "OPCAO INVALIDA!" 0 0
   start

else

   cat /etc/squid/acesso_total | grep -iv $delcli > /tmp/delcli &&
   cat /tmp/delcli > /etc/squid/acesso_total &&

   cat /etc/squid/acesso_restrito | grep -iv $delcli > /tmp/delcli2 &&
   cat /tmp/delcli2 > /etc/squid/acesso_restrito &&

   reload_squid &&
   start
fi

}

add_exc (){

addexc=$(dialog --stdout --title "ADICIONAR PALAVRAS AS EXCECOES DO BLOQUEIO" --inputbox "

Digite a palavra que deseja adicionar na lista de exceções dos bloqueios.

OBS: Se a palavra sexo (conteúdo pornográfico) estiver na lista de bloqueios, você pode abrir uma exceção para o site sexoesaude.com.br (site sobre saúde). Dessa forma a palavra sexo continuará bloqueada, mas haverá uma exceção para o site sexoesaude.com.br" 0 0).

   if [ $addexc == "" ]; then
   dialog --stdout --msgbox "NAO FOI ESCOLHIDA NENHUMA PALAVRA." 0 0
   start

   elif [ $? == '2' ]; then
   start

   else
   echo "$addexc" >> /etc/squid/liberado
   reload_squid && start
fi

}

list_view(){

view=$(dialog --stdout --title "VISUALIZAR LISTA" --menu "Escolha a lista que deseja visualizar." 0 0 0 1 'LISTA DE BLOQUEIOS' 2 'LISTA DE EXCECOES' 3 'LISTA DE DOWNLOADS BLOQUEADOS' 4 'LISTA DE CLIENTES COM ACESSO TOTAL' 5 'LISTA DE CLIENTES COM ACESSO RESTRITO')

if [ $view == '1' ]; then
dialog --title "LISTA DE PALAVRAS BLOQUEADAS" --textbox /etc/squid/bloqueado 0 0
start

elif [ $view == '2' ]; then
dialog --title "LISTA DE EXCECOES DOS BLOQUEIOS" --textbox /etc/squid/liberado 0 0
start

elif [ $view == '3' ]; then
dialog --title "LISTA DE ARQUIVOS BLOQUEADOS PARA DOWNLOAD" --textbox /etc/squid/download 0 0
start

elif [ $view == '4' ]; then
dialog --title "LISTA DE CLIENTES COM ACESSO TOTAL" --textbox /etc/squid/acesso_total 0 0
start

elif [ $view == '5' ]; then
dialog --title "LISTA DE CLIENTES COM ACESSO RESTRITO" --textbox /etc/squid/acesso_restrito 0 0
start

elif [ $? == '2' ]; then
start

fi

}

add_word (){

addword=$(dialog --stdout --title "ADICIONAR PALAVRAS AO BLOQUEIO" --inputbox "Digite a palavra que deseja adicionar na lista de bloqueios. Qualquer site que tenha uma palavra da lista em seu endereço será bloqueado e exibido uma mensagem.

   if [ $addword == "" ]; then
   dialog --stdout --msgbox "NAO FOI ESCOLHIDA NENHUMA PALAVRA." 0 0
   start

   elif [ $? == '2' ]; then
   start

   else
   echo "$addword" >> /etc/squid/bloqueado
   reload_squid && start
fi

}

del_word (){
delword=$(dialog --stdout --title "REMOVER PALAVRAS DO BLOQUEIO" --inputbox "Digite a palavra que deseja remover da lista de bloqueios.

OBS: É importante lembrar que quando uma palavra for excluída desta lista, não será mais bloqueada. Em alguns casos é aconselhável adicionar uma exceção ao bloqueio." 0 0)

if [ "$delword" == "" ]; then
   dialog --title "CAMPO EM BRANCO" --msgbox "Não foi digitada nenhuma palavra para exclusão." 0 0
   start

elif [ $? == '2' ]; then
start

else
   # MINHA MANEIRA DE EXCLUIR UMA LINHA DE UM ARQUIVO COM SEGURANCA
   cat /etc/squid/bloqueado | grep -iv $delword > /tmp/bloqueado.tmp &&
   cat /tmp/bloqueado.tmp > /etc/squid/bloqueado &&
   reload_squid && start
fi

}

del_download (){

deldownload=$(dialog --stdout --title "REMOVER EXTENSOES DE ARQUIVOS DO BLOQUEIO DE DOWNLOADS" --inputbox "Digite a extensão do arquivo que deseja remover da lista de bloqueios de downloads." 0 0)

if [ "$deldownload" == "" ]; then
   dialog --title "CAMPO EM BRANCO" --msgbox "Não foi digitada nenhuma palavra para exclusão." 0 0
   start

elif [ $? == '2' ]; then
start

else
   # MINHA MANEIRA DE EXCLUIR UMA LINHA DE UM ARQUIVO COM SEGURANCA
   cat /etc/squid/download | grep -iv $delword > /tmp/download.tmp &&
   cat /tmp/download.tmp > /etc/squid/download &&
   reload_squid && start
fi

}

add_download (){

adddownload=$(dialog --stdout --title "ADICIONAR ARQUIVOS AO BLOQUEIO DE DOWNLOADS" --inputbox "
Digite a extensão do arquivo que deseja adicionar na lista de bloqueio de downloads.
OBS: LEMBRE-SE DE COLOCAR O SIFRAO ($) AO FINAL DE CADA EXTENSAO DE ARQUIVO.

Exemplos de extensoes:

.exe$ = PROGRAMAS
.avi$ = VIDEOS
.wmv$ = VIDEOS
.mp3$ = MUSICA/AUDIO
.iso$ = IMAGENS/CLONES DE CDS OU HDS
.zip$ = ARQUIVOS COMPACTADOS

" 0 0)

   if [ $adddownload == "" ]; then
   dialog --stdout --msgbox "NAO FOI ESCOLHIDA NENHUMA PALAVRA." 0 0
   start

   elif [ $? == '2' ]; then
   start

   else
   echo "$adddownload" >> /etc/squid/download
   reload_squid && start
fi

}

del_exc (){

delexc=$(dialog --stdout --title "REMOVER PALAVRAS DAS EXCECOES DE BLOQUEIO" --inputbox "Digite a palavra que deseja remover da lista de exceções." 0 0)

if [ "$delexc" == "" ]; then
   dialog --title "CAMPO EM BRANCO" --msgbox "Não foi digitada nenhuma palavra para exclusão." 0 0
   start

elif [ $? == '2' ]; then
start

else
   # MINHA MANEIRA DE EXCLUIR UMA LINHA DE UM ARQUIVO COM SEGURANCA
   cat /etc/squid/liberado | grep -iv $delexc > /tmp/liberado.tmp &&
   cat /tmp/liberado.tmp > /etc/squid/liberado &&
   reload_squid && start
fi

}

start(){

menu=$(dialog --cancel-label "SAIR" --stdout --title "CONTROLE DE ACESSOS" --menu "Escolha uma opção" 0 0 0 1 'ADICIONAR PALAVRAS AO BLOQUEIO' 2 'ADICIONAR PALAVRAS AS EXCECOES' 3 'EXCLUIR PALAVRAS DO BLOQUEIO' 4 'EXCLUIR PALAVRAS DAS EXCECOES' 5 'ADICIONAR ARQUIVOS AO BLOQUEIO DE DOWNLOADS' 6 'EXCLUIR ARQUIVOS DO BLOQUEIO DE DOWNLOADS' 7 'ADICIONAR CLIENTES' 8 'REMOVER CLIENTES' 9 'VER LISTAS' 10 'SOBRE')

if [ "$menu" == '1' ]; then
add_word

elif [ "$menu" == '2' ]; then
add_exc

elif [ "$menu" == '3' ]; then
del_word

elif [ "$menu" == '4' ]; then
del_exc

elif [ "$menu" == '5' ]; then
add_download

elif [ "$menu" == '6' ]; then
del_download

elif [ "$menu" == '7' ]; then
add_cli

elif [ "$menu" == '8' ]; then
del_cli

elif [ "$menu" == '9' ]; then
list_view

elif [ "$menu" == '10' ]; then
dialog --title "SOBRE O CONTROLE DE ACESSOS" --stdout --msgbox "
CONTROLE DE ACESSOS E DOWNLOADS
===============================

Descricao.....: Controle de acessos do Squid
Versao........: 0.1
Distribuicao..: Conectiva Linux 10
Suporte.......: Djair Dutra C. Jr. / Radio Connect
Telefone......: (88) 9221-4351 / (88) 3631-2244
E-mail........: djair@radioconnect.com.br
" 0 0 && start

elif [ $? == '2' ]; then
exit

fi

}

start
Página anterior     Próxima página

Páginas do artigo
   1. Requisitos para a aplicação do script
   2. Configuração do Squid
   3. Iniciando o script
   4. Considerações finais
Outros artigos deste autor

Layer7 e compilação do kernel mole-mole com Conectiva 10

O poder do SSH

O que ainda falta pra você abandonar o Windows de vez?

Personalizando o Ubuntu 9.04 com Screenlets

Falta de padronização no Linux

Leitura recomendada

Controlando acesso às páginas do Apache na rede interna

Squid autenticando em base Active Directory

Integrando autenticação do Squid ao Active Directory

Corrigindo a falha "WARNING! Your cache is running out of filedescriptors" - Squid2.7STABLE9 Slackware 12

Manual traduzido do Squid - Parte 3

  
Comentários
[1] Comentário enviado por metall em 15/02/2006 - 08:19h

quando vc executa o script ta com este erros...
./squid_add: line 264: unexpected EOF while looking for matching `"'
./squid_add: line 274: syntax error: unexpected end of file
Usando Conectiva 10
soh pra te reportar o problema...

Abraco.

[2] Comentário enviado por bosetti em 15/02/2006 - 08:35h

Cara, gostei do seu artigo, queria ter encontrado ele 4 meses atrás, hehe
Agora não preciso mais =p
Mas vou testar mais tarde aquele "programa" (o_O"?)que você criou, que achei muito bom!

Continua assim cara,
[]'s
Rafael Bosetti

[3] Comentário enviado por agk em 15/02/2006 - 13:59h

Parabéns, muito bom o seu artigo. É uma forma de deixar mais fácil o manuseio do squid para usuários menos experientes.

[4] Comentário enviado por laranjeira em 15/02/2006 - 20:57h

Parabens pelo artigo, tenho estudado o squid e não estou sabendo fazer um que ele bloquei download por exemplo ...poderia me mandar o arquivo que contem as extenções para bloqueio de download.. Desde ja agradeço pela atenção.
laranjeira_jr@hotmail.com

[5] Comentário enviado por malacker em 17/02/2006 - 16:50h

Depois de ver o código fonte aqui no VOL percebo qie algumas linhas apareceram quebradas e podem ocasionar erros. Corrigi este problema colocando o script no local apropriado para download:
http://www.vivaolinux.com.br/scripts/verScript.php?codigo=1731

Até logo!!!

[6] Comentário enviado por bosetti em 17/02/2006 - 16:55h

Eu ainda não peguei esse script pra testar, mas já que você disse que pode dar erros, gostaria que me passasse então!

rafaelbosetti hotmail com

[]'s
Rafael Bosetti

[7] Comentário enviado por cauan em 20/02/2006 - 12:28h

Parabéns, o script parece bem completinho. A algum tempo fiz um semelhante. Só não uso menus, é tudo direto na linha de comando.

De cara, sem testar o script as únicas coisas que recomendo são usar a função tempfile e manter um backup dos arquivos que modificar.

a função que criei para revogar as permissão de download dos usuários ficou +- assim:

del_dl () {
# Retira permissao de download do usuario
${ECHO} "removendo permissão de download do usuário: ${1}."
TEMP=`tempfile -m 0600`
# Cria lista de usuarios sem o nome do usuario em arquivo temporario
${GREP} -v ${1} ${DL_FILE} > ${TEMP}
# Faz um backup da lista atual
${CP} ${DL_FILE}{,.old}
# Sobrescreve a lista atual pela temporaria
${MV} ${TEMP} ${DL_FILE}
}

Att
Cauan C. Guimarães

[8] Comentário enviado por technoroot em 17/03/2006 - 12:32h

Tambem gostei muito do script e gostaria de receber um e-mail com as linhas corretas para evitar erros, mas ficou muito bom mesmo...

Valeu pela sua contribuição com a nossa comunidade!!!

[9] Comentário enviado por andersonunai em 19/04/2006 - 23:06h

Parabéns, Djair... ótimo artigo... Att Anderson

[10] Comentário enviado por mineiro em 01/05/2006 - 21:13h

Olá, gostei do seu script e gostaria de recebe-lo por email com as correções dos erros. Não estou sabendo bloquear downloads poderia me mandar o script que contem as extenções para bloqueio de download? Desde ja agradeço a atenção e parabens pelo artigo.
jbbs@terra.com.br

[11] Comentário enviado por eduradaelli em 26/07/2006 - 00:05h

Muito bom seu artigo.
Tive que fazer alguns ajustes para funcionar no debian, mas esta ok.
Abraços

[12] Comentário enviado por dill_tche em 23/08/2006 - 09:32h

muito bom cara, to começando a ver squid e ta me ajudando um monte.

[13] Comentário enviado por technoroot em 23/08/2006 - 09:42h

Cara gostei muito, estou tentando criar algo assim so que para rodar no browser, minha esposa programa em php, só tirando uma duvida antes de começarmos tem algo a mais que precisa fazer para o php ler este arquivo e jogar no browser?

Se puderem me dar uma dica eu agradeço muito!!!

Ate mais ver!

[14] Comentário enviado por zennh em 23/08/2006 - 10:27h

legal!!!

mas onde eu salvo esse script ???

em que pasta ?????

[15] Comentário enviado por mbcbs07 em 08/09/2006 - 18:33h

Boa dica, agora me diz uma coisa.
Pra eu colocar os ip´s, tanto de acesso_total quanto no acesso_restrito. Eu vou separar por , ou por ; ou vou ter de pular uma linha.
Aguardo retorno.

[16] Comentário enviado por uranium em 02/11/2006 - 14:39h

Olá voce tem algum script que so deixe passar internet somente aqueles ips cadastrados no dhcp?

[17] Comentário enviado por Golinelli em 06/08/2008 - 17:56h

OLa!!! Estou desenvolvendo um script parecido com o seu mas como sou iniciante em shell vai me ajudar muito esse..

Parabéns !! vc me deu boas ideias para melhorar o meu,, e tambem estou fazendo com dialog,. mas sem restricões de acesso onde vou utilizar..

Gostei do script para checar se o servidor ou determinado host esta pingando ,vou adaptar ele as minhas necessidades!!

Mais uma vez Parabéns!!

[18] Comentário enviado por morfetico em 01/04/2010 - 10:15h

Fiz um squema com apache e php que libera automaticamente palavra restrita por exemplo:
"sex" esta proibido mas sexta não pode ser proibido, coloquei no /usr/share/squid/error/Portuguese/ERROR_ACCESS_DENIED
um redirecionamento para uma pagina local com as variaveis dos endereços tanto da pequisa google quanto do endereço,
estas variaveis são analizadas e quando se for somente "sex" manda uma mensagem dizendo que não vai liberar e apareçe
um formulário para o usuário preencher se identificar e o motivo porque que a palavra deve ser liberada, este formulario
envia para o meu email e fico sabendo que alguem pediu pra liberar uma palavra que não libera de forma alguma.
Se a palavra for "sex" não libera se for "sexta" esta palavra é colocada no arquivo do squid de palavras liberadas e o cron
de minuto em minuto roda um script que verifica se houve alteração e executa o "squid -k ", pronto agora tenho sussego e
não preciso liberar manualmente palavra por palavra, isto libera a palavra em no máximo 1 minuto e não mais quando eu
abrir meu email, isto está funcionando redondinho. Fiz uma interface web com caixa de texto para eu adicionar e
excluir palavras para não ter que utilizar o putty o tempo todo, assim qualquer um pode trabalhar com segurança sem
ser o root. Tenho um problema com as caixas de texto que quando salvo envia a quebra de linha "^" essa porcaria
confunde o script que analiza a palavra e o negócio não funciona direito, ja coloquei o php pra rodar antes do2unix no
arquivo como root mas nao resolve, so estou utilizando atravéz do putty, se alguem sabe como fazer o html salvar em
um arquivo txt sem mandar "^" pro final da linha fico agradecido.

[19] Comentário enviado por eduardo_jst em 16/02/2011 - 17:12h

Alguem pode ajudar neste problema


Boa tarde, fiz a seguintes regras vendas_bloqueado (eduardo, cpd01) onde terao acesso em paginas q estao nas liberados em vendas_liberado e criei acls personalizada a cada usuario destes grupos,e apesar de serem do mesmo grupo, preciso liberar determinadas paginas a eduardo que cpd01 nao pode ter acesso e vice versa.
O problema que hora acessa, hora bloqueia as paginas que estão na liberação, se logo com eduardo primeiro acesso ok, mas ao deslogar e logar cpd01 ja bloqueia seus acessos liberados, se logar cpd01 primeiro acessa suas liberações ok, mas se deslogar e logar eduardo bloqueias suas liberações tb,

Alguem pode me dar um auxilio, pode me dizer pq esta tendo esta intermitencia? corrigir minhas regras?

fico no aguardo


#http_access allow usuarios acesso_livre

# ---- Regras de acesso por grupos
# ---- GRUPO VENDAS
acl vendas proxy_auth "/etc/squid/regras/grupos/vendas_bloqueado"
acl vendas_liberado url_regex -i "/etc/squid/regras/acessos/grupos/vendas_liberado"
http_access allow vendas_liberado
http_access deny vendas !vendas_liberado
http_access allow usuarios vendas

#***** Regras de acesso de usuarios por usuario

#----Usuario Eduardo-----#
acl eduardo proxy_auth "/etc/squid/regras/usuarios/eduardo_bloqueado"
acl eduardo_liberado url_regex -i "/etc/squid/regras/acessos/usuarios/eduardo_liberado"
http_access allow eduardo_liberado
http_access deny eduardo !eduardo_liberado
http_access allow usuarios eduardo


#----Usuario cpd01-----#
acl cpd01 proxy_auth "/etc/squid/regras/usuarios/cpd01_bloqueado"
acl cpd01_liberado url_regex -i "/etc/squid/regras/acessos/usuarios/cpd01_liberado"
http_access allow cpd01_liberado
http_access deny cpd01 !cpd01_liberado
http_access allow usuarios cpd01


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts