Como autenticar o FreeRADIUS em Base de dados MySql!

como-autenticar-o-freeradius-em-base-de-dados-mysql

Nesta dica, saiba como autenticar o FreeRADIUS em Base de dados MySql. Vamos configurar de forma fácil e simples o FreeRADIUS, neste tutorial vamos utilizar a versão FreeRADIUS 3.2.0. 

FreeRADIUS é o servidor que suporta o maior número de tipos de autenticação e, atualmente, é o único servidor RADIUS de código livre que suporta o protocolo EAP (Extensible Authentication Protocol).

Além disso, FreeRADIUS é o único que suporta virtualização, mantendo os custos de implantação e manutenção baixos. Seu desenho modular é fácil de entender, permitindo facilmente a inclusão ou remoção de módulos sem contudo afetar o desempenho, os requisitos de hardware, de memória ou a segurança do sistema.

A modularidade permite executar FreeRADIUS em sistemas embarcados ou em servidores com vários núcleos e com gigabytes de memória RAM.

Saiba como autenticar o FreeRADIUS em Base de dados MySql!

Primeiro vamos fazer o download da versão mais recente, observe que no momento da escrita deste artigo, a versão mais recente é a série 3.2.X, execute o comando abaixo para baixar a versão mais recente do FreeRADIUS:

Terminal
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.2.0.tar.gz

Após o download vamos extrair o arquivo, para que depois possamos instalar, vamos usar o ROOT:

Terminal
tar -vzxf freeradius-server-3.2.0.tar.gz

Após a extração uma pasta é criada contendo todos os scripts de instalação, vamos entrar nesta pasta via terminal:

Terminal
cd freeradius-server-3.2.0

Vamos iniciar o processo de compilação/instalação do programa:

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

Depois execute:

Terminal
make

Em seguida:

Terminal
make install

Agora chegou a parte mais chata e delicada, vamos decidir qual portal vamos usar para o Radius:

nano /etc/services (Utilize o editor que desejar, no meu caso prefiro o nano)

No arquivo você encontrará o seguinte:

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

ou então você poderá encontrar algo como:

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

Recomendo utilizar as portas 1812 e 1813, lembre-se que você “deve” escolher as portas de conexão, não deixe todas comentadas, escolha a que desejar. É preciso escolher duas portas e lembre-se que essas portas seram configuradas nos clientes que vão acessar.

Agora, vamos iniciar um simples teste para saber se tudo foi instalado corretamente, rode o seguinte comando:

/usr/sbin/radiusd -X

Você deve receber algo parecido como:

Listening on authentication *:1812
Listening on accounting *:1813
Listening on proxy *:1814
Ready to process requests.
Se tudo ocorreu bem, pressione Ctrl + C para para o Radius.

Agora vamos utilizar o diretório /etc/raddb lá estão todas as configurações que precisamos para rodar o Radius corretamente, agora vamos para a parte um pouco complicada, mas preste bem atenção.

Agora chegou a hora de configurar o Banco de dados que o Radius vai utilizar. Suba o seu MySql é importante que ele já esteja rodando neste momento.

Vamos entrar na pasta onde está o source do Freeradius:

cd src/modules/rlm_sql/drivers/rlm_sql_mysql

Vamos agora vamos editar o /etc/raddb/radiusd.conf e deixar conforme o exemplo abaixo para que a autenticação no mysql funcione 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
}

Criação de banco de dados MySQL

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:

nano /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 saída de seu comando for parecida com a acima, provavelmente seu radius está funcionando corretamente.

Acesse a versão completa
Sair da versão mobile