SQUID: Autenticação em banco de dados MySQL cruzando IP/MAC/USUÁRIO e SENHA

Integrar o SQUID com um banco de dados MySQL e efetuar a autenticação dos usuários baseando-se em usuário/senha/IP/MAC por meio da external_acl, irei abordar desde a instalação até os testes.

[ Hits: 74.124 ]

Por: Thiago Fernandes de Melo em 03/02/2011 | Blog: http://www.hospedarfacil.com.br


Configuração do squid.conf



Abra o arquivo e edite-o da seguinte forma:

# vim /usr/local/squid3.2/etc/squid.conf

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

# - Autenticacao efetuada em banco de dados mysql (usuario/senha/ip/mac)
auth_param basic children 5
auth_param basic credentialsttl 2 hours
authenticate_cache_garbage_interval 10 minutes
authenticate_ttl 10 minutes
authenticate_ip_ttl 0 seconds
auth_param basic realm Autenticador, Digite seu login e senha
auth_param basic program /usr/local/squid3.2/lib/mysql_auth

#Tabela de usuarios
acl Usuarios proxy_auth "/usr/local/squid3.2/passwd"

#Verificando se o Usuario pode conectar-se através da maquina solicitante
external_acl_type Block_User %LOGIN %SRC %SRCEUI48 /usr/local/squid3.2/etc/SRCMACAUTH.sh
acl Block_src external Block_User
http_access deny !Block_src

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /usr/local/squid3.2/var/cache
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação
   3. Criando os autenticadores e banco de dados
   4. Testando autenticadores
   5. Configuração do squid.conf
   6. Considerações finais
Outros artigos deste autor

Configurando Squid para liberação de messenger em horário específico, dentre outros

Skype: Restringindo acesso não autorizado usando firewall Linux

Configurando Apache + MySQL + Manipulação de dados com PHP

Leitura recomendada

Manual traduzido do Squid - Parte 3

Bloqueando o Messenger com iptables e Squid

Squid balanceado com LVS

Squid autenticado - Instalar e configurar

Proxy transparente com Squid, com controle de banda e bloqueio por horários

  
Comentários
[1] Comentário enviado por rogeriojlle em 03/02/2011 - 20:25h

Muito bom!

mas onde:
WHERE `USUARIO` LIKE \''.$nome.'\';';

não seria:
WHERE `USUARIO` LIKE \''.$nome.'\";'; ?

[2] Comentário enviado por removido em 03/02/2011 - 21:18h

Ótimas informações. Gostei !

Abraço.

[3] Comentário enviado por maran em 05/02/2011 - 12:06h

Show de bola velinho!

Ótimo artigo, como sempre!

[4] Comentário enviado por obernan em 06/02/2011 - 22:37h

Ola amigo boa noite, este squid que voce disponibilizou o link, na segunda pagina, nao instala !!!!!

[5] Comentário enviado por m4tri_x em 06/02/2011 - 23:16h

Boa noite,

Rogerio, vou dar uma analisada mas acredito que foi um erro meu na hora de escrever o código, de qualquer forma eu confirmo e depois posto aqui.
Fabio, valeu cara ;D sumido... hehe
Obernan, siga os passos novamente, depois de baixar execute a linha para compilar, caso dê algum erro poste aqui as ultimas linhas...

Thalysson tnks brother...

[]'s

[6] Comentário enviado por jeferson em 10/02/2011 - 16:31h

Boa tarde pessoal,

tenho uma dúvida, é possível implementar essa autenticação com um proxy transparente, se não for possível, como posso fazer para que nenhum usuário mais experto remova a configuração de proxy do navegador. Gostaria de ter autenticação e impossibilitar que qualquer usuário consiga navegar sem passar pelo proxy.

Obrigado e aguardo.

[7] Comentário enviado por visudnetwork em 10/02/2011 - 16:38h

Boa tarde,

Jeferson, até onde eu sei não é possivel, para essa situação utilizamos o PDC, pode ser feito com o SAMBA4 e administrado pelo console da m$ ou então fazer tudo pelo Windows mesmo.

Utilizando a opção para definição do Proxy e desativando a alteração do mesmo, você pode dividir por departamentos as GPO's sendo assim estabelecendo diversos tipos de permissão diferente.

Hoje em dia tem que saber explorar o melhor de cada solução....


[]'s

[8] Comentário enviado por jeferson em 10/02/2011 - 17:05h

Olá visudnetwork, olha, desculpe minha ignorância, mas não entendi muito bem a sua explicação. Eu gostaria de usar algum tipo de autenticação no proxy, ter um controle de permissões a sites para acessar, tipos de arquivos para downloads e ter a garantia que nenhum usuário navegará sem passar pelo firewall e o proxy. Fazer uma política com muito recursos para auditorias.

[9] Comentário enviado por visudnetwork em 11/02/2011 - 12:41h

Olá Jeferson, q nda cara, acho que eu não soube explicar direito, vamos lá. você falou sobre a questão dos usuarios retirarem o proxy do navegador no caso de não haver o transparent proxy.

Eu falei que para resolver essa situação você pode fazer um servidor de dominio, dê uma boa lida nos artigos relacionados a esse assunto aqui no VOL, creio que para fazer transparent proxy você tenha que abrir mão da autenticação, porém no caso de haver a necessidade de pedir autenticação você pode optar por utilizar duas soluções diferentes, o proxy em linux e o servidor de dominio.

A finalidade do servidor de dominio é restringir o acesso a configurações locais, ou seja, o usuario liga a maquina porém não consegue efetuar nenhuma alteração nas configurações do internet explorer, dessa forma você especifica que deverá ficar configurado o proxy no navegador e que o usuario não terá permissão de desfazer essa configuração.


Acho que agora consegui explicar um pouco melhor... Sobre a questão do dominio, dê uma boa lida aqui no VOL, tem como fazer com o SAMBA também.

[]'s e qualquer coisa estou a disposição.



[10] Comentário enviado por jeferson em 16/02/2011 - 09:04h

Visudnetwork, valeu mesmo, consegui entender bem, é essa solução que procuro, obrigatoriedade na autenticação e impossibilitar o usuário de remover as configurações de proxy, vou ler os artigos e tentar implementar. Novamente agradeço.

Um abraço.

[11] Comentário enviado por R.S.P Andre em 25/03/2011 - 21:54h

Boa Noite.
cara estou tendo um erro com o SRCMACAUTH.sh.
Quando faço o teste com o mesmo recebo o seguinte erro:"ERROR 1054 (42S22) at line 1: Unknown column 'SRC' in 'field list'"

O que será que pode estar acontecendo??

Aqui esta meu SRCMACAUTH.sh

#!/bin/bash
while read user src mac
do
if [ `echo "SELECT SRC FROM Proxy_users WHERE USUARIO LIKE '"$user"' AND SRC LIKE '"$src"' AND MAC LIKE '"$mac"'" |mysql SQUIDTESTE -u USUARIO -pSENHASQL|grep -v "ATIVO\|SRC"` ]
then

echo OK
else

echo ERR
fi
done
..
Sob o Proxy_users o meu esta assim mesmo..

Desde já agradeço..
Um grande abraço e obrigado pela sua contribuição aqui no VOL..


ABS

[12] Comentário enviado por jrutke em 26/04/2011 - 14:38h

R.S.P Andre
Eu sei que já faz um tempo que postou sua dúvida, e creio que já a deve ter solucionado, porém outros deverão ter o mesmo problema, então postarei a solução.
Esse erro é causado devido à não haver o campo SRC na tabela Proxy_users, esse campo se refere ao ip digitado na autenticação. Então para solucionar, basta trocar os SRC por IP, e o seu problema estará solucionado.

Abraços
ótimo tutorial
Parabéns!


[13] Comentário enviado por R.S.P Andre em 26/04/2011 - 19:47h

Cara valeu mesmo.

Por incrivel q pareça eu ainda estava cm essa duvida.
por motivos alheios eu acabei por deixando esse tuto pra tentar depois..
e como obtive sua resposta vo recomeça-lo.

Obrigado pela sua atenção.

[14] Comentário enviado por m4tri_x em 26/04/2011 - 21:18h

Olá, pessoal, me desculpem não ter respondido as perguntas, confeço que li porém estava adiando para responder quando estivesse mais tranquilo, estou desenvolvendo meu TCC que é relacionado com esse artigo que postei, em breve disponibilizarei um projeto para gerenciamento do squid com essas funcionalidades, de forma que apenas instalando com poucos comandos seja possivel controlar por uma interface web.

Espero que gostem, assim que tiver algo eu posto...

[]'s

[15] Comentário enviado por paulinunex em 22/06/2011 - 11:48h

Ao tentar executar o arquivo mysql_auth ele retorna o seguite erro:

root@ubuntu-virtual-machine:/usr/local/squid3.2/lib# ./mysql_auth

user senha
PHP Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /usr/local/squid3.2/lib/mysql_auth on line 17
PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /usr/local/squid3.2/lib/mysql_auth on line 19
ERR

Meu mysql_auth está abaixo:

#!/usr/bin/php

<?
$link = mysqli_connect("localhost", "adm", "senha");
if (!$link) {
printf("Erro ao conectar com o banco de dados: %s\n", mysqli_connect_error());
die();
}
$selectdb = mysqli_select_db($link, "SQUIDTESTE");
if (!$selectdb) {
printf("Erro ao abrir o banco de dados: %s\n", mysqli_error($link));
die();
}
while ( fscanf(STDIN, "%s %s", $nome, $senha) ) {
$select = 'SELECT * FROM `Proxy_Users` WHERE `USUARIO` LIKE \''.$nome.'\";';
$Query = mysqli_query($link, $select);
$nrRegistros = mysqli_num_rows($Query);
$erro = true;
while ( $Registro = mysqli_fetch_array($Query) ) {
$erro = false;
if ( md5($senha) == $Registro['SENHA'] ) printf("OK\n");
else printf("ERR\n");
}
if ($erro) printf("ERR\n");
}
?>

Qual o meu erro?

[16] Comentário enviado por angkor em 31/10/2011 - 10:49h

Prezados bom dia,

Show de bola esse material, mas tenho uma dúvida.

Seria possivel usar essa solução para que o squid faça essa busca na base de dados do servidor de e-mail que está em outra maquina? Dessa forma a autenticação seria baseada no usuário (conta de e-mail) e senha (senha do e-mail).

Atenciosamente


[17] Comentário enviado por m4tri_x em 01/11/2011 - 08:27h

Bom dia angkor, da para fazer sim, basta apontar o servidor de destino da conexão mysql, usuário e senha, localizar na table que possui o usuario/senha. Você terá que fazer algumas adaptações no script e tratar os resultados, nada demais.

Estou desenvolvendo uma versão em php para gerenciamento de servidores com diversos recursos, estou meio sem tempo para efetuar as modificações para ficar da forma como vc precisa porém caso você queira ir alterando, vai postando os erros que agente tenta te ajudar.

Att,
Thiago.

[18] Comentário enviado por angkor em 01/11/2011 - 09:18h

Vlw Thiago,
Eu vou iniciar alguns testes hoje e provavelmente amanhã posto o resultado aqui.

T+

[19] Comentário enviado por angkor em 03/11/2011 - 14:47h

Bom galela, vou dar o feedback,

Tenho um servidor de e-mail interno rodando ubuntu que faz relay, dei as devidas permissões na base de dados, especificamente na tabela onde ficam armazenados as contas, depois fui em outra maquina da rede e só adaptei o script mysql_auth acima para minha realidade e funcionou beleza, na verdade tive alguns Warning mas ele sempre me retornava o OK ou ERR.

Agora tenho alguns desafio, o primeiro é fazer esse script funcionar no pfsense e o segundo é fazer o squid que está rodando nesse pfsense autenticar com esse script.

t+

[20] Comentário enviado por SPH em 09/02/2012 - 10:36h

Aí parabens pelo tutto.
Mas eu fui seguir ele e recebi um erro como entendo pouco de shell script estou me batendo um monte. Segue o erro se puder dar uma força.

erro recebido na fase de teste de autenticação.
ao executar o comando :
#/usr/local/squid3.2/etc/SRCMACAUTH.sh
usuario 192.168.x.x oo:oo:oo:oo:oo
/usr/local/squid3/etc/SRCMACAUTH.sh: line 4: [: 192.168.x.x: esperado operador binário
ERR
mexi um monte no script mas não funfa.

Att eberson Muenchen

[21] Comentário enviado por SPH em 09/02/2012 - 11:10h

eu tava no desespero fui conferir o motivo do erro o nome de usuario,ip e mac estavam duplicados no BD hehehe

[22] Comentário enviado por jorgerabello em 13/10/2015 - 18:35h

Boa tarde m4tri_x, em primeiro lugar parabéns pela iniciativa e excelente tutorial, segui o tutorial mas na hora de autenticar apenas aparece uma tela em branco.
Eu consigo a partir do servidor proxy linux e do cliente executar ping nos sites mas não abre a janela para autenticar.
O squid.conf e base de dados estão identicos aos do tutorial.
OBS: o arquivo mysqlt_auth não entrou em execução (acho que é isso) mas por que ?

Grato !!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts