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

Por: Junior Rocha em 11/08/2009 | Blog: https://boards.greenhouse.io/resultadosdigitais


Cenário e necessidades



Como administrador, gosto de tudo bem organizado e o mais simplificado possível, principalmente para manutenção e integração com o usuário. Bem, sabemos que a necessidade de disponibilizar um controle "amigável" para que gerentes e chefes de produção "controlem" as páginas e gerenciem os usuários é extremamente grande. Além de termos um novo método de autenticação do MySQL, podemos no futuro criar algumas páginas em PHP para interagir com o banco de dados e efetuar algumas alterações via WEB.

Sem contar que tendo um banco de dados, o backup pode ser mais simplificado e objetivo. Se você tem o MSN-proxy configurado, logs do Squid direcionados para o MySQL, agora você pode ter também os seus usuários, e posteriormente suas listas de sites bloqueados e liberados todos em um banco MySQL.

Esta solução com MySQL visa a robustez e a integridade dos dados. Outra solução alternativa a autenticação em banco de dados seria LDAP com Fedora DS, Server LDAP pré-configurado ou quem sabe até mesmo no AD da Microsoft, muitas vezes por termos ambientes corporativos híbridos.

Por padrão a autenticação do Squid é ncsa_auth. Um arquivo criado com o comando "htpasswd -cb arquivo usuário senha" já pode ser utilizado para autenticar usuários do Squid com o módulo nsca_auth, encontrado em /usr/lib/squid (Distribuições Debian Like). Porém, vamos mudar um pouco isso e começar a autenticar em uma base do MySQL.

O que foi utilizado para efetuar este artigo?

Foi utilizada a distribuição Debian Lenny, atualizada e com os pacotes do MySQL já instalados e do PHP também. Mas já que você não tem nada instalado e não sabe como proceder, esses comandos devem resolver:

# apt-get install mysql-server-5.0 mysql-client-5.0 libmysqlclient15-dev php5-cli php5-mysql php5-common squid

Após a instalação dos pacotes acima, vamos configurar o MySQL e o Squid e termos um novo método de autenticação no nosso servidor proxy.

    Próxima página

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

Administrando usuários do Squid via web como o Admuser

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

Leitura recomendada

Direcionando log Squid para banco MySQL

Compilação do Squid 3 no Debian Wheezy

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

Configuração do Squid + Dansguardian no Slackware 11

Instalação do Squid 3.2.0.14 no Slackware com execução em ambiente chroot

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts