Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch

Neste tutorial vamos configurar o FreeRadius 3 em nosso servidor Debina 9, com integração dos usuários/atributos de configurações em uma base de dados MySQL/MariaDB com o módulo SQL, e ainda o módulos SQLIPPOOL para armazenar nossa pool de IPs na base de dados.
Esse tutorial é ideal para provedores fazerem autenticação PPPoE, autenticação Wireless PSK e EAP.

Se você gostou do tutorial ou tem dúvidas deixe seu comentário. Se precisar de alguma ajuda ou trocar uma ideia pode me chamar lá no Telegram @remontti

REQUISITOS
1 – Debian 9 Stretch recomendo uma instalação limpa do Debian
2 – Servidor Atualizado:

Mãos à obra!
Primeiramente escolha qual banco de dados você irá instalar:
MySQL ou MariaDB?
Com o lançamento do Debian 9 ao solicitar a instalação do mysql-server, você irá se deparar com a instalação do MariaDB automaticamente.
MariaDB é um banco de dados que surgiu como fork do MySQL, criado pelo próprio fundador do projeto após sua aquisição pela Oracle. Para saber mais acesse https://pt.wikipedia.org/wiki/MariaDB

Para 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.

Para MariaDB
Não será necessário alterar nada em seus repositórios.
Note que na instalação do MariaDB ele não irá pedir senha do usuário root como acontece no mysql, por padrão o mesmo vem sem senha com permissão de logar apenas via shell.

Agora que já temos nosso bando de dados instalado MySQL ou MariaDB, vamos instalar uma servidor web junto com o PHPMyAdmin para facilitar nossa vida.

Após instalar acesse http://SEU-IP/phpmyadmin para ver se tudo esta ok!

Instalação do FreeRadius

Crie um banco de dados e usuário e conceda permissões para acessar sua base.

No MariaDB use o comando:

* Vale lembrar que MariaDB seu usuário root vem sem senha, para setar uma senha faça:

Acesse via linha de comando seu banco de dados, e crie uma base chamada de radius e usuário também chamado de radius, para configurarmos nossa aplicação freeradius.

Agora vamos criar nossas tableas

No MariaDB use o comando:

No MySQL use o comando:

Após cada comando será solicitado a senha (SENHA-DO-USER-RADIUS)

Caso deseje logs mais detalhados edite radiusd.conf

Localize as variáveis e altere para yes

Vamos habilitar nosso mod SQL, mas antes precisamos fazer algumas alterações no arquivo

Altere:

Descemente as linhas e altere a senha:

Descomente:
read_clients = yes

Habilite o mod:

Agora no arquivo /etc/freeradius/3.0/sites-enabled/default vamos comentar alguns valores e descomentar outros:

Faça o mesmo com inner-tunnel

Habilita mod sqlippool

Precisamos adicionar o mod sqlippool no nosso arquivo default, você acrescentará sqlippool em accounting e post-auth logo abaixo de sql:

Uma alteraçõe que acho interessante é 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 /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf

# vim /etc/freeradius/3.0/mods-config/sql/ippool/mysql/queries.conf

Opcional

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

Entre com SUA-SENHA do radius no MySQL.

Caso você tenha uma alta demanda de requisições você pode fazer algumas alterações no radiusd.conf.
Altere conforme sua necessidade, e hardware de seu servidor. Vale lembrar que fazendo essas alterações será necessário alterar as configurações do MySQL/MariaDB para permitir uma maior número de conexões.
Ex carga de cerca de 1000 Access-Request por segundo:

Para conhecer os atributos que você pode usar em sua base recomendo a leitura do tutorial: “ALIMENTANDO NOSSA BASE DE DADOS” em diante.
Servidor FreeRadius com integração MySQL + Autenticação PPPoE & Hotspot VS Mikrotik + Ubiquiti EAP/PSK

Sugestões ou criticas envie para Telegram: @remontti

Espero ter ajudado! 😉

ARQUIVOS EDITADOS:

Rudimar Remontti

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

Você pode gostar...

60 Resultados

  1. Alan disse:

    Boa Tarde!!

    Estou a dias tentando amarrar o endereço mac um determinado login de usuario utilizando o atributo :

    ja tentei das seguintes formas

    (‘cliente’, ‘Calling-Station-Id’, ‘==’, ’00:11:22:33:44:55′);
    (‘cliente’, ‘Calling-Station-Id’, ‘:=’, ’00:11:22:33:44:55′);
    (‘cliente’, ‘Calling-Station-Id’, ‘==’, ’00-11-22-33-44-55′);
    (‘cliente’, ‘Calling-Station-Id’, ‘:=’, ’00-11-22-33-44-55′);

    Acontece que o Radius não valida o Calling-station-id e autentica qualquer equipamento com o mesmo usuário e senha,
    onde sera que estou errando?

  2. Pedro Wessel disse:

    Parabéns pelo artigo! Dificilmente encontra-se material tão detalhado!
    Rudimar trabalhamos com sistema de gerenciamento para provedores (netControl), utilizamos o freeradius para autenticar os clientes e entregar os IPs.
    Para fazer a alocação do IPv4 usamos o allocate_find contendo o select que retorna o IPv4. Tem algum allocateIPv6_find que eu poderia usar ou eu teria que retornar o IPv6 junto com o IPv4 no mesmo select?

  3. Walisson Gois disse:

    Ola, boa tarde. Tem como o FreeRadius autenticar os usuarios PPPoE utilizando qualquer usuario e qualquer senha ? Para uma situação de emergência onde dê pau no servidor Radius.

  4. Elias disse:

    podem ajudar, voces nao falaram o caminho pra da start e stop, acho que estou fazendo no caminho certo, mas mesmo configurando o NAS, nao loga fica dando sempre o mesmo erro

    Thu Dec 26 11:06:27 2019 : Error: Ignoring request to auth address * port 1812 bound to server default from unknown client 172.17.200.102 port 1812 proto udp

    • Elias Moreira disse:

      O arquivo clientes.conf deve ser informado as configurações do dispositivo que vai comunicar com o servidor freeradius.
      exemplo:

      # joe /etc/freeradius/3.0/clients.conf

      client ELIASWIFI {
      ipaddr = 172.17.200.102/32
      secret = exemplosenha
      require_message_authenticator = no
      nastype = other
      virtual_server = eliaswifi
      }

  5. itawar disse:

    Ciao a tutti vengo dall’italia

  6. WILLIAN SILVA LIMA disse:

    Ajuda! Desde já, parabéns pelo compartilhamento de conhecimento. Tentei várias vezes instalar o passo a passo deste tutorial, deu certo em partes, depois dos usuário logar, a tabela *radacct*, não recebe nenhuma informação pra a montagem do extrato da conexão do usuário, gostaria de saber se vc tem alguma ideia que possa ser

    • Olá, depois de refazer umas diversas vezes e lê centenas de artigos, encontrei a solução, Eu, estava importando a tabela antiga do meu Radius, que continha um campo modificado ( nasidentifier), que pega o nome da RB, que este eu modifiquei um arquivo do freeradius. Até aí tudo bem, removi ele, porém ainda não testei, mas, pretendo.

      Outra coisa que percebi que na versão mais nova o Radius na tabela *radacct*, não possui algumas colunas, a esxemplo de (acctstartdelay, acctstopdelay, xascendsessionsvrkey).

  7. tiago disse:

    Muito bom material, parabéns!
    Pensa em fazer algum material envolvendo Freeradius com autenticação no ldap??

  8. ALEX TRINDADE disse:

    Boa noite prezados, estou tentando prender mac usando freeradius 3 com mikrotik, porem não estou conseguindo prender o mac.

    INSERT INTO radcheck (username, attribute, op, value) VALUES (‘computador’, ‘Caller-ID’, ‘==’, ’62:45:CB:A5:FF:0D’);

    estou tentando prender o mac com o attributo Caller-ID, mas não esta funcionando, eu usava isso no freeradius 2 e agora no freeradius 3 não estou conseguindo usar, alguem sabe como prender mac do cliente pppoe usando freeradius 3 ?

  9. Bryam disse:

    Olá, primeiramente gostaria de agradecer por todos os seus tutorias postados no site, são realmente bem didáticos e de fácil compreensão !!

    Remontti, gostaria de saber como faço para armazenas IPv6’s na tabela SQLIPPOOL, e disponibilizar meus IPv6’s (WAN e LAN) nessa tabela, sempre que o cliente logar pegar 1 que está disponível, assim como é feito no IPv4.

    Nesse caso utilizando os parâmetros:
    Framed-IPv6-Prefix: Responsável pela a entrega do IPv6 da WAN(/64);
    Delegated-IPv6-Prefix: Responsável pela entregada do IPv6 da LAN (/56);

    Sei que deve ser trabalhoso, mas se puder complementar nesse seu tutorial seria incrível!!

    • Ainda não é possível fazer isso os atributos:
      Framed-IPv6-Prefix, Delegated-IPv6-Prefix devem ser atrelados ao usuários. Vale lembrar que o Delegated-IPv6-Prefix no mikrotik não esta funcionando até a versão 6.45beta16

  10. Douglas disse:

    Opa gostei mto tutorial!! Parabéns! No caso gostaria saber onde posso estudar mais sobre assunto?? e se para fazer páginas php integrado freeradius preciso somente alteração banco dados? Queria material bom para possa estudar kk obg.

  11. Ledson disse:

    Com relação a entrega dos pool de IPv6 estou usando o seguinte comando
    (‘usuario@dominio.com.br’, ‘Framed-IPv6-Prefix’, ‘:=’, ‘2001:db8:A:B::/64’), /* IPv6 “Wan” */
    (‘usuario@dominio.com.br’, ‘Mikrotik-Delegated-IPv6-Pool’, ‘:=’, ‘2001:db8:C::/56’); /* IPv6 “Lan” */
    Esse comando tbm é usado na versão 3 do freeradius?
    Pq o bloco que estou adicionando no freeradius não é pego no mikrotik, ele pega o do propio mikrotik mas não pega o do freeradius, vc ja passou por algo semelhante?

    • Mikrotik-Delegated-IPv6-Pool = nome-da-pool-q-exite-no-mk
      No tutorial antigo ta errado mesmo. Oara vc poder mandar seu bloco o atributo seria Delegated-IPv6-Prefix (mas o mk nao entende ele) Existe no forum do mk muita reclamação…

  12. Victor Nishiyama disse:

    Olá Rudimar,

    Parabéns pelo blog, recentemente me formei em Engenharia de Computação, procurando por alguns temas de meu interesse em adquir conhecimento encontrei teu blog, que acabou por suprir várias necessidades de minhas pesquisas.

    Tenho uma dúvida sobre o freeradius, seria possível a aplicação de um servidor radius em nuvem para utilização em uma rede de terceiros? Em uma topologia que seria basicamente a seguinte:

    servidor freeradius internet onu ap

    Onde clientes se autenticaria em meu servidor radius por meio de um ap que estraria atrás de um nat da onu de um provedor qualquer.

    Lembrando que eu os únicos ativos os quais eu iria dispor de gerência seria o servidor e o ap.

    Grato,

    Um grande abraço!

    • Sim, muitos sistemas fazem isso, porem vc tem q estar 100% on para nada ficar fora, e ter um ip fixo, se o radius tiver atras de um nat é so direcionar a porta. já qm for buscar informacao no radius precisa ter um ip fixo tb, pois vai ter q informar na tabela nas o ip valido do lado q vai até o radius fazer a verificacao dos dados.

  13. Ledson disse:

    Olá, coloquei o Radius para funcionar e ele está autenticando normalmente, acontece que quando coloco em produção em um concentrador com um numero maior de requisições (500 assinates nesse concentrador) alguns clientes pppoe deixam de conectar. Isso ocorre por que a requisição ainda fica aberta no banco de dados, o cliente desconecta e não consegue mais conectar dando erro no log mikotik: user XXXX autentication failed.

    • Provavelmente vc está tendo alguma falha de comunicação do radius com o RouterOS, ou vc cria Scripts para resolver esse problema ou vc desabilita o Simultaneous-Use. Observe os logs, e veja o pq isso está acontecendo…

      • Ledson disse:

        O radius esta hospedado em nuvem (Digital Ocean), provavelmente em algum momento tenha falha na comunicação. Sim uso o simultaneous-use, nas pesquisas que fiz disseram para desabilitar, porém em minha percepção não é a maneira correta de resolver o problema. Os scrips que vc esta falando seria para derrubar a conexão em aberto? ok vou dar uma olhada, desde já agradeço.

  14. Daniel Winter disse:

    Boa tarde, como eu consigo criar as queues no freeradius e quando o PPPOE autenticar no mikrotik ele já criar o controle de velocidade também

  15. Gustavo disse:

    ERROR 1050 (42S01) at line 4: Table ‘radippool’ already exists

  16. Nelson disse:

    deu tudo certo!!!!!

    primeiro tutorial na minha vida que da certo do início ao fim.

    Parabens.

  17. Laennio disse:

    Notei que quando reinicio o sistema operacional o serviço freeradius sobe desativado, tenho que dar o comando: service start freeradius, para ele volte funcionar, mas tenho que fazer isso toda vez que o sistema é reiniciado. Já tentei alguns scripts mas sem sucesso. Desde já agradeço.

    • O serviço não deve estar carregando na inicialização, veja se ele esta enable, se não habilite ele:

  18. Ledson disse:

    Boa tarde, o servidor freeradius esta funcioando tudo ok, porém tem acontecido de travar o sistema operacional. Uso virtualizado em uma vmware, servidor dell, verifiquei na maquina virtual questão de processamento ou memoria e não passa dos 20%, já alterei tbm a questão da quantidade de max_queue_size = 1048576, dando uma amenizada no problema, porem ainda travando algumas vezes na semana, já passou por algo semelhante? Ah! quando altero os valores no radiusd.conf para:
    start_servers = 256
    max_servers = 512
    min_spare_servers = 256
    max_spare_servers = 512
    Da um erro, só voltando a funcionar com os valores padrões.
    Desde já agradeço.

  19. Ledson disse:

    Na versão 3 do freeRadius, os arquivos:
    /sites-enabled/default
    /sites-enabled/inner-tunnel
    Não vem mais com o ‘#” no sql para ser descomentado e sim com um sinal de “-” (menos) na frente do sql;
    Nesse caso o sinal de – é removido para que a opção sql seja ativada?

  20. carlos disse:

    Muito bom seu tutorial, to pensando em criar uma pagina em php para que pudesse o desse cadastrar os clientes em uma interface gráfica seria possível?

  21. Rodrigo Barbieri disse:

    Bom dia, parabens pelo post.
    Uma pergunta, comigo, não está funcionando a opção de Simultaneous-Use, mesmo definindo tudo certo, o mesmo usuario autentica várias vezes.
    Tem alguma outra coisa que precisa ser feito?

  22. Anderson disse:

    Saberia dizer o motivo do erro abaixo ao tentar realizar um teste com o Radtest retornando conexão rejeitada:

    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: returned from sql (rlm_sql)
    Mon Feb 26 12:42:17 2018 : Debug: (1) [sql] = ok
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: calling expiration (rlm_expiration)
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: returned from expiration (rlm_expiration)
    Mon Feb 26 12:42:17 2018 : Debug: (1) [expiration] = noop
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: calling logintime (rlm_logintime)
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: returned from logintime (rlm_logintime)
    Mon Feb 26 12:42:17 2018 : Debug: (1) [logintime] = noop
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: calling pap (rlm_pap)
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!! Ignoring control:User-Password. Update your !!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!! configuration so that the “known good” clear text !!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!! password is in Cleartext-Password and NOT in !!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!! User-Password. !!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: No “known good” password found for the user. Not setting Auth-Type
    Mon Feb 26 12:42:17 2018 : WARNING: (1) pap: Authentication will fail unless a “known good” password is available
    Mon Feb 26 12:42:17 2018 : Debug: (1) modsingle[authorize]: returned from pap (rlm_pap)
    Mon Feb 26 12:42:17 2018 : Debug: (1) [pap] = noop
    Mon Feb 26 12:42:17 2018 : Debug: (1) } # authorize = ok
    Mon Feb 26 12:42:17 2018 : ERROR: (1) No Auth-Type found: rejecting the user via Post-Auth-Type = Reject
    Mon Feb 26 12:42:17 2018 : Debug: (1) Failed to authenticate the user
    Mon Feb 26 12:42:17 2018 : Auth: (1) Login incorrect (No Auth-Type found: rejecting the user via Post-Auth-Type = Reject): [anderson.barbosa/cma123] (from client localhost port 10)
    Mon Feb 26 12:42:17 2018 : Debug: (1) Using Post-Auth-Type Reject

    Obrigado!

  23. Anderson disse:

    Duvida, tem como deixar as senhas criptografadas na base? Obrigado!

    • Tem sim.

  24. Ledson disse:

    Nos arquivos

    /etc/freeradius/3.0/sites-enabled/default
    /etc/freeradius/3.0/sites-enabled/inner-tunnel
    /etc/freeradius/3.0/mods-enabled/sqlippool

    Vc faz a copia por segurança colocando no final do arquivo .orig
    Porém o endereço do copy esta para /sites-available/

    É isso msmo, já que o sites-enable é uma especie de link para o available, ou foi erro de digitação?

    • É isso mesmo!
      Em *-available estão os arquivos “realmente”, se você renomear os arquivos dentro do *-enabled vai estar renomeando o nome do atalho, vc vai continuar “chamando” esse arquivo na hora de carregar o freeradius, e pior se você criar outro dentro de enabled irá duplicar as configurações e terá vários erros.

  25. Olá, muito bom o seu tutorial, parabéns. Consegui fazer aqui funcionou tudo certo, so no mikrotik quando o usuario autentica no hotspot no log do mikrotik da a seguinte mensagem RADIUS ACCOUNTING REQUEST NOT SENT: NO RESPONSE.
    Saberia me dizer o que pode estar acontecendo ??

    Desde já muito obrigado

  26. Jacks disse:

    Fiz examente isso tudo ai , porem qdo reinicio o radius , pela primeira vez , ele nao sobe mais…
    Restarting freeradius (via systemctl): freeradius.serviceJob for freeradius.service failed because the control process exited with error code.
    See “systemctl status freeradius.service” and “journalctl -xe” for details.
    failed!

    como se algum arquivo de config estivesse errado , no tutorial vc diz pra descomentar algumas partes com nome ‘sql’ no arquivo está como ‘-sql’ é normal ? é o mesmo parametro ?

  27. DIEGO DA COSTA FELIPPE disse:

    Amigo tenho uma duvida antigamente na senha de um login PPPOE eu usava o atributo Password == senha_pppoe vi que nessa versão ele não aceita mais esse atributo que foi alterado para Cleartext-Password := consegue me dizer o por que? E por sinal o tópico abordado acima e muito bom parabéns me ajudou muito.

  28. Pedro Henrique disse:

    Amigo, muito bom. Como seria para fazer com que o hotspot do Mikrotik seja autenticado no banco de dados mysql?
    Tinha um aqui, mas dava o erro que radius não reponde, funcionava mas dava esse erro às vezes..
    Alguma dica ou ajuda?

  29. Leandro disse:

    Parabéns, muito bom seu tutorial. Teria como me ajudar com os valores que devo inserir nas tabelas do radius?
    Quero fazer autenticação pppoe.
    Obrigado!

    • LEANDRO
      No final deste post falo sobre valores que são inserido nas tabelas: http://blog.remontti.com.br/1651
      Eu particularmente gosto de criar grupos para ficar mais organizando, então ficaria + – assim:

      Se precisar ajuda me chama la no telegram. Posso demorar para responder mas respondo 😉

  1. 3 de julho de 2017

    […] Leia também: Instalando FreeRadius 3.0.X com integração MySQL ou MariaDB no Debian 9 Stretch […]

Deixe um comentário

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