Neste artigo vamos aprender como configurar o FreeRadius 3.x em em um servidor Debian. Neste servidor teremos integração de usuários de uma base de dados MySQL que serão autenticados por um hotspot, que por sua vez será configurado em um Mikrotik Router OS.
Resumindo: O artigo ensinará a configurações para autenticar usuários de um servidor hotspot na base de dados do FreeRadius.
obs: Não será ensinado instalação do Sistema. Pode ser usado a versão netinstall, neste artigo estou usando a versão xfce em ambiente virtual.
Link Debian x64: https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/
Link Debian x86: https://cdimage.debian.org/debian-cd/current/i386/bt-cd/
Mikrotik: https://mikrotik.com/download (baixe uma ISO)
Requisitos
1 – Debian 9 Stretch recomendo uma instalação limpa do Debian;
2 – Servidor Atualizado;
3 – Mikrotik Router OS.
Topologia
No Mikrotik
Vamos configurar o Mikrotik para que tenhamos internet. Como o laboratório foi executado em ambiente virtual com o virtualbox estarei usando da seguinte forma: 3 interfaces para o mikrotik:
- Adaptador 1 – rede bridge (internet | 172.16.1.200/16 | ether1)
- Adaptador 2 – rede interna (freeradius | 10.10.10.1/30 | ether2)
- Adaptador 3 – rede interna (hotspot | 192.168.0.1/24 | ether3)
Para entender melhor, veja:
Vá em interfaces e renomeie as interfaces com um duplo clique dessa forma:
Agora, vá em ip>addresses e sete os endereços. Lembre-se que a ether1 está em bridge, logo ela será configurada com um ip da sua rede local. Faça isso para as três interfaces.
Agora, vamos setar a rota, vá em ip>routes e vamos adicionar a rota para o gateway da sua rede local (real):
Vamos configurar o DNS. Vá em IP>DNS e configure o seu dns.
Agora, vamos criar o NAT para compartilhar a internet pelo Mikrotik: IP>Firewall>NAT adicione uma regra no botão +.
Feito isso vamos fazer um teste para saber se está funcionando. Vá em New Terminal, abrirá um terminal, digitaremos um ping em um site para sabermos se estamos conectados.
Agora, vamos configurar um servidor DHCP para o nossos clientes que estarão anvegando através da interface hotspot. Vá em IP>DHCP Server e siga os procedimentos mostrados abaixo:
Com o seu mikrotik devidamente configurado vamos adicionar um servidor hotspot: Vamos em IP>Hotspot, quando abrir vá na aba Servers e clique em Hotspot Setup para dar início à configuração do hotspot, assim como no DNS basta seguir.
A primeira parte em nosso Mikrotik está pronta. Agora vamos seguir para o servidor Radius.
No Servidor Linux
Antes de mais nada, precisamos configurar a nossa placa de rede para se comunicar com a interface reservada pra conversar com o Mikrotik, a ether2-freeradius. Então, vamos lá:
Obs: use o editor de sua preferência.
Abra o arquivo interfaces e altere conforme abaixo, saia e salve:
#vim /etc/network/interfaces |
Perceba que a minha placa de rede se chama “enp0s3”, coloque a sua.
Reinicie sua placa de rede:
# /etc/init.d/networking restart |
Altere o arquivo resolv.conf e coloque o seu DNS.
# vim /etc/resolv.conf |
Se tudo estiver correto, basta fazer um ping em qualquer site.
Feito isso, continuemos
1 – Servidor Atualizado:
# apt update |
# apt upgrade |
MySQL ou MariaDB?
Com o lançamento do Debian 9 ao instalar o mysql-server, você irá se deparar com a instalação automática do MariaDB, porém trabalharemos no MySQL.
MySQL
A equipe do MySQL Release Engineering fornece repositórios apt para usar com a maioria do software, incluindo o servidor e muitos de seus utilitários. Para instalação com o Mysql então será necessário adicionar em seus repositórios.
# echo -e “deb http://repo.mysql.com/apt/debian/ stretch mysql-5.7\ndeb-src http://repo.mysql.com/apt/debian/ stretch mysql-5.7” > /etc/apt/sources.list.d/mysql.list |
# wget -O /tmp/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql –no-check-certificate |
# apt-key add /tmp/RPM-GPG-KEY-mysql |
# apt update |
# apt install mysql-server |
Será solicitado uma senha para o administrador do MySQL, defina uma. Agora que já temos nosso banco de dados MySQL instalado, vamos instalar uma servidor web junto com o PHPMyAdmin para facilitar nossa vida.
# apt install apache2 libapache2-mod-php7.0 php7.0 phpmyadmin |
Instalação do FreeRadius
Para instalar o freeradius digite o comando abaixo no terminal:
# apt install freeradius freeradius-mysql freeradius-utils |
Criando o banco de dados do radius
Crie um banco de dados e usuário e conceda permissões para acessar sua base. Digite o comando abaixo, será solicitado a senha do root do banco de dados. (Não o root do sistema, a não ser que tenha definido assim.)
# mysql -u root -p |
Temos acesso via linha de comando ao nosso banco de dados. Vamos criar uma banco de dados chamado “radius” e também um usuário chamado de radius.
obs: Digite um comando por vez, terminando com o ‘;’. A parte em negrito será a senha que deverá ser definida para o usuário raidus.
CREATE DATABASE radius;
GRANT ALL PRIVILEGES ON radius.* TO ‘radius’@’localhost’ IDENTIFIED BY ‘SENHA-DO-USER-RADIUS‘; FLUSH PRIVILEGES; quit; |
Vamos importar o arquivo com as tabelas do freeradius para o MySQL. Neste caso usaremos apenas a tabela schema.sql. Após o comando abaixo será solicitado a senha do banco de dados do usuário radius. Esta tabela encontra-se no diretório do freeradius: /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
# mysql -u radius -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql |
Configurando os arquivos do FreeRadius
Antes demais nada é bom criarmos um backup dos arquivos para prevenir possíveis problemas.
# mkdir /bkp |
# cp –Rf /etc/freeradius /bkp/ |
Vamos começar com o radiusd.conf:
# vim /etc/freeradius/3.0/radiusd.conf |
Vamos editar os parâmetros abaixo para termos mais detalhes nos logs. Procure as linhas com as informações abaixo e altere para “yes”. Mais precisamente nas linhas 337, 443, 351 e 352.
[…]
log { […] stripped_names = yes auth = yes auth_badpass = yes auth_goodpass = yes […] } […] |
Vamos habilitar nosso mod SQL, mas antes precisamos fazer algumas alterações no arquivo sql.
Dentro do arquivo sql, vamos alterar alguns parâmetros para só depois habilitarmos.
# vim /etc/freeradius/3.0/mods-available/sql |
Vamos alterar as seguintes linhas neste arquivo: 31 e 87, elas estarão assim:
driver = “rlm_sql_null”
dialect = “sqlite” |
Altere para essas configurações:
driver = “rlm_sql_mysql”
dialect = “mysql“ |
Agora, vamos descomentar as linhas: 91, 92, 93 e 94 e altera-las conforme abaixo:
server = “localhost”
port = 3306 login = “radius” password = “SENHA-DO-USER-RADIUS“ |
Ainda iremos descomentar mais uma string deste arquivo: Linha 245, read_clients.
read_clients = yes |
Agora, vamos habilitar o mod sql:
# ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql |
O próximo arquivo é o default que fica dentro do diretório “/etc/freeradius/3.0/sites-enabled/”. Neste arquivo vamos alterar alguns campos e descomentar outros que contém a string tem sql. Os campos que apresentarem um “–“ antes do sql (-sql), vamos remover o traço. Use “/” para fazer a busca mais facilmente:
# vim /etc/freeradius/3.0/sites-enabled/default |
Primeiro campo é o authorize, dentro dele busque o –sql (linha 381) e remova o traço, não alterando os outros parâmetros:
authorize {
sql } |
Campo accouting, dentro dele busque o –sql (linha 616) e remova o traço, não alterando os outros parâmetros:
accounting {
sql } |
Campo session, apenas descomente a string sql (linha 664), não altere mais nada deste campo.
session {
sql } |
Campo post-auth e Post-Auth-Type REJECT, dentro deles busque o –sql (linha 714 e 819) e remova o traço, não alterando os outros parâmetros:
post-auth {
sql
Post-Auth-Type REJECT { sql } } |
Vamos fazer o mesmo com o arquivo inner-tunnel, está no mesmo diretório.
# vim /etc/freeradius/3.0/sites-enabled/inner-tunnel |
Mesmos campos: authorize (linha 147):
authorize {
sql } |
No campo session (linha 269) apenas descomente a string:
session {
sql } |
E no campo post-auth e Post-Auth-Type REJECT (linha 302 e 361), remova o traço “-sql“.
post-auth {
sql
Post-Auth-Type REJECT { sql } } } |
Vamos alterar o arquivo client.conf, que está dentro do diretório “/etc/freeradius/3.0/”. Nele adicionamentos as informações do servidor Mikrotik e a faixa de ip que estará se comunicando com o servidor radius.
# vim /etc/freeradius/3.0/client.conf |
Adicione no arquivo os seguintes parâmetros (no exemplo adicionei na linha 219):
client 0.0.0.0/0 {
secret = passwd-radius # senha de comunicação com o mikrotik shortname = mikrotik # nome a sua escolha } |
A parte do radius já está pronta, agora vamos voltar ao Mikrotik, e adiciona as configurações para comunicação dos usuários posteriormente cadastrados com o servidor radius.
Vamos em IP>HotSpot>Server Profiles e vamos dar dois cliques no profile hsprof1(pode ser renomeado) e altera conforme a imagem:
Opcional: Se achar que vale te convém, pode ir na aba Login e desmarcar a caixinha de Cookies. Isso faz que o cliente sempre tenha que autenticar caso ele desconecte. Dê Ok.
Agora, vamos em Radius>Incoming e habilite a opção Accept.
Vamos adicionar o servidor. Clique na seta + para adicionar um novo serviço, será aberta uma aba com algumas opções a serem preenchidas, faça conforme sua topologia:
- Em Address adicione o ip do servidor radius.
- Em Secret adicione a senha que foi criamos no arquivo client.conf.
- Marque a caixa hotspot.
Por fim, só precisamos fazer algumas mudanças nos parâmetros do bando de dados, acesse o seu banco de dados pelo phpmyadmin, no meu caso: http://10.10.10.2/phpmyadmin
Provavelmente ao tentar acessar lhe será solicitado a autenticação, use o usuário padrão do mikrotik para entrar: O usuário é “admin” e não contem senha.
Feito isso, autentique-se no phpmyadmin e vá no banco de dados radius na tabela radcheck. Nos serão apresentados algumas opções, clique em estrutura; marque a caixinha Marcar todos e depois em Alterar. Vamos fazer alterações em atribute e op.
Altere como na imagem e salve.
- attribute = Cleartext-Password
- op = :=
Por padrão o campo atribute vem em branco e o op vem com ==.
Pronto, agora vamos adicionar um usuário no banco de dados e tentar autenticar no hotspot.
Continuando, vá em inserir, será aberto a tabela:
- id: É preenchido de forma automática;
- username: É preenchido o nome do usuário;
- value: É preenchido a senha do usuário.
Agora, vamos fazer o teste de autenticação. Foi cadastrado o usuário: pedrosilva e a senha: 123465
Importante: Lembre-se de derrubar o usuário admin no Mikrotik antes de testar, vamos em IP>HotSpot>Active, selecione o usuário admin e clique no botão de remover “–“ ; caso tenha deixado a opção cookie habilitada, basta ir em IP>HotSpot>Cookie e fazer o mesmo.
Feito isso, vamos autenticar com o usuário criado no banco de dados.
Para conferir, vamos no mikrotik em IP>HotSpot>Active.
Bom, por enquanto é isso.
Espero que isto ajude a quem precise, e quem tiver mais conhecimento sobre essa poderosa ferramenta que é o freeradius, por favor compartilhe.
fontes:
Tudo bem Pedro?
Aproveitando seu material, estou desenvolvendo um radius com Debian 11, porém, ao invés de ter banco de dados, a minha intenção é permitir por default toda e qualquer autenticação na caixa, com banda aberta!
Já tive problemas com alguns clientes que utiliza servidor Radius na nuvem, e o servidor deles para de funcionar… Ai os clientes que desligam seus roteadores não conseguem mais se autenticar… A minha intenção é de criar um “Radius Coringa” justamente para salvar não só meus clientes mas os parceiros também caso dê buxa… Já imaginou um Radius com + de 2k usuários cadastrados dar pau, e estes 2k usuários estiverem tentando se autenticar? Bronca!!!
Valeu e parabéns pelo material!
Ola amigo, voce me indicaria algum material sobre isso mais atualizado, por gentileza?
Outra dúvida: é para botar o 0.0.0.0/0 ali naquele aquivo mesmo, ou eu devo botar o ip da porta que ira se comunicar com o servidor radius (que no seu caso, creio que tenha sido a 10.10.10.1)?
Bom dia, a melhor documentação é a oficial, João.
10.10.10.1 é o Mikrotik 10.10.10.2 é o servidor do freeradius.
Leia com atenção o artigo, verá que está bem explicado toda topologia.
Obrigado pelo artigo amigo, muito bom. Porém ao fazer o login no hotspot com o user e senha cadastrados no banco de dados aparece a seguinte mensagem de erro “RADIUS server is not responding”. O que voc~e sugere? Estou preocupado que talvez seja essa questão da faixa de ip para colocar no arquivo /etc/freeradius/3.0/client.conf, pois fiquei na dúvida, e no meu sistema o arquivo é ” clients.conf” ao invés de “client.conf”. perdão, sou leigo! espero que me ajude.
João, tudo bem?
Este artigo é um pouco antigo e, pode ser que já tenham mudado alguns parametros ou nome de arquivos de configuração, porém você pode fazer o testes sem medo. Caso o seu sistema seja o mesmo usado do artigo, pode ser que a versão que esteja usando do freeradius tenha renomeado um arquivo ou outro.
Recomendo sermpre fazer a cópia do arquivo original antes de fazer qualquer alteração no arquivo.
Bom dia Pedro Henrique, exatamente a 2 anos, 11 meses, e 19 dias estive, eu no seu Blog procurando como configurar na Época a te postei que era novato no Linux , ainda tenho muito a aprender; então venho através agradecer por compatinhar seu conhecimento nesse blog, quero informa que conseguir realizar o meu Laboratório de Freeradius com ajuda da sua postagem, deixo meu muito obrigado. se possível continue compartilhando seu conhecimento pois isso dadiva .. obrigado e Sucesso .. Creio eu que você já e Bem Sucedido, mais uma vez muito obrigado . Forte abraço.
Olá Rafael, bom dia.
Que bom que o artigo ajudou, essa é a ideia. Espero que tenha sucesso na caminhada de TI.
Este blog é do grande professor Ricardo Prudenciato. Recomendo fazer os curso dele. Você encontra eles aqui mesmo no site na aba cursos. Eu te garanto que somará muito na sua jornada.
Grade abraço
—————————————————————————————————-
1 – NO arquivo /etc/raddb/mods-enabled/eap >> altere a linha private_key_password = senha123
——————————————————————————————————
2 – No diretorio /etc/raddb/certs/server.cnf, altere
[ req ]
prompt = no
distinguished_name = server
default_bits = 2048
input_password = senha123
output_password = senha123
————————————————————-
3 – Depois de os comandos:
radiusd
systemctl enable radiusd
systemctl restart radiusd
ATE FICAR VERDE
—————————————————————————————–
4 – Depois altera o clientes.conf para acesso do localhost, descomente a linha #shortname = localhost
————————————————————————————
5 – Altere o users adicionado: localhost Cleartext-Password := “senha123”
———————————————————————————-
6 – Reinicie o servico
—————————————-
7 – iptables -F , depois echo 1 > /proc/sys/net/ipv4/ip_forward
——————————————
8 – Teste com:
radtest localhost senha123 127.0.0.1 0 senha123
————————————————————-
ola, amigo
parabéns pelo artigo, eu queria saber como e que se faz para passar um paramento para o mikrotik, exemplo o cliente atrasou como vai bloquear, vejo que no mkauth ele passa um paramento chamado pgcorte, com se faz isso ?
IP>HotSpot>Server Profiles
Nessa parte, aba login, quais opções utilizou?
Desculpe a ignorância amigo, mas para que serve este seu tutorial sobre RADIUS?
O que esse RADIUS vai fazer?
Bom dia, o radius faz a autenticação dos usuários que são cadastrados em uma banco de dados e não diretamente no Mikrotik.
Preciso configurar o freeradius para como servidor radius para conectar usuarios de uma rede wifi coorporativo, usando o eap ttls.
qual seria a configuração neste ambiente?
teria que ver a questão da opção de autenticação amigo.
Grande artigo.
Obrigado.
Fala, Pedro! Cara, parabéns pelo tutorial, super explicativo e detalhado, só o arquivo client.conf que aqui é clients.conf e na autenticação eu preferi usar o MD5-Password.
Muito obrigado, abs!
Boa tarde esse arquivo nao baixa
https://repo.mysql.com/RPM-GPG-KEY-mysql%20%E2%80%93no-check-certificate
Boa noite ..baixei a iso Mikrotik funcionou legal .. porem nesta parte do tutorial da dando File not found.”
wget -O /tmp/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql –no-check-certificate
Boa Noite sou novato na Area Linux .. baixei os arquivos porem o Mikrotik veio arquivo .npk como rodo isso no Virtual Box nao estou entendendo esta parte ..
baixa uma ISO do Mikrotik que consegue instalar no Vbox.
Amigo, muito bom o material, precisei de algumas coisas a mais, mas o seu foi o mais perto de tudo que precisei pra minha rede…
Mas queria tirar uma dúvida contigo, assim que eu ativei todo conjunto (Freeradius / Mikrotik) abri o debug do freeradius e observei uma coisa estranha, de 30 em 30 segundos o Mikrotik tenta realizar uma conexão no servidor do freeradius, e inclusive fica gravado na tabela “radpostauth” essa tentativa na seguinte forma:
username;pass;reply;authdate
TEST; x=3D27=3DD5q=3D7E=3DC4=3D27GM=3D241Jx:=3D95=3D99;Access-Reject ;2018-05-18 16:42:28
TEST;x=3D27=3DD5q=3D7E=3DC4=3D27GM=3D241Jx:=3D95=3D99;Access-Reject;2018-05-18 16:42:58
Inicialmente achei que fosse uma espécie de ping do Mikrotik para verificar se o freeradius estava OK, mas pensando bem isso seria bem estranho, até mesmo pq vai superlotar o banco com informações sem utilidade, ainda mais por conta dessa frequencia de 30 em 30 segundos.
Vc ja viu algo assim acontecendo??? Pesquisei muito sobre isso, mas não encontrei ninguem comentando a respeito.
Amigo, provavelmente é o interim update, você pode ajustar esse intervalo no Mikrotik.
Abs
Boa Tarde.
Tem como integrar o servidor radius a um roteador comum, apenas configurando o ip do radius no roteador ? sem ter que precisar do mikrotik? Eu fazia algo semelhante com zerodshell, mas queria montar num debian e no proprio aparelho(celular, tablet e pc) abrir uma tela de login, sem necessitar abrir uma pagina web de autenticação. Se tiver um link que mostre como fazer esse processo, eu agradeço.
Não tenho um material pra isso. Mas funciona sim, funcionando com o protocolo radius a teoria é a mesma.
abraço