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

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

Desenvolvimento Web - Simples dicas de segurança

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

Por que eu pago por 10 megas, mas só faço download a 1 mega?

O poder do SSH

Software Livre - Muito mais que somente tecnologia

Leitura recomendada

Configurando o Squid no Slackware

Squid avançado + OpenLDAP

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

Instalando e configurando o Squid no Slackware

Administrando usuários do Squid via web como o Admuser

  
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