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.772 ]

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


Pré-requisitos



Precisaremos, para compilar e utilizar o nosso módulo, dos seguintes itens:
  • Servidor de banco de dados Firebird;
  • Servidor proxy Squid;
  • Front-end para o banco de dados Firebird - FlameRobin;
  • IDE para Free Pascal - Lazarus.

Estou partindo do princípio que você está utilizando uma máquina sem nada instalado, apenas para testes. Caso você já tenha alguns itens instalados, não é necessário fazer uma nova instalação.

Em relação à segurança, as pastas criadas para o banco de dados e os fontes ficaram com permissões totais para todos os usuários. Isto não é sabidamente uma coisa boa, mas foi feito assim para facilitar para os usuários. Você pode mudar isso de acordo com sua necessidade.

Será necessário digitar alguns comandos no terminal. Para abrir o terminal você pode pressionar as teclas ALT + F2. Na caixa que abrir, digite xterm. Por convenção, sempre que o comando for executado como root, ele será precedido de "#". Caso seja executado como usuário comum, será precedido de "$".

Não é necessário incluir estes caracteres antes do comando. Eles estão aí apenas para informação. Para utilizar o root, você pode digitar no terminal o comando su. Quando for solicitado, digite a senha de root.

Vamos então começar as instalações. Abra um terminal em modo root e digite:

# apt-get update

Este comando irá atualizar a lista de pacotes disponíveis. Isto é importante para garantir que você só utilize softwares mais atuais.

Agora, vamos instalar o banco de dados Firebird, digite no terminal:

# apt-get install firebird2.5-super

Depois de concluída a instalação, digite:

# dpkg-reconfigure firebird2.5-super

O sistema irá perguntar se deseja que o banco de dados inicie automaticamente. Escolha sim. Depois ele vai emitir um aviso falando sobre a senha, clique em OK. No próximo passo, será solicitada a criação da senha. Sugiro que utilize a senha padrão masterkey para facilitar nosso teste.

Caso você prefira utilizar uma outra senha, basta digitar no campo de texto, mas na hora das configurações do módulo para o Squid, será necessário modificar esta configuração.

Agora vamos criar um link simbólico da biblioteca do Firebird para a pasta /usr/lib:

# ln /usr/lib/libfbclient.so.2.5.0 /usr/lib/libfbclient.so

Depois do Firebird instalado, vamos partir para a instalação do Squid. Também é muito simples, basta digitar, como root:

# apt-get install squid

Pronto! Mais simples que isso, impossível.

No Debian, existe a opção de instalar o Squid 3, mas observei que ele tem alguns problemas que não existem no Squid 2.7. O problema que ocorre com o Squid 3 é que, em alguns casos, ele fica pedindo o login do usuário para cada elemento da página, o que é muito chato.

Não sei se existe alguma solução para este problema, mas acho que por enquanto, podemos utilizar o Squid 2.7, que funciona perfeitamente.

Agora, vamos instalar o FlameRobin, que é o front-end para o banco de dados Firebird. É nele que nós vamos criar as tabelas para gravar os usuários e páginas permitidas.

Digite no terminal, como root:

# apt-get install flamerobin

Pronto! Muito simples.

Vamos instalar agora o Lazarus, que é um ambiente de desenvolvimento para Free Pascal, a nossa linguagem escolhida para compilar nosso módulo.

Digite, como root, no terminal:

# apt-get install lazarus

Basta aguardar o download que, conforme sua conexão com a Internet, pode demorar um pouco.

Agora todos os nossos pré-requisitos estão preenchidos. O Squid e o Firebird são executados como serviços e rodam em segundo plano. O FlameRobin e o Lazarus ficam no Menu "Desenvolvimento".

Vamos criar duas pastas para colocar nosso banco de dados e os fontes do módulo para compilar.

No terminal, digite como root:

# mkdir /dados
# mkdir /fontes


Agora vamos dar permissões totais para as pastas. Digite no terminal, ainda como root:

# chmod 777 /dados
# chmod 777 /fontes


Pronto, nosso ambiente já está completo para a criação do módulo.

Criando o banco de dados no Firebird

Abra o FlameRobin, que fica no menu Desenvolvimento.

Na primeira execução ele exibe uma mensagem informando que não encontrou a arquivo de configuração. Isto é normal, clique em OK para continuar.

O próximo passo é criar o banco de dados. Clique com o botão direito em "Localhost" e depois em "Crate new database".

Preencha os dados solicitados com a seguinte configuração:
  • Display name: FB
  • Database path: /dados/dados.fdb
  • User Name: sysdba
  • Password: masterkey

Depois clique em "Create", o banco será então criado no disco. Dê um duplo clique no item "FB" para abrir o banco de dados criado.

Agora vamos à criação das tabelas. Clique em: Database → Run a query

Cole o código abaixo dentro da tela de comando e clique em "Executar" (é um quadrado roxo com um triangulo deitado).

CREATE TABLE USUARIO
(
    USUARIO Varchar(10) NOT NULL,
    SENHA Varchar(10) NOT NULL,
    PRIMARY KEY (USUARIO)
);

CREATE TABLE PAGINA
(
    PAGINA Varchar(50) NOT NULL,
    PESQUISA Varchar(255) NOT NULL,
    USUARIOS Varchar(200) NOT NULL,
    PRIMARY KEY (PAGINA)
);

Clique em "Comitar" (é um "V" verde, fica do lado do botão "Executar").

Agora, copie o código abaixo e cole no FlameRobin:

INSERT INTO USUARIO (USUARIO, SENHA)
   VALUES ('admin', 'admin');

INSERT INTO USUARIO (USUARIO, SENHA)
   VALUES ('user', 'user');

INSERT INTO PAGINA (PAGINA, PESQUISA, USUARIOS)
   VALUES ('Viva o Linux', '%vivaolinux.com.br', 'admin;user');

INSERT INTO PAGINA (PAGINA, PESQUISA, USUARIOS)
   VALUES ('Todas', '%', 'admin');

Clique em executar e depois em "Comitar".

Foram executados as seguintes ações no banco de dados:
  • Criadas as tabelas usuario e pagina;
  • Criados os usuários admin e user. A senha dos usuários é igual ao nome;
  • O usuário admin terá permissão de acessar qualquer página;
  • O usuário user irá acessar apenas a página: http://www.vivaolinux.com.br

Página anterior     Próxima página

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

A verdade sobre as ACLs do Squid

Squid com autenticação

Direcionando log Squid para banco MySQL

DansGuardian versões 2.9.3.0 e superiores em Debian 5.01

Squid como proxy transparente: Instalando e configurando

  
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