Servidor FreeRadius com integração MySQL + Autenticação PPPoE & Hotspot VS Mikrotik + Ubiquiti EAP/PSK

Se quiser instalar a versão mais atual leia:
Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch

Neste tutorial vamos configurar o FreeRadius de forma simples em um servidor linux (Debina 8), armazenando nossos usuários e atributos de configurações em uma base de dados MySQL, qual será utilizada para autenticações PPPoE ou Hotspot, no RouterOS (Mikrotik). Vamos tratar ainda do módulos IPPOOL para armazenar nossa pool de IPs no banco de dados e o módulo COUNTER muito usado em configurações de Hotspot para controle de tempo da conexão. E por fim um extra de como configurar seu Access Point (AP)/ Station (Clientes/CPE) para fazer autenticação Wireless (PSK / EAP) em seus equipamentos Ubiquiti/Mikrotik entre outros.

Resumindo é um dos cenário mais encontrado em provedores de internet. Se você gostou do tutorial ou tem dúvidas deixe seu comentário. Se precisar de alguma consultoria ou trocar uma ideia pode me chamar lá no Telegram @remontti (Não garanto que irei responder rápido, mas sempre tiver um tempinho…)

REQUISITOS
1 – Debian 8 Jessie recomendo uma instalação limpa do Debian (Debian 8 Jessie / Instalação Limpa)
2 – Serviço Web Rodando (Passo-a-passo como criar um servidor web Apache2, PHP5, MySQL, PHPMyAdmin “LAMP” no Debian 8)
3 – Servidor Atualizado:

INSTALAÇÃO

Integração com MySQL

Após instalação vamos criar nossa base de dados chamada de “radius”, e após criar nosso usuário que também se chamara “radius” para ter acesso a mesma.

informe a senha do seus usuário root do MySQL.

Importamos as tabelas para nosso banco de dados, a cado comando será solicitado senha so usuário mysql radius (SUA-SENHA).

Entramos no diretório onde o FreeRadius tem seus arquivos de configuração.

Antes de editar o radiusd.conf crie um backup do mesmo, farei o mesmo em todos os arquivos que irei editar, assim temos um backup caso cometer algum erro.

Descomente

Se deseja ter logs mais detalhados altere os valores abaixo para yes.

radius.conf ficará assim:

Alterar
password = “SUA-SENHA”

Descomente
readclients = yes

sql.conf ficará assim:

Descomente os sql encontrado em authorize/session/post-auth

Comente

inner-tunne ficará assim:

Comente / Descomente

Comente:

Comente / Descomente / inclua abaixo de sql sqlippool

default ficará assim:

Habilite o control-socket

SQLIPOOL
https://wiki.freeradius.org/modules/Rlm_sqlippool

Como dito este é um cenário bem tipico de provedores, então vou usar o modulo sqlipool para deixar meus blocos de IPs diretamente no banco de dados, assim temos um aproveitamento de 100% dos IPs, ainda mais com o esgotamenteo de IPv4 no mundo.
IMPORTANTE: Esse formato pode gerar problemas, um deles é a duplicidade de IPs em sua rede, isso acontece se você tiver varios Servidores PPPoE/Hotspot (se bem que em hotspot eu não usaria), espalhados na sua rede, caso haja alguma interrupção entre seu PPPoE Server e o Freeradius, o Freeradius poderá liberar o IP da da tabela radippool, e assim algum outro PPPoE Sever acabar alocando o mesmo. Então tome cuidado. Eu particularmente usei um script que em caso o Servidor PPPoE perder comunicação com o Servidor Freeradius ele desconecta todos os usuários conectados, assim quando voltar a comunicação seja feito uma nova conexão aos clientes.

Altere
$INCLUDE sql/postgresql/ippool.conf
Por
$INCLUDE sql/mysql/ippool.conf

Este é um valor que você pode trabalhar caso tenha algum problema (eu uso o padrão)
## IP lease duration. (Leases expire even if Acct Stop packet is lost)
lease-duration = 3600

Para evitar duplicidade uso o MAC com key (Pois as NAS-port pode se repetir quando se tem mais de um PPPoE Serv)
Comente:
#pool-key = “%{NAS-Port}”
Descomente:
pool-key = “%{Calling-Station-Id}”

Como é bem possível que seu servidor não autentique apenas usuários pppoe ou hotspot, para não termos cada vez que por exemplo um autenticação wireless psk/eap aparece o log que não foi definido uma pool, eu comentei:
#sqlippool_log_nopool = “No Pool-Name defined \
# (did %{Called-Station-Id} cli %{Calling-Station-Id} port %{NAS-Port} user %{User-Name})”

sqlippool.conf ficará assim:

Umas das alterações que acho interessante alterar no ippool, é para que a cada nova alocação de IP ela seja randômica, isso pode solucionar alguns problemas como o daqueles clientes que jogam online, que fazem download, que estão sendo atacados, que ao reiniciar seu equipamento o mesmo irá receber um novo IP. Para isso vamos editar o /etc/freeradius/sql/mysql/ippool.conf

Comente

Descomente

COUNTER

Modulo counter é legal para criar alguns cenários de hotspot, ode você deseja limitar o tempo de conexão. Exemplo limitar que um usuário tenha acesso apenas durante 2h por dia/mês/único… E com um pouco de trabalho e personalização no /etc/freeradius/sql/mysql/counter.conf você consegue personalizar para contabilizar até mesmo tráfego de dados.

Caso você deseje habilitar-lo faça o seguinte:

Descomenta

Adicione

Adicione abaixo de sql

Adicione abaixo de sql

Corrigindo um bug. Acerte o nome da tabela (AcctSessionTime ==> acctsessiontime)

ALIMENTANDO NOSSA BASE DE DADOS

Inicialmente eu particularmente não gosto da ideia da radusergroup não ter uma ID então para alterar isso faça. (Se desejar)

Entre com SUA-SENHA do radius no MySQL.

Agora vamos inserir alguns valores na nossa base de dados com alguns exemplos que explicarei no decorrer.
Se você preferir pode usar os comando mysql direto no PHPMyAdmin.

Primeiramente precisamos de um cenário de rede para montar nossas configurações.
FreeRadius: 250.250.0.10
RB/RouterOS HotSpot: 250.250.1.2
RB/RouterOS PPPoE: 250.250.1.3 / 10.10.0.1
UBNT AP: 10.10.0.2

Note que nosso UBNT não está na mesma classe de IPs do FreeRadius, então possivelmente sua rede deve ter configurado algum tipo roteamento como OSPF / iBGP, que faça com que seu AP vs FreeRadius consiga comunicação. Caso exista um NAT para seu AP explicarei o que munda em seguida.

TABELAS

• nas
A tabela NAS contém dados sobre (radius clientes) e é uma “substituição” para o arquivo clients.conf. É muito mais fácil manter os clientes no banco de dados do que dentro do arquivo de configuração. Ou seja, sua RB/RouterOS e seu UBNT AP são clientes, são eles que irão fazer consultas em nosso servidor. Para devemos autorizá-los inserindo na tabela nas:

Depois de adicionar, editar ou apagar dados da tabela nas é necessário reiniciar o serviço FreeRadius para atualizar os dados.

• radcheck – Armazena os registo de cada utilizador com os respectivos atributos associados;
• radgroupcheck – Associa atributos a um determinado grupo de utilizadores;
• radgroupreply – Armazena os atributos que são devolvidos a todos os utilizadores de um grupo;
• radusergroup – Associa um utilizador a um grupo de utilizadores;
• radreply – Contém lista de atributos enviados ao utilizador;
• radpostauth – Armazena informações acerca das respostas enviadas para os utilizadores;
• radacct – Se encontra toda a informação de contabilização (extrato);

Vamos criar algumas configurações padrões, “nossos planos”. Lembre-se que os atributos especificados não são necessariamente os mesmos, dependendo do seu cenário, uma boa alternativa é você rodar o freeradius em modo debug (# freeradius -X), e visualizar quais os valores estão vindo, assim você pode observar o que cada autenticação esta lhe trazendo e assim configurando seu grupo de forma segura. Fique atento pois se você cadastrar apenas um atributo poderá estar deixando grandes falhas de segurança.

Criamos alguns planos para atribuir aos nossos usuários PPPoE e Hotspot. Vamos aos nossos usuários:

E por fim vamos alimentar nossa tabela de ippool, como nossos IPs que serão entregue. No cenário fiz 3 pool, minhapool ounde vão ficar os IPs válidos, avisoPool que receberão um bloco de ips diferenciado, por ex. para direcionar os clientes para algum tipo de aviso. E bloqPool para clientes que ficarão bloqueado.

Ainda pode fixar algumas configurações especificadamente ao usuário, vamos a alguns exemplos.

Configuração Simples do PPPoE Server no RouterOS (Mikrotik)

Configuração UBNT AP (10.10.0.2)

Configuração UBNT Cliente EAP 5.8Mhz

Configuração UBNT Cliente PSK 2.4Mhz Conectando no Cartão do MK

Fontes:
https://wiki.freeradius.org/guide/SQL-HOWTO
https://wiki.freeradius.org/modules/Rlm_sql
https://wiki.freeradius.org/modules/Rlm_sqlippool
https://wiki.freeradius.org/modules/Rlm_sqlcounter

https://www.draw.io/ (Gráficos)

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

28 Resultados

  1. Francis Junior disse:

    Ótimo post. Estou na dúvida em duas coisas:
    Usando o FreeRadius, como posso verificar se um usuário está online ou off-line, creio que seja na tabela radacct porém não sei exatamente como proceder, e como realizar a desconexão do usuário através do FreeRadius. Obrigado pelo post!

    • Sim é na radacct vc pode verificar o campo acctstoptime se esta NULL, se sim esta conectado (nem sempre), depende onde esta conectado (router), vc pode desconectar via alguma API, SSH, radius incoming….

      • Francis Junior disse:

        Outra dúvida, se eu for trabalhar com dois NASs, um da Mikrotik e outro da Cisco. Com relação ao cadastro dos grupos, posso cadastrar o grupo uma vez em ‘radgroupcheck’, e posso cadastrar todos os atributos referentes aos dois modelos de NASs, em ‘radgroupreply’?

  2. Genilson Carlos disse:

    Boa tarde Amigo, queria tirar uma dúvida contigo, assim que eu ativei todo conjunto (Freeradius / MySql / 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 ninguém comentando a respeito.

    • Nunca tinha visto estes valores.
      Se você tem autenticação wpa/psk wireless pode ser ela.
      Se você quiser desativar a radpostauth (pra mim ela nunca foi útil) é só comentar em:

  3. Fernando disse:

    Bom dia Rudimar,

    Implementei o serviço de counter no freeradius, fiz toda a configuração do tutorial e está funcionando blz. Só que tem um porem, quando o limite de tempo estabelecido previamente se esgota o usuário não é desconectado automaticamente, eu preciso derrubar a conexão do usuário manualmente, ou o usuário desconecte e tente refazer conexão para que esse bloqueio funcione, somente assim ele recebe a mensagem que o tempo limite de uso se esgotou. Preciso que assim que o tempo de uso chegue ao fim o usuário seja desconectado automaticamente. Como poderia ser feito isso? Meu ambiente é mikrotik/freeradius/mysql/unifi

  4. Cairo disse:

    Remontti,

    Tenho uma rede hotspot onde todos os meus 10 APs são mikrotik, onde estes APs são gerenciados via CAPsMAN(Concentrador) e todas as configurações de IP,dhcp,hotspot, SSID e segurança são feitas nesse concentrador e repassadas ao demais AP’s automaticamente. No entanto eu gostaria de saber quais usuários estão conectados em quais APs, sem a necessidade de configurar cada AP individualmente(hotspot, ip, dhcp, radius..etc) . Isso é importante para que eu possa saber quais aps tem o maior volume conexões na minha rede.

    Atualmente eu só cadastro o ip do mikrotik(concetrador) na tabela nas do freeradius, e através da tabela radacct eu vejo todos os meus usuários conectados a esse NAS cadastrado(nasipaddress). A minha necessidade é visualizar esses usuários conectados no seu devido AP.

  5. Dione disse:

    Muito bom teu tutorial….queria tirar uma duvida eu uso EdegeRouterLite , como roteador, e saída pra clientes rocket M5 , vi em vários lugares NA NET mas ainda fica uma coisa no ar!!!os cliente do meu servidorpppoe !! por exemplo eu cadastro ele no edgerouter? ou no Radius? e o controle de banda no pppoe seria configurado no radius?obrigado

  6. Cairo disse:

    Bom dia Remontti, primeiramente parabens pelo post, bem esplicativo e ajudou muito.

    Tenho uma duvida, preciso montar um servidor freeradius, onde esse servidor ira hospedar informaçoes de varios clientes(hotspots) diferente, e gostaria de ter nesse unico servidor as configuraçoes dos diversos clientes diferentes, como configuraçoes de autenticaçao e contabilidade de cadas cliente independente, banco de dados unico para cada cliente. Como se fosse varias instancias no mesmo servidor. Parecido com o Virtual host do Apache. Eu sei que é possivel fazer isso no freeradius, agora voce conhece algum material explicativo para me ajudar a montar esse cenário aqui. sabe como configuro isso? Pode me ajudar?

  7. Cairo Alberto disse:

    Muito bom tutorial Remontti, parabens pelo material e apoio que você presta a comunidade de TI.

    Segui todos os passos do seu tutorial, só que estou enfrentando um problema ao configurar o modulo Counter, depois de preencher todas as informações , quanto tento iniciar o serviço do Freeradius ele nao sobe e da o seguinte erro nos logs: ERROR: Cannot find a configuration entry for module “month1ycounter” . Ja revi todos os passos , verifiquei a digitação, e nao encontrei o erro. Será o que pode ser em? pode me ajudar? Desde Já obrigado.

  8. Tiago disse:

    Rudimar,

    Tenho muitos problemas de duplicidade de ip, tu tens como compartilhar o script (ou como é feito na teoria) para que derrube todos clientes, sendo assim, evitando a duplicidade?

  9. Willians gomes disse:

    ola, estou fazendo um hotspot com laravel e freeradius e gostaria de treinamento sobre o radius para fazer algumas funçoes.

  10. Pedro Henrique disse:

    Rudimar, obrigado por compartilhar o seu conhecimento.

    Fiz o procedimento indicado logo no inicio deste post: http://blog.remontti.com.br/2066
    Não obtive sucesso. O que tenho que fazer aqui é o seguinte: Mikrotik com Hotpost autenticando no Servidor linux com o FreeRadius, tem tanta informação aqui que não sei qual fazer. Saberia me dizer quais passos eu devo seguir neste tutorial daqui, ele está mais completo do que no indicado acima.

  11. Fabio Nicolau disse:

    Ótimo artigo. Gostaria de saber se existe alguma forma de liberar o NAS de outra forma, pois os meus hostpots tem IP dinâmico e para libera-los tenho sempre que atualizar a tabela NAS. Há alguma forma de liberar a autenticação por meio do Identity ou Serial?

    Obrigado

    • FABIO
      Você pode colocar no arquivo: /etc/freeradius/clients.conf

      Porém você vai deixar qualquer um solicitar consultas em seu radius…
      Ao meu ver é um ponto negativo na segurança, mas seria uma solução.

  12. Ivan disse:

    Bom dia Rudimar.
    Me chamo Ivan.
    Gostei muito de seu tutorial de radius.
    Já algum tempo, estava querendo aprender mais sobre radius.
    Será que poderíamos combinar um valor e você ministrar um treinamento de radius para mim ??

    Obrigado.

  1. 3 de julho de 2017

    […] Para conhecer os atributos que você pode usar em sua base recomendo a leitura do tutorial: Servidor FreeRadius com integração MySQL + Autenticação PPPoE & Hotspot VS Mikrotik + Ubiquiti E… […]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *