RADIUS é um protocolo de rede que oferece gerenciamento centralizado de autorização e autenticação para acesso de usuários a serviços de rede. Muito usado, por exemplo, como uma alternativa mais segura de acesso a uma rede Wi-Fi, onde cada usuário usa suas credenciais para se conectar, em vez de todos compartilharem uma única senha.
FreeRADIUS é um sistema livre e aberto que implementa esse protocolo e pode ser configurado pra usar diferentes back-ends para autorização e autenticação, um deles é o Active Directory.
Pra configurar esse sistema, garanta antes que o servidor RADIUS possa encontrar e ingressar no domínio – aqui tratado como exemplo.com:
- Domínio e o controlador de domínio podem ser encontrados por consulta de DNS e são acessíveis na rede.
- O arquivo /etc/hosts do servidor deve conter o FQDN especificado, algo como:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.10 radius-server.exemplo.com radius-server
Após isso, instale e configure o Samba, que vai ser usado para ingressar o computador no domínio. A partir daqui, as instruções são válidas para sistemas da família Red Hat, tendo sido usado o CentOS Stream 9.
# dnf install samba
Adapte a configuração abaixo para o seu domínio, alterando ou adicionando os seguintes parâmetros no arquivo /etc/samba/smb.conf :
[global]
workgroup = EXEMPLO
security = ads
winbind use default domain = yes
realm = EXEMPLO.COM
idmap config * : backend = tdb
idmap config * : range = 10000-19999
idmap config EXEMPLO : backend = rid
idmap config EXEMPLO : range = 20000-99999
Remova também o parâmetro a seguir para evitar o risco de conflito na autenticação:
[global]
passdb backend = tdbsam
Verifique se há algum erro na sua configuração com
# testparm
Agora, para ingressar o servidor no domínio:
# net ads join -U Administrator
Instale o pacote samba-winbind-clients, habilite o serviço winbind e teste a autenticação com ntlm_auth:
# dnf install samba-winbind-clients
# systemctl enable --now winbind.service
# ntlm_auth --request-nt-key --username=daniel --password='senhaqueanoteinoblocodenotas'
Um output como
: (0x0)
indica sucesso.
Agora que o servidor já faz parte do domínio e conseguimos autenticar usuários com ntlm_auth, podemos instalar os pacotes do FreeRADIUS para então configurá-lo
# dnf install freeradius freeradius-utils
Pra autenticação no AD, vamos usar a combinação de protocolos PEAP/MSCHAPv2.
Edite a o módulo mschap localizado em /etc/raddb/mods-enabled/mschap para alterar as seguintes configurações
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
}
Edite o módulo eap localizado em /etc/raddb/mods-enabled/eap para alterar a seguinte configuração:
eap {
default_eap_type = peap
}
Dica: os arquivos de configuração do FreeRADIUS são extensivamente comentados. Isso é ótimo porque ajuda a entender a configuração já na hora. Mas se quiser ver só a configuração, sem os comentários e linhas em branco:
$ grep -vE '^\s*#|^\s*$' /caminho/para/arquivo.txt
Na pasta /etc/raddb/certs, execute o arquivo bootstrap para gerar os certificados necessários para o TLS usado no PEAP.
Adicione o usuário radiusd ao grupo wbpriv para que o FreeRADIUS tenha acesso para ler a resposta do winbind à solicitação de autenticação, através do socket em /var/lib/samba/winbindd_privileged/pipe
# usermod -aG wbpriv radiusd
Abra as portas necessárias no firewall:
# firewall-cmd --permanent --add-port=1812/udp
# firewall-cmd --permanent --add-port=1813/udp
# firewall-cmd --reload
E agora basta iniciar o serviço radiusd:
# systemctl enable --now radiusd.service
Você pode testar a autenticação pelo FreeRADIUS com
radtest -t mschap daniel senhaqueanoteinoblocodenotas localhost 0 testing123
e configurar outros clientes do FreeRADIUS em /etc/raddb/clients.conf
Alguns clientes podem não aceitar o certificado gerado com as configurações padrão do FreeRADIUS, então é recomendado ajustar as configurações pra que o certificado seja emitido corretamente para o FQDN do servidor. O Easy RSA também pode ajudar a gerar e manter os certificados.