Instalação do FreeRADIUS integrado com Active Directory

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.