Squid - Autenticação e controle de acesso a base de dados Firebird

Neste artigo apresento a criação de módulo de autenticação e controle de acesso para o Squid, acessando uma base de dados Firebird. Esta necessidade surgiu na empresa em que trabalho, e como não encontrei nada existente na Internet, a solução foi criar um pequeno módulo utilizando o Lazarus.

[ Hits: 24.771 ]

Por: Renato Félix de Almeida em 28/11/2012


Arquivos e considerações finais



Arquivo compilado e "squid.conf" para download.

Vou colocar para download o arquivo executável "fb" e o "squid.conf". Caso você não consiga compilar pelo Lazarus, utilize estes arquivos:
Observações:
  • Não se esqueça de dar permissão de execução para o arquivo fb e copiar para a pasta /usr/lib/squid;
  • O arquivo "squid.conf" deve ser copiado para a pasta /etc/squid/.

Considerações finais

Neste artigo eu ensinei a instalar todas as ferramentas e criar um sistema de login do Squid baseado no banco de dados Firebird.

O banco de dados Firebird é muito utilizado em sistemas comerciais escritos em Delphi. Caso o seu sistema utilize o Firebird (ou InterBase), você pode integrar o controle de Internet no mesmo banco de dados.

O proposito do artigo foi mostrar que é possível fazer esta integração, mas algumas coisas não foram criadas da forma ideal, pois poderia ser muito complicado explicar o funcionamento.

Entre estas coisas posso, destacar:
  • O arquivo "squid.conf" foi configurado apenas para chegar o usuário e dar as permissões. Não foi criado sequer um sistema de cache (que é o ponto forte do Squid). Na verdade, você pode utilizar o código do "squid.conf" como ponto de partida e fazer as alterações que você julgar necessárias.
  • O banco de dados foi criado apenas para mostrar que é possível utilizar um banco de dados, mas sua estrutura chega a ser ridícula. Se for utilizar em produção crie alguma coisa de verdade.
  • No "squid.conf" utilizamos o módulo "fb" duas vezes, uma para autenticar e outra para criar uma ACL externa. Você pode, se quiser, utilizar apenas uma, nada obriga que sejam utilizados os dois comandos.
  • Conforme informado, o artigo foi escrito baseado no Debian 6. A instalação foi feita do zero apenas para escrever este artigo. Se você utilizar uma distribuição diferente provavelmente você deverá adequar seu código.
  • Uma das coisas que a gente costuma esquecer na hora de utilizar o Firebird é de criar o link simbólico da biblioteca cliente do Firebird. Não se esqueça isso!
  • O programa foi escrito originalmente em Delphi para ser executado em um servidor Windows 2003 Server. O código aqui apresentado pode ser compilado sem qualquer modificação para Windows, mas na hora de configurar o "squid.conf".

    Você deve se lembrar que as barras invertidas são caracteres de escape. Para colocar o caminho do banco, de dados e os logs você deve utilizar a barra invertida duas vezes. Ex.: c:\\dados\\dados.fdb.

  • Apesar de ter sido muito mais fácil escrever este código para o Delphi 7 no Windows, observei que o Lazarus está muito estável. Já podemos olhar com mais atenção para esta excelente ferramenta de desenvolvimento.

Bom amigos, acho que isso é tudo. O artigo ficou um pouco extenso, talvez até cansativo, mas tentei ser o mais simples e objetivo possível, sem esquecer que usuários básicos podem querer testar também.

Este artigo foi escrito para o Viva o Linux.

Você pode copiar à vontade, mas não se esqueça de citar o autor.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Pré-requisitos
   3. Código fonte e compilação
   4. Alterando o squid.conf
   5. Arquivos e considerações finais
Outros artigos deste autor

Regras de ouro ao instalar o Linux em empresas

Se o Linux é tão melhor que o Windows e é de graça, por que a maioria dos usuários ainda usa Windows?

Leitura recomendada

Criando delay pools (Proxy/Squid)

Squid 3 como proxy transparente + firewall Iptables

Squid atuando como proxy reverso

Servidor Squid - Autenticação e níveis de privilégio

Squid autenticado no Active Directory com Winbind

  
Comentários
[1] Comentário enviado por wiskley em 05/04/2013 - 20:50h

Ola tudo Bem?
muito bom o seu tutorial porem encontrei problemas ao compilar o programa para o windows 2003, qualquer nome de usuario que eu digito da ERR. Fiz todas as modificações necessarias para colocar ele no windows 2003. pode dar uma ajuda?

[2] Comentário enviado por cruzeirense em 05/04/2013 - 22:40h

Prezado Wiskley,


Você fez o teste na linha de comando para saber se o módulo estava funcionando?

Tente utilizar essa sql:
select 1 from rdb$database where :a=1 or :b=1 or 1=1

Ela irá aceitar qualquer combinação de usuário e senha.
Se começar a retornar ok é porque o problema é no seu banco de dados ou consulta sql.
Neste caso verifique se os usuários estão cadastrados corretamente.

Se mesmo assim continuar dano err, poste o seu squid.conf para eu dar uma olhada.

()s

Renato

[3] Comentário enviado por wiskley em 05/04/2013 - 22:50h

Quando eu compilo o programa no lazarus (para windows) ele gera um arquivo de 947Kb porem tb da um erro "project1.lpr(98,23) Warning: Variable "parametros" does not seem to be initialized" , ai quando digito para teste admin admin o programinha da um erro de sql mas so acontece quando coloco o admin o user da ERR , usei o mesmo BD no Debian e funcionou normalmente so que o computador usa o windows 2003, quanto ao meu squid.conf esta igualzinho ao seu. Obrigado pela ajuda mesmo:

edit: Abaixo o link das imagens
http://profandre.org/imagens/erro%201.png
http://profandre.org/imagens/erro%202.png

[4] Comentário enviado por cruzeirense em 06/04/2013 - 06:41h

Prezado Wiskley,

Nas suas imagens reparei um erro nos caminhos dos arquivos.

Observe que os caminhos de arquivos no windows utilizam a barra invertida "\" e não a barra comum "/" como no linux.
faça o teste com o seguinte comando:
fb.exe "127.0.0.1;c:\dksoft\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\tmp\fb_auth.log"

Se o teste der ok, você vai ter que fazer uma modificação para incluir a linha no squid.conf, visto que para o squid a barra invertida "\" é caracter de escape. Então você vai ter que colocar duas barras invertidas "\\". Fica dessa forma:

fb.exe "127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log"

Tenta aí e posta o resultado...

()s

Renato

[5] Comentário enviado por cruzeirense em 06/04/2013 - 06:52h


[3] Comentário enviado por wiskley em 05/04/2013 - 22:50h:

Quando eu compilo o programa no lazarus (para windows) ele gera um arquivo de 947Kb porem tb da um erro "project1.lpr(98,23) Warning: Variable "parametros" does not seem to be initialized" , ai quando digito para teste admin admin o programinha da um erro de sql mas so acontece quando coloco o admin o user da ERR , usei o mesmo BD no Debian e funcionou normalmente so que o computador usa o windows 2003, quanto ao meu squid.conf esta igualzinho ao seu. Obrigado pela ajuda mesmo:

edit: Abaixo o link das imagens
http://profandre.org/imagens/erro%201.png
http://profandre.org/imagens/erro%202.png


Quanto a isso aí pode ignorar, a variável é inicializada em tempo de execução.

[6] Comentário enviado por wiskley em 06/04/2013 - 16:21h

Prezado Renato

Ja tinha pensado nisto tambem e ja havia trocado as barras porem continua o mesmo erro das imagens muito estranho isso. baixei outro Lazarus e tambem deu o mesmo problema, continuo tentando ate ver se consigo resolver o problema.
O log Auth.log esta retornando o seguinte:
--
127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log
user user
Retornou ERR
--
se eu dou um admin admin ela da o erro de sql da imagem, achei que poderia ser o bd porem o bd esta funcionando normal testei com o ibexpert



[4] Comentário enviado por cruzeirense em 06/04/2013 - 06:41h:

Prezado Wiskley,

Nas suas imagens reparei um erro nos caminhos dos arquivos.

Observe que os caminhos de arquivos no windows utilizam a barra invertida "\" e não a barra comum "/" como no linux.
faça o teste com o seguinte comando:
fb.exe "127.0.0.1;c:\dksoft\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\tmp\fb_auth.log"

Se o teste der ok, você vai ter que fazer uma modificação para incluir a linha no squid.conf, visto que para o squid a barra invertida "\" é caracter de escape. Então você vai ter que colocar duas barras invertidas "\\". Fica dessa forma:

fb.exe "127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log"

Tenta aí e posta o resultado...

()s

Renato



[7] Comentário enviado por cruzeirense em 08/04/2013 - 16:19h

Prezado wiskley,

Você chegou a analisar o arquivo e log?

[8] Comentário enviado por wiskley em 08/04/2013 - 17:56h

127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log
user user
Retornou ERR

so tem isso no log pelo que vi esta normal a linha de comando

[9] Comentário enviado por wiskley em 09/04/2013 - 23:20h

Prezado Renato pensei que o problema seria o Windows 2003 porem andei testando ele no windows xp, Windows 7 e tambem não funcionou a unica coisa que gera no log e a propria linha de execução do squid. achei estranho isso. comentei com minha professora ela disse que nao é normal que logicamente teria que funcionar. Estranho rsrsrsr

[10] Comentário enviado por cbsistem em 08/02/2015 - 12:12h

Renato ficou Fantastico. Compilei em Delphi XE 6 e rodei em um Windows 2008 Server, versao Squid 2.71.

Meus MuitosBens pra vc.



Contribuir com comentário