Autor: Jean Carlos Oliveira Guandalini
eMail: darkwarrior[nospam]linuxbsd.com.br
Data: 11/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.