você está aqui: Home  → Arquivo de Mensagens

Freeradius Autenticando usuários em base de dados no MySQL

Colaboração: Jean Carlos Oliveira Guandalini

Data de Publicação: 25 de Novembro de 2004

Você precisa de um servidor MySQL funcionando corretamente. Eu usei um Slackware 9.1 para fazer essa instalação.

Vamos lá!

Faça o Download da versão estável do freeradius de http://www.freeradius.org/getting.html Quando fiz esse tutorial a versão estável era: 1.0.1

  # wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.1.tar.gz

Agora vamos descompactar o arquivo que baixamos

  # tar zxvf freeradius-1.0.1.tar.gz

Entre no diretório criado do freeradius

  # cd freeradius-1.0.1

Vamos compilar e instalar o programa

  # ./configure --prefix=/usr --with-logdir=/var/log --with-radacctdir=/var/log/radacct --with-raddbdir=/etc/raddb
  # make
  # make install

Agora vamos decidir qual porta usar para o radius

  # vi /etc/services

Você deve achar umas linhas assim:

  #radius         1645/udp   #RADIUS authentication protocol (old)
  #radacct        1646/udp   #RADIUS accounting protocol (old)

ou

  radius          1812/udp   #RADIUS authentication protocol (IANA sanctioned)
  radacct         1813/udp   #RADIUS accounting protocol (IANA sanctioned)

Descomente a linha que você irá usar para o radius, no meu caso usei as portas 1812 e 1813. Lembre-se que precisa ser duas portas. E não se deve deixar as 4 linhas descomentadas. Essas portas serão configuradas nos equipamentos que vão acessar o servidor de radius.

Faça um teste para ver se o radius está instalado corretamente:

  # /usr/sbin/radiusd -X

Se o resultado desse comando terminar com as linhas abaixo está tudo OK:

  Listening on authentication *:1812
  Listening on accounting *:1813
  Listening on proxy *:1814
  Ready to process requests.

Lembrando que as portas vão depender de qual você estiver usando no /etc/services de CRTL+C para terminar o radiusd

Os arquivos de configuração foram instalados em /etc/raddb, lá estão todos os arquivos necessários que iremos precisar para deixar o radius funcionando de acordo com o que é preciso.

Agora iremos criar o esquema do banco de dados que o radius vai utilizar para autenticação Se seu mysql não estiver rodando, inicie-o Entre na pasta onde está descompactado o source do freeradius e depois na pasta a seguir:

  # cd src/modules/rlm_sql/drivers/rlm_sql_mysql

Edite /etc/raddb/radiusd.conf e deixe conforme o exemplo abaixo para que a autenticação no mysql funcinoe corretamente:

  authorise {
          preprocess
          chap
          mschap
          #counter
          #attr_filter
          #eap
          suffix  
          sql
          #files
          #etc_smbpasswd
  }
   
  authenticate {
          authtype PAP {
                 pap
          }
          authtype CHAP {
                 chap
          }
          authtype MS-CHAP{
                 mschap
          }
          #pam
          #unix
          #authtype LDAP {
          #       ldap
          #}
  }
   
  preacct {      
          preprocess
          suffix
          #files
  }
   
  accounting {
          acct_unique
          detail
          #counter
          unix
          sql
          radutmp
          #sradutmp
  }
   
  session {
          radutmp
  }

Crie o banco de dados:

  # mysql -u root -p
  > CREATE DATABASE radius

E Agora jogue o arquivo db_mysql.sql para o MySQL

  # mysql -u root -p senhadorootnomysql radius < db_mysql.sql

Se tudo correr OK, a base de dados está completa e vazia.

Precisamos popular nosso banco de dados, para que funcione as conexões. Logue no mysql:

  # mysql -u root -p
  > use radius;

Nossa base de teste será que criaremos um grupo de usuários chamado discados com dois usuários teste1 e teste2, vamos supor que esses usuários se conectam em um RAS e depois é jogado para o radius de nosso servidor.

Primero vamos criar os usuários:

  > INSERT INTO ``usergroup``(``id``, ``UserName``, ``GroupName``) VALUES ('', 'usuario1', 'discado');
  > INSERT INTO ``usergroup``(``id``, ``UserName``, ``GroupName``) VALUES ('', 'usuario2', 'discado');

Acima criamos dois usuários no grupo discado.

Agora criaremos as senhas para esses usuários:

  > INSERT INTO ``radcheck``(``id``, ``UserName``, ``Attribute``, ``op``, ``Value``) VALUES('', 'usuario1', 'Password', '==', 'user1');
  > INSERT INTO ``radcheck``(``id``, ``UserName``, ``Attribute``, ``op``, ``Value``) VALUES('', 'usuario2', 'Password', '==', 'user2');

usuario1 ficou com a senha user1. usuario2 ficou com a senha user2.

Vamos atribuir o tipo de Autenticação Local:

  > INSERT INTO ``radgroupcheck``(``id``,``GroupName``,``Attribute``,``Op``, ``Value``) VALUES('','discado', 'Auth-Type', ':=', 'Local');

Criando as propriedades das conexões:

  > INSERT INTO ``radgroupreply``(``id``,``GroupName``, ``Attribute``, ``Op``, ``Value``, ``Prio``) VALUES('', 'discado', 'Framed-Compression', ':=', 'Van-Jacobsen-TCP-IP', '');
  > INSERT INTO ``radgroupreply``(``id``,``GroupName``, ``Attribute``, ``Op``, ``Value``, ``Prio``) VALUES('', 'discado', 'Framed-Protocol', ':=', 'PPP', '');
  > INSERT INTO ``radgroupreply``(``id``,``GroupName``, ``Attribute``, ``Op``, ``Value``, ``Prio``) VALUES('', 'discado', 'Service-Type', ':=', 'Framed-User', '');
  > INSERT INTO ``radgroupreply``(``id``,``GroupName``, ``Attribute``, ``Op``, ``Value``, ``Prio``) VALUES('', 'discado', 'Framed-MTU', ':=', '1500', '');

Precisamos agora configurar o arquivo dos clientes do radius, que pode ser nosso "RAS" imaginário. Mas poderia ser qualquer aparelho que iria mandar a autenticação para nosso radius.

Edite o arquivo /etc/raddb/clients.conf: # vi /etc/raddb/clients.conf

Vamos ao final do arquivo, poderemos verificar que no arquivo inteiro, tem vários exemplos de configuração. Colocaremos assim:

  client 192.168.0.1 {
  	secret = senhateste
  	shortname = teletubies
  	nastype = other
  }

Coloque o ip de sua máquina(procure não colocar o ip do localhost, pois já tem uma configuração no clients.conf do 127.0.0.1 se não tiver outro ip, muda configuração do 127.0.0.1 no clients.conf), coloca um secret que será a comunicação com o cliente do radius e o servidor e o tipo de equipamento que está sendo cliente, no nosso caso como iremos testar de nossa máquina mesmo, vamos colocar other, mas poderia ser um portslave, cisco, tc, max40xx... e por aí vai. Olhando o arquivo você vai ver que tem muito mais configurações para fazer nesse quesito de clientes, mas não irei me aprofundar nisso.

Ok, configuração básica feita, podemos testar para ver se está tudo funcionando. Digite:

  # radiusd

Isso fará com que o radius inicie. veja se o radius está rodando:

  # ps aux radiusd

Se não estiver tente dar uma olhada nos logs ver o que pode ter saído errado, e qualquer coisa refaça todo o tutorial.

Vamos fazer nosso teste de autenticação.

  # radtest usuário1 user1 192.168.0.1:1812 0 senhateste

Esse comando tem a seguinte sintaxe: radtest nomeusuario senhausuario ipdoserverradius:porta portadeconexao secretdoradius

  Sending Access-Request of id 25 to 192.168.0.1:1812
          User-Name = "usuario1"
          User-Password = "user1"
          NAS-IP-Address = 192.168.0.1
          NAS-Port = 0
  rad_recv: Access-Accept packet from host 192.168.0.1:1812, id=25, length=44
          Service-Type = Framed-User
          Framed-Protocol = PPP
          Framed-Compression = Van-Jacobson-TCP-IP
          Framed-MTU = 1500

Se a saida de seu comando for parecida com a acima, provavelmente seu radius está funcionando corretamente.

Este tutorial foi o mais básico possivel, procurando mostrar somente as configurações mínimas para um funcionamento, em breve irei fazer uma continuação deste, com mais explicações sobre recursos e features do freeradius.



Veja a relação completa dos artigos de Jean Carlos Oliveira Guandalini