REDE ONLINE · 7 fabricantes · 84 artigos · 1.2k comandos
v2.1.0 PT_BR
CircuitoCarioca
Home
↳ Visão geral Datacom Nokia Huawei Mikrotik Cisco Intelbras Parks
↳ Visão geral VLAN QinQ MPLS BGP OSPF
Ferramentas
↳ Visão geral Linux Windows Zabbix Grafana LibreNMS Firewall VPN Hardening
Wiki Comunidade Sobre
entrar cadastrar
autenticação · AAA · padrão de ISP

FreeRADIUS

O mecanismo padrão de autenticação PPPoE/Hotspot em ISP brasileiro — da arquitetura interna ao troubleshooting, com integração real MySQL + Mikrotik.

Nesta página

1. Contexto histórico e normativo 2. Arquitetura interna e fluxo de processamento 3. Instalação (Debian/Ubuntu) 4. Arquivos de configuração principais 5. Integração com MySQL/MariaDB 6. Schema — tabelas principais 7. Cadastro de NAS (clients.conf) 8. Teste — radtest e modo debug 9. Integração com Mikrotik RouterOS 10. CoA e PoD — controle de sessão ativa 11. Exemplos de políticas reais de ISP 12. Performance e dimensionamento 13. Monitoramento 14. Segurança 15. Backup e recuperação 16. Troubleshooting 17. Glossário 18. Referências

1. Contexto histórico e normativo

O protocolo RADIUS (Remote Authentication Dial-In User Service) foi criado em 1991 pela Merit Network para autenticação discada na NSFNET. Foi padronizado nas RFC 2865 (Authentication) e RFC 2866 (Accounting), e posteriormente estendido pela RFC 5176 (CoA/PoD) para controle de sessão ativa, e RFC 6614 (RadSec) para transporte sobre TLS.

O FreeRADIUS é a implementação open-source mais utilizada no mundo, citada em dezenas de RFCs como implementação de referência. No Brasil, tornou-se o padrão de fato em ISPs que usam PPPoE ou Hotspot com Mikrotik, combinado com MySQL/MariaDB para armazenamento de credenciais e registros de conexão — estes últimos com obrigação legal de guarda pelo Marco Civil (Art. 13).

2. Arquitetura interna e fluxo de processamento

O FreeRADIUS é baseado em uma arquitetura modular. Cada funcionalidade (autenticação SQL, LDAP, EAP, etc.) é implementada por um módulo (rlm_*.so). O daemon principal (radiusd) orquestra o processamento de cada pacote através de uma cadeia de módulos organizada em seções:

  • authorize — verifica se o cliente (NAS) é conhecido, pré-processa o pedido.
  • authenticate — valida as credenciais (senha, certificado, etc.).
  • post-auth — ações pós-autenticação (ex.: gravar log, aplicar políticas).
  • accounting — registra início, atualização e fim de sessão.

Os virtual servers (definidos em sites-available/) permitem rodar múltiplas políticas diferentes no mesmo daemon — por exemplo, um virtual server para PPPoE e outro para Hotspot, cada um com seu próprio fluxo de módulos. Isso é crucial para ISPs que oferecem serviços distintos.

3. Instalação (Debian/Ubuntu)

apt update
apt install freeradius freeradius-mysql freeradius-utils mariadb-server

# Confirma versão instalada (3.0.x é o padrão nas distros atuais)
freeradius -v

Nomenclatura de diretório: FreeRADIUS 2.x usava /etc/raddb/; a versão 3.0 (atual) usa /etc/freeradius/3.0/. Guias antigos ainda referenciam o caminho velho.

4. Arquivos de configuração principais

  • /etc/freeradius/3.0/radiusd.conf — configuração central do daemon (threads, logs, etc.).
  • /etc/freeradius/3.0/clients.conf — cadastro dos NAS autorizados.
  • /etc/freeradius/3.0/mods-available/sql — conexão com banco de dados.
  • /etc/freeradius/3.0/mods-available/sqlippool — pool de IP dinâmico.
  • /etc/freeradius/3.0/sites-available/default — virtual server padrão.
  • /etc/freeradius/3.0/dictionary — mapeamento de atributos RADIUS.

5. Integração com MySQL/MariaDB

# Criar banco e usuário dedicado
mysql -u root -p
CREATE DATABASE radius;
CREATE USER 'radius'@'localhost' IDENTIFIED BY 'senha-forte-aqui';
GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost';
FLUSH PRIVILEGES;
EXIT;

# Importar schema padrão do FreeRADIUS
mariadb -u radius -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

Configuração do módulo SQL (mods-available/sql):

sql {
    driver = "rlm_sql_mysql"
    dialect = "mysql"
    server = "localhost"
    port = 3306
    login = "radius"
    password = "senha-forte-aqui"
    radius_db = "radius"
    pool {
        start = 5
        min = 4
        max = 100
        spare = 3
    }
}

Habilitar o módulo:

ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql
# Em sites-available/default, descomentar "sql" nos blocos authorize {} e accounting {}

6. Schema — tabelas principais

TabelaFunção
radcheckCredenciais do usuário e atributos de checagem
radreplyAtributos devolvidos ao NAS após autenticação
radgroupcheck / radgroupreplyMesma lógica, mas por grupo de usuários (planos)
radusergroupAssociação usuário ↔ grupo
radacctRegistro de accounting — início/fim de sessão, bytes trafegados
-- Cadastrar usuário de teste
INSERT INTO radcheck (username, attribute, op, value)
VALUES ('cliente001', 'Cleartext-Password', ':=', 'senha123');

-- Limitar banda via atributo Mikrotik-Rate-Limit
INSERT INTO radreply (username, attribute, op, value)
VALUES ('cliente001', 'Mikrotik-Rate-Limit', ':=', '10M/10M');

7. Cadastro de NAS (clients.conf)

client mikrotik-borda-01 {
    ipaddr = 10.0.0.1
    secret = "segredo-forte-compartilhado"
    shortname = borda-01
    nas_type = other
}

O secret deve ser idêntico ao configurado no Mikrotik (seção 9). Divergência é a causa nº 1 de "Access-Reject sem motivo aparente".

8. Teste — radtest e modo debug

# Parar o serviço e rodar em primeiro plano com log verboso
systemctl stop freeradius
freeradius -X

# Em outro terminal, testar autenticação
radtest cliente001 senha123 localhost 0 segredo-forte-compartilhado

# Resposta esperada: Access-Accept

O modo debug (-X) é a ferramenta de diagnóstico mais importante — mostra cada módulo executado e o motivo exato de Accept/Reject.

9. Integração com Mikrotik RouterOS

/radius add service=ppp address=10.0.0.20 secret=segredo-forte-compartilhado \
    authentication-port=1812 accounting-port=1813

/ppp aaa set use-radius=yes accounting=yes interim-update=5m

interim-update=5m balanceia precisão do accounting vs. volume de tráfego RADIUS.

10. CoA e PoD — controle de sessão ativa

CoA (Change of Authorization) altera atributos de uma sessão ativa. PoD (Packet of Disconnect) força o encerramento. Ambos usam a porta 3799/UDP (RFC 5176).

# Desconectar usuário remotamente
echo "User-Name=cliente001" | radclient -x 10.0.0.1:3799 disconnect segredo-forte-compartilhado

O daloRADIUS oferece interface web para essas funções, sem linha de comando manual.

11. Exemplos de políticas reais de ISP

CenárioConfiguração
Plano de banda (10 Mbps)Mikrotik-Rate-Limit := 10M/10M em radreply
Bloqueio por inadimplênciaRemover entrada em radcheck (usuário inexistente → Access-Reject) ou usar atributo Auth-Type := Reject
Redirecionamento para portal de pagamentoAtributos WISPr-Redirection-URL ou Mikrotik-Advertise-URL (dicionário Mikrotik)
IP fixo por clienteFramed-IP-Address := 10.0.0.100 em radreply

12. Performance e dimensionamento

Para ISPs com milhares de assinantes, o gargalo geralmente está no banco de dados. Estratégias de otimização:

  • Pool de threads — ajuste em radiusd.conf para evitar filas.
  • Índices no MySQL — garantir índices em username, groupname, acctstarttime.
  • Cache de sessão — módulo rlm_cache reduz consultas repetidas ao banco.
  • Replicação MySQL — um slave dedicado para consultas de accounting, deixando o master para autenticação.
  • Teste de carga — usar radperf (parte do FreeRADIUS) ou radclient em loop para simular centenas de autenticações/segundo e medir tempos de resposta.
# Ajuste de threads (radiusd.conf)
thread pool {
    start_servers = 10
    max_servers = 64
    min_spare_servers = 6
    max_spare_servers = 20
    max_queue_size = 131072
}

13. Monitoramento

Script para monitorar a saúde do FreeRADIUS e integrar com Zabbix/PRTG:

#!/bin/bash
# check_freeradius.sh — verifica se o RADIUS está respondendo
radtest monitor-user senha-monitor localhost 0 segredo-local
if [ $? -eq 0 ]; then
  echo "OK: RADIUS respondendo"
  exit 0
else
  echo "CRITICAL: RADIUS não respondeu"
  exit 2
fi

Monitore também: fila de autenticação (radiusd -X mostra o backlog), taxa de Accept/Reject (via log), e tempo de resposta via radclient com cronômetro.

14. Segurança

  • Nunca usar o secret padrão (testing123) em produção.
  • Restringir clients.conf a IPs específicos, nunca faixas amplas.
  • RadSec (RADIUS sobre TLS) — usar quando o tráfego RADIUS atravessar redes não confiáveis. O FreeRADIUS suporta RadSec via módulo rlm_radsec (RFC 6614).
  • Proteção contra brute-force — limitar tentativas consecutivas com rlm_counter ou firewall (fail2ban).
  • Senhas com hash — sempre que possível, usar PAP com hash (ex.: SHA1-Password) em vez de Cleartext-Password. PPPoE com CHAP/MSCHAP exige texto puro no RADIUS; nesse caso, restrinja o acesso ao banco.

15. Backup e recuperação

O que deve ser backupeado em um servidor FreeRADIUS:

  • Banco de dados MySQL — contém credenciais, planos e registros de conexão (obrigação Marco Civil). Use restic ou Borg com dump prévio.
  • Arquivos de configuração/etc/freeradius/ (clients.conf, dictionary, mods-*, sites-*).
  • Schema do banco — embora recriável, é mais rápido ter um backup.

Teste de restauração: após restaurar os arquivos e o banco, execute radtest com um usuário de teste para validar. Conecte-se ao LGPD e à regra 3-2-1-1-0 para garantir que o backup do RADIUS atenda à exigência de recuperação.

16. Troubleshooting

Access-Reject sem motivo aparente

Rodar freeradius -X (seção 8). Causas comuns: secret divergente entre NAS e clients.conf, usuário sem entrada em radcheck, senha errada.

Cliente autentica mas não recebe atributos (banda, IP)

Checar radreply/radgroupreply — nome de atributo incorreto (ex.: dicionário Mikrotik) gera esse sintoma silenciosamente.

Sessões "presas" em radacct

Causado por interim-update mal configurado ou perda de Accounting-Stop. Job periódico pode fechar sessões órfãs.

Duplicidade de IP no pool

Verificar se lease_duration (sqlippool) é maior que o Acct-Interim-Interval.

17. Glossário

NAS Network Access Server — equipamento que recebe a conexão do cliente e consulta o RADIUS.
PPPoE Point-to-Point Protocol over Ethernet — método de autenticação predominante em ISPs brasileiros.
EAP Extensible Authentication Protocol — framework para métodos de autenticação (TLS, TTLS, PEAP).
CoA Change of Authorization — altera atributos de uma sessão ativa sem derrubá-la.
PoD Packet of Disconnect — encerra uma sessão RADIUS remotamente.
RadSec RADIUS sobre TLS — transporte seguro do protocolo RADIUS (RFC 6614).
Interim-Update Pacote de accounting enviado periodicamente pelo NAS durante a sessão.
Virtual Server Instância de processamento independente, permitindo múltiplas políticas no mesmo daemon.

18. Referências

  • RFC 2865 — Remote Authentication Dial In User Service (RADIUS).
  • RFC 2866 — RADIUS Accounting.
  • RFC 5176 — Dynamic Authorization Extensions to RADIUS (CoA/PoD).
  • RFC 6614 — Transport Layer Security (TLS) Encryption for RADIUS (RadSec).
  • Documentação oficial FreeRADIUS (freeradius.org).
  • NIST SP 800-63 — Digital Identity Guidelines (referência para autenticação).
  • CGI.br — Cartilha de Segurança para Internet (boas práticas de autenticação).
  • Páginas relacionadas: Conceitos de AAA, daloRADIUS, LGPD, Regra 3-2-1(-1-0).

Conteúdo técnico independente. Nenhum trecho é cópia literal de fonte de terceiro — comandos refletem a sintaxe funcional real do software.