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

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


Introdução



Em um ambiente corporativo nos deparamos com os mais diversos acontecimentos possíveis e impossíveis. Se você implanta um mecanismo de autenticação no seu PROXY e não tem tempo de ficar monitorando FULL TIME ou que seja 10 minutos por dia, pode ter certeza que quando você dedicar algum tempo para essa tarefa vai ver que todos os usuários da sua rede utilizam a mesma senha. Que por acaso é a senha do gerente, que possui acesso completo.

E quando você perguntar a ele se passou a senha para alguém, ele com certeza vai falar que não. Isso vai acontecer porque é possível acontecer (Lei de Murphy). Ainda que algum dia você se depare com outro problema que irá aparecer. Agora que você viu que está tudo danado, vamos organizar melhor.

Objetivo

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.

Cenário

O ambiente de desenvolvimento será uma rede com 3 micros, um servidor com SQUID3 rodando no S.O Ubuntu 9.10 Server, nessa rede eu possuo 10 vendedores, dos quais 3 devem ter seus usuários restritos cada um a uma máquina, pois são responsáveis por elas e devido ao acesso completo também. Os outros 7 usuários utilizarão aleatoriamente.

Escopo:

Maquina1: davi.androide
IP: 172.16.122.13
MAC: 00:1A:EF:97:1B

Maquina2: carlos.robo
IP: 172.16.122.14
MAC: 00:1A:EF:97:2B

Maquina3: joao.humano
IP: 172.16.122.15
MAC: 00:1A:EF:97:3B

SQUID3: 172.16.122.1:3128

Vendendor4
Vendendor5
Vendendor6
Vendendor7
Vendendor8
Vendendor9
Vendendor10

    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

Skype: Restringindo acesso não autorizado usando firewall Linux

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

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

Leitura recomendada

Squid e firewall em 5 minutos

Squid com autenticação básica + Gerador de relatórios Sarg - Instalação e configuração

Squid avançado + OpenLDAP

Servidor proxy com Squid - Instalação e configuração

Integrando autenticação do Squid ao Active Directory

  
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