Versão avaliada: Fedora 44
Melhores práticas são divididas em quatro pilares essenciais:
Performance (Otimização do Handshake)
Segurança Avançada (Mitigação de Riscos)
Logs e Auditoria (Visibilidade Sem Exposição)
Gerenciamento e Monitoramento (Monitorar antes que quebre)
Habilitar TLS Session Resumption (Fast Reconnect):
Quando um usuário se move e troca de AP (roaming), o dispositivo precisa refazer a autenticação. Com o Session Resumption ativo, o FreeRADIUS armazena um "ID de sessão" em cache, assim o próximo AP usa esse ID, pulando a fase pesada de troca de certificados e reduzindo o tempo de reconexão de 1 segundo para milissegundos.
# vi /etc/raddb/mods-enabled/eap
tls-config tls-common {
....
cache {
....
enable = yes
allow_session_resumption = yes
lifetime = 24 # hours
....
Nota: Para ambientes com uma única antena esta configuração não é necessária.
Ajustar as Pools de Threads:
Se você existem muitos dispositivos, aumente sutilmente o número de threads iniciais e máximas para evitar que pacotes fiquem na fila:
# vi /etc/raddb/radiusd.conf
thread pool {
start_servers = 5 # novo valor 10
max_servers = 32 # novo valor 64
min_spare_servers = 3 # novo valor 5
max_spare_servers = 10 # novo valor 10
}
Desativar o Modo Debug em Produção (-X):
O modo -X é excelente para testes, mas ele exibe as senhas PAP dos usuários em texto claro no terminal. Em produção, o FreeRADIUS deve executar estritamente como daemon:
# systemctl start radiusd.service
Isolamento de Redes via Atributos RADIUS (VLAN Dinâmica):
Em vez de criar vários SSIDs (o que polui o espectro de radiofrequência e derruba a performance do Wi-Fi), você pode usar um único SSID e fazer o FreeRADIUS dizer ao AP em qual VLAN o usuário deve cair, baseado no grupo do FreeIPA.
Se o usuário for do grupo g_wifi_corp, o RADIUS injeta os atributos de VLAN na resposta de sucesso:
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-Id = "10" # ID da VLAN Corporativa
}
Nota: Utilizando um único SSID se aplica somente quando o usuário pertence a somente um único grupo, portanto não existem critérios de consulta para desempate.
Em alternativa é possível usar o MAC address como forma de desempate, para isso será necessário configurar:
# mkdir /etc/raddb/consulta-mac
# vi /etc/raddb/consulta-mAC/wificorp.txt
60-F6-77-63-1B-36
insira uma linha em branco
# vi /etc/raddb/consulta-mac/wifimobi.txt
4C-ED-FB-34-93-4D
insira uma linha em branco
# chown root:radiusd -R /etc/raddb/consulta-mac
# chmod 640 /etc/raddb/consulta-mac/*.txt
Nota: Certifique-se do retorno do parâmetro Calling-Station-Id é apresentado, como AA:BB ou AA-BB, para popular os arquivos corretamente. Os dois pontos do final do endereço MAC é o delimitador de linha.
Nota: Se adicionar um novo MAC ao arquivo, o FreeRADIUS percebe a mudança e recarrega o arquivo automaticamente devido ao módulo passwd fazer cache em memória e monitora alterações no arquivo (mtime) sem você precisar reiniciar o RADIUS.
Arquivo de direcionamento do repositório de endereços MAC:
# vi /etc/raddb/mods-available/macfilter
# Mapeamento do arquivo Corp
passwd macs_corp {
filename = "/etc/raddb/consulta-mac/wificorp.txt"
format = "*Calling-Station-Id:"
}
# Mapeamento do arquivo Mobi
passwd macs_mobi {
filename = "/etc/raddb/consulta-mac/wifimobi.txt"
format = "*Calling-Station-Id:"
}
Criar link simbólico:
# ln -s /etc/raddb/mods-available/macfilter /etc/raddb/mods-enabled/macfilter
Ajustar o arquivo inner-tunnel com as configurações de filtro para grupo, endereço MAC e SSID.
# vi /etc/raddb/sites-enabled/inner-tunnel
authorize {
....
ldap
....
# =========================================================================
# PERFIL CORPORATIVO (g_wificorp)
# =========================================================================
if ((Ldap-Group == "g_wificorp") && (Called-Station-Id =~ /:WIFICORP$/i)) {
# Força o FreeRADIUS a rodar o módulo e checar o arquivo TXT
macs_corp
# Agora avalia se o MAC foi encontrado com sucesso
if (updated || ok) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-Id = "301" # VLAN Corp
}
}
else {
update request {
Module-Failure-Message := "Acesso negado: Dispositivo nao homologado para Rede Corporativa."
}
reject
}
}
# =========================================================================
# PERFIL MOBILE (g_wifimobi)
# =========================================================================
elsif ((Ldap-Group == "g_wifimobi") && (Called-Station-Id =~ /:WIFIMOBI$/i)) {
# Força o FreeRADIUS a rodar o módulo mobile
macs_mobi
if (updated || ok) {
update reply {
Tunnel-Type = VLAN
Tunnel-Medium-Type = IEEE-802
Tunnel-Private-Group-Id = "302" # VLAN Mobi
}
}
else {
update request {
Module-Failure-Message := "Acesso negado: Dispositivo nao homologado para Rede Mobile."
}
reject
}
}
# =========================================================================
# USUÁRIO SEM PERFIL DE WI-FI
# =========================================================================
else {
update request {
Module-Failure-Message := "Acesso negado: Usuario nao possui perfil de acesso ao Wi-Fi."
}
reject
}
....
Obs.: Não obtive sucesso filtrando somente grupo e MAC, tive que adicionar o SSID.
Como foi desativado o modo `-X`, agora é necessário ter logs inteligentes que mostrem quem conectou, quando e em qual AP, sem expor dados sensíveis.
Configurar o Log de Conexões (Linha de Produção):
#vi /etc/raddb/radiusd.conf
log {
auth = yes
....
Ao ativar será criado arquivo em "/var/log/radius/radacct/" e/ou "journalctl" mostrando apenas o essencial da conexão:
Auth: (12) Login OK: [tiochico] (from client minha-controladora-wifi port 0 cli AA-BB-CC...)
Habilitar o Módulo "linelog":
O módulo "linelog" permite enviar os logs para central de logs (Grafana Loki, Splunk ou ELK) da saída do RADIUS em JSON ou no padrão que seu agregador, facilitando a criação de dashboards de usuários conectados.
Configure:
# vi /etc/raddb/mods-enabled/linelog
linelog {
....
filename = ${logdir}/radius_json.log
permissions = 0640
format = "json_log"
json_log = "{\"timestamp\":\"%S\",\"user\":\"%u\",\"mac\":\"%{%{Calling-Station-Id}:-unknown}\",\"ssid\":\"%{%{Called-Station-Id}:-unknown}\",\"vlan\":\"%{%{reply:Tunnel-Private-Group-Id}:-none}\",\"status\":\"%{%{control:Post-Auth-Type}:-ACCEPT}\",\"msg\":\"%{%{request:Module-Failure-Message}:-Success}\"}"
Configure:
post-auth {
linelog
....
Post-Auth-Type REJECT {
....
linelog
....
Status Server (Monitoramento de Vida):
O FreeRADIUS possui um recurso nativo para responder a ferramentas de monitoramento (como Zabbix ou Prometheus).
Ele permite que um script interno pergunte ao RADIUS quantas autenticações ele está processando por segundo e se a comunicação com o FreeIPA está saudável.
# ln -s /etc/raddb/sites-available/status /etc/raddb/mods-enabled/status
# vi /etc/raddb/mods-enabled/status
server status {
listen {
type = status
ipaddr = * # IP Zabbix
port = 18121
}
# vi /etc/raddb/clients.conf
client servidor_zabbix {
ipaddr = 10.1.10.50
secret = Monitoramento2026
}
Muitas controladoras Wi-Fi (como Ubiquiti UniFi, Aruba ou Cisco) preferem testar a saúde do RADIUS batendo diretamente na porta padrão de autenticação (1812) em vez da porta de gerência (18121).
Para que o FreeRADIUS responda Status-Server diretamente nas portas de produção (default e inner-tunnel), certifique-se de que a diretiva abaixo esteja habilitada dentro do bloco global de segurança:
# vi /etc/raddb/radiusd.conf
....
security {
# Permite responder requisições de Status-Server nas portas normais
status_server = yes
}
# echo "Message-Authenticator = 0x00" | radclient -x 127.0.0.1:18121 status adminsecret
Received Response Id 164 from 127.0.0.1:18121 to 127.0.0.1:0 length 20
Packet-Type = Access-Accept
Keepalived (VRRP) / Alta Disponibilidade (Pensando no Futuro):
Se o seu FreeRADIUS cair, ninguém conecta no Wi-Fi. Uma excelente prática é ter dois servidores FreeRADIUS idênticos apontando para o FreeIPA. Você pode colocar ambos na controladora Wi-Fi (o Windows e o Android aceitam configurar um "RADIUS Primário" e um "RADIUS Secundário") ou usar um IP virtual (VIP) gerenciado por Keepalived para fazer o failover transparente dos servidores de autenticação.
monitoramento centralizado (como Zabbix) ?
gerenciamento direto nos logs locais do Fedora?