Autenticando usuários do Squid em um banco de dados MySQL

Quando surge a necessidade de incrementar nossos serviços, a utilização de um banco de dados para centralizar informações é extremamente válida. Neste artigo veremos como implementar a autenticação de usuários do Squid em uma tabela no banco de dados MySQL.

[ Hits: 72.527 ]

Por: Junior Rocha em 11/08/2009


Testes, considerações e observações



Após reiniciar o Squid, verifique se o processo do mysql_auth está em execução com o comando:

ps aux | grep mysqlt_auth

A saída deste comando deve ter no mínimo 5 linhas, o que indica que está tudo "OK" com o seu novo método de autenticação.

Obviamente a autenticação de usuários demora um pouco mais, devido a consulta no banco de dados. Se você tem uma empresa que necessita desta solução para cerca de 50 usuários ou mais e seu proxy está no mesmo computador que o banco de dados, certifique-se que haja recursos de hardware suficientes para atender as necessidades do seu ambiente.

Vale lembrar que esta solução se adéqua àqueles que pretendem desenvolver soluções personalizadas em páginas PHP para gerenciar seu ambiente. Se você tem um servidor com 10 usuários e tem o controle absoluto do servidor, não há necessidade técnica para esta solução, a não ser claro, por finalidades educativas e de aprendizado.

Quem sabe em um próximo artigo integraremos ao banco de dados às blacklists do Squid para incrementarmos nossa solução.

Um abraço a todos.

Fontes:
Página anterior    

Páginas do artigo
   1. Cenário e necessidades
   2. Configurando o MySQL
   3. Configurando o Squid
   4. Testes, considerações e observações
Outros artigos deste autor

Executando comandos DML em base de dados MySQL através do Eclipse PHP (Bônus: Temas e Fontes no Eclipse)

Administrando usuários do Squid via web como o Admuser

Leitura recomendada

Administrando usuários do Squid via web como o Admuser

SquidGuard: Bloqueando o acesso a Web

Squid 3.1.5 com suporte a TPROXY (sem bridge)

Squid balanceado com LVS

Squid - Entendendo um pouco as configurações

  
Comentários
[1] Comentário enviado por ramos1986 em 11/08/2009 - 11:25h

Parabéns pelo artigo.

[2] Comentário enviado por junior em 11/08/2009 - 13:50h

Obrigado amigo! Espero que esta solução lhe seja útil.

[3] Comentário enviado por andrefreire em 12/08/2009 - 08:08h

Parabéns pelo artigo, mas gostaria de saber se ao invés de basic a autenticação não poderia ser ntlm ?

[4] Comentário enviado por junior em 12/08/2009 - 13:26h

Olá André, funciona com ntlm sim, basta compilar o ntlm na instalação do squid e depois alterar o parâmetro de autenticação de basic para ntlm.

Um abraço.

[5] Comentário enviado por info24hs em 13/08/2009 - 09:40h

Funciona com proxy transparent?

[6] Comentário enviado por junior em 13/08/2009 - 11:42h

Olá amigo, se você utiliza o proxy.pac ou wpad.dat infelizmente esta solução por ser autenticada, não funciona com proxy transparente.
Até agora, nunca vi Squid autenticado funcionar com proxy transparente.
=/

[7] Comentário enviado por aazevedo1984 em 19/08/2009 - 13:23h

Como faria p/ criar grupos de acesso, por exemplo: o grupo adm tem acesso a tudo e o grupo users somente a alguns sites pre-determinados?

[8] Comentário enviado por junior em 19/08/2009 - 13:44h

Olá amigo, aazevedo.

O que você quer pode ser feito sem problemas, este é um tema que abordarei em um próximo artigo, que já está quase saindo do forno.

Um abraço!

[9] Comentário enviado por mcsba em 24/08/2009 - 10:31h

Caro, Junior Rocha.
Quando tento executar o wpad.dat acontece o seguinte erro:
Fatal error: Call to undefined function: mysqli_connect() in /usr/lib/squid/mysqlt_auth on line 3


Tem idéia do pode ter acontecido?

[10] Comentário enviado por junior em 24/08/2009 - 13:37h

Olá amigo, verifique a seguinte linha do seu arquivo: $link = mysqli_connect("localhost", "usuario_do_banco", "senha_do_banco");

O que pode estar acontecendo é que as "variáveis" localhost, usuario_do_banco e senha_do_banco não estão definidas corretamente.
Dê uma olhada, salve o arquivo e reinicie o squid, e me dê um feedback dos testes.
Um abraço

[11] Comentário enviado por mcsba em 24/08/2009 - 18:11h

Caro, Junior.

Fiz os testes que você me pediu e continuou apresentando mesmo erro.

Fatal error: Call to undefined function: mysqli_connect() in /usr/lib/squid/mysqlt_auth on line 3

Se puder me ajudar: mcsba@hotmail.com ou pelo skype: mcsba78

Desde já agradeço.

[12] Comentário enviado por junior em 11/09/2009 - 16:19h

Olá amigos, só para dar um "up" no artigo, o problema do amigo Márcio já foi resolvido.
O Márcio me informou via Skype, que o problema era com uma biblioteca do MySQL.

Fica a dica: Certifiquem-se de que todos os pacotes estão devidamente instalados antes de colocar a solução em prática.

Um abraço!

[13] Comentário enviado por magnolinux em 29/09/2009 - 12:40h

Very good ....

show de bola;;

[14] Comentário enviado por calraiden em 05/05/2010 - 16:33h

Não fufa.. recomendo lerem : http://wiki.squid-cache.org/ConfigExamples/Authenticate/Mysql

[15] Comentário enviado por junior em 05/05/2010 - 19:15h

Onde que não funciona amigo?
Fiz e funcionou, tenho em ambiente de produção.
Se você tiver alguma dúvida, poste os erros ou algo assim que poderemos ajudar.

[16] Comentário enviado por eduardo_jst em 28/07/2010 - 18:40h

Boa noite junior, por favor atraves do seu artigo, como eu crio outras acl por grupos e usuarios, por exemplo grupo diretoria ter acesso total e demais grupos acessos restritos apenas a sites de trabalhos, ou por exemplo o usuario joao do grupo adm q tenha acessos previlediados a certos sites, sendo q ele é do mesmo grupo q maria e não acessa....isso é possivel, ando pesquisando, mas não achei nada parecido.

Agradeço se puder me ajudar.

[17] Comentário enviado por patrese em 26/08/2011 - 11:24h

Olá Junior sei que faz um tempo que colocou esse artigo.
Bom implementei ficou legalzinho só que tenho uma duvida que apanhei um pouquinho e ainda não consegui fazer =/
no arquivo mysqlt_auth eu gostaria de colocar um redirecionamento para uma outra pagina quando o usuario digitasse uma senha ex: senha = 123 vai para uma pagina que criei para troca de senha.

se voce já fez isso será que poderia compartilhar ou dar alguma luz, Obrigado desde já

[18] Comentário enviado por junior em 26/08/2011 - 11:48h

@patrese: Olá amigo, tudo bom? Primeiramente fico feliz que tenha consiguido implementar a autenticação. Agora sobre a sua dúvida: Sinceramente, redirecionar direto no mysql_auth desconheço alguma solução. O que você poderia fazer, é criar uma página simples em php, usando $sessions, para pegar o usuário logado e mostrar uma página para ele trocar a senha. Fora isso, diretamente pelo mysql_auth, infelizmente não sei como fazer.

[19] Comentário enviado por thiagosc em 21/08/2012 - 08:49h

Artigo excelente. Porém não se aplica mais a versão lenny, pelo que vi não tem esses pacotes mais no repositório.

[20] Comentário enviado por marcos1968 em 06/10/2012 - 09:48h

OI PESSOAL EU USEI ESTE SCRIPT SÓ QUE ELE NÃO FECHA O PROCESSO DE CONEXÃO COM O BANCO DE DADOS.
SE ALGUEM SOUBER COMO POSTE,POIS JA TESTEI mysql_close(); E ATÉ AGORA NADA PRECISO ESTAR MATANDO OS PROCESSOS NA MÃO.

[21] Comentário enviado por leorocco em 09/05/2013 - 19:18h

Pessoal, como vão? Primeiro queria agradecer pelo artigo, muito bom! Era o que eu procurava.. Porém, aqui tá meio estranho... Estou testando num servidor Debian e um cliente Windows 7, ambos no VirtualBox. No servidor, aparentemente tudo certo! No cliente, está navegando e tudo mais.. inclusive passando por bloqueios. Só que nao aparece nenhuma janela para eu me autenticar. Ele navega direto. O que pode ser? Segue squid.conf. Abraço!

http_port 3128
visible_hostname debian-server2

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

# [ Autenticação de Usuários ]
auth_param basic program /usr/lib/squid/mysqlt_auth
auth_param basic children 5
auth_param basic realm VOL Proxy - Digite o Usuário e a Senha:
auth_param basic credentialsttl 1 hours
auth_param basic casesensitive off

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados


acl redelocal src 10.1.1.0/24
http_access allow localhost
http_access allow redelocal

http_access deny all


PS.: Estou usando wpad. Influencia? Preciso colocar alguma coisa no wpad.dat?

---------------

Pessoal, foi mal. Primeira vez que estou colocando o squid autenticado, smp usei transparente... Faltou uma ACL aí :PP

[22] Comentário enviado por junior em 13/05/2013 - 10:08h

@leorocco: Você redirecionou o tráfego da porta 80 para 3128 no iptables?

Tente usar sem o WPAD primeiro, colocando o proxy na mão e vê se funciona.

[23] Comentário enviado por victormredes em 27/01/2014 - 13:47h

Fala Junior! blz?

Utilizo Ubuntu + Squid3

Estou com um problema, quando vou navegar aparece essa mensagem:

ERROR

The requested URL could not be retrieved

The following error was encountered while trying to retrieve the URL: /

URL inválida

Some aspect of the requested URL is incorrect.

Some possible problems are:

Protocolo de acesso incorreto ou faltando (deve ser http:// ou similar)

Faltou o hostname

Illegal double-escape in the URL-Path

Hostname com caracter inválido; não são permitidos underscores.

Your cache administrator is webmaster.


Generated Mon, 27 Jan 2014 15:19:14 GMT by liesch-proxy (squid/3.1.19)





Quando ativo a opção "transparent"
Aparece essa mensagem:

ACESSO NEGADO

Por motivos de segurança, o sistema não permitiu o acesso ao link: http://www.fvr.edu.br/

Proibido o Acesso.

Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is webmaster.


meu squid.conf:

# [Configuração de Portas e Nomes ]
http_port 3128
icp_port 3130
visible_hostname liesch-proxy
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache_dir ufs /var/spool/squid3 256 20 384
cache_mem 128 MB

# [ Melhoramento do Sistema e Cache ]
maximum_object_size 1024 MB
minimum_object_size 10 KB
cache_swap_low 50
cache_swap_high 90
cache_access_log /var/log/squid3/access.log
error_directory /usr/share/squid3/errors/Portuguese

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

# [ Autenticação de Usuários ]
auth_param basic program /usr/lib/squid3/mysqlt_auth
auth_param basic children 5
auth_param basic realm VOL Proxy - Digite o Usuário e a Senha:
auth_param basic credentialsttl 1 hours
auth_param basic casesensitive off

# [ Controle de Acessos ]
#acl all src 0.0.0.0/0.0.0.0
delay_pools 1
delay_class 1 2
delay_parameters 1 194688/194688 39768/39768
delay_access 1 allow all
acl manager proto cache_object
#acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8

# [ Controle de Acessos - Safe Ports ]
acl Safe_ports port 21
acl Safe_ports port 70
acl Safe_ports port 80
acl Safe_ports port 210
acl Safe_ports port 280
acl Safe_ports port 443
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 631
acl Safe_ports port 873
acl Safe_ports port 1025

# [ Controle de Acessos - SSL Ports ]
acl SSL_ports port 443 563
acl SSL_ports port 873
acl purge method PURGE
acl CONNECT method CONNECT
no_cache deny QUERY

# [ Controle de Acessos - Http Access ]
#http_access allow manager localhost
http_access deny manager
#http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#http_access allow localhost
http_access deny to_localhost

# [ ACLs Personalizadas ]
acl rede_interna src 10.0.0.0/21
acl usuarios proxy_auth /etc/squid3/usuarios

# * Acessos Finais *
http_access allow usuarios
http_access deny all
http_access deny !rede_interna
http_access allow rede_interna



[24] Comentário enviado por appolo em 13/03/2014 - 12:41h

Gostei. Muito bom.

Mas eu tenho um problema. Se eu já tiver uma lista de mais de 500 usuários já cadastrados e criptografados em NCSA usando o htpasswd.

Pergunto, tenho como aproveitar esse cadastro para o MySQL?

Obrigado.

[25] Comentário enviado por pauloedson em 08/08/2017 - 13:45h

JUNIOR,

em primeiro lugar, parabéns pela iniciativa de compartilhar o conhecimento, pois tbm estou querendo colocar tal ideia em produção.

pois bem, o seu louvável artigo diz o seguinte.: "Dentro da pasta /usr/lib/squid você terá alguns arquivos executáveis [...]". no meu debian 9, esta mesma pasta possui três tipos de arquivos.:

01. a maioria são do TIPO biblioteca compartilhada;
02. arquivos do TIPO script perl; e,
03. arquivos do TIPO script shell.

portanto, quando vc sugere criar um arquivo de nome "mysqlt_auth", caso não exista dentro da pasta, por sinal, o meu caso, ele sera de que tipo?!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts