FreeRadius - Tutorial e Dicas

Pra que serve um servidor Radius e o software FreeRadius?

Um servidor Radius é o coração da autenticação, autorização e auditoria (AAA) para sistemas próximos à camada de rede, ele é o padrão, de facto standard para armazenar e gerenciar usuários nesses cenários. O que seriam esses sistemas? Entram como sistemas próximos a camada de rede os Captive Portals e Wi-Fi com autenticação WPA-Enterprise (padrão 802.1x). Mas além disso, o Radius também fornece essa funcionalidade para autenticação de usuários UNIX e Linux, por exemplo.

De forma resumida, um servidor Radius serve para:

  • armazenar credenciais (logins e senha) de usuários #autenticação #authentication de forma centralizada, em um só lugar;
  • armazenar dados de permissão para os usuários, seus IPs na rede e outros metadados #authorization #autorização centralizados, em um só lugar;
  • armazenar e gerenciar a quantidade de logins que um usuário fez #accounting #auditoria;

Um sistema Radius em funcionamento ocorre entre as seguintes partes.

Entidades ou Partes que operam numa comunicação com o servidor Radius [autoria própria]

Quais os usos de um servidor Radius como o FreeRadius?

  • Armazenar e verificar senhas para uma rede Wireless WPA-Enterprise 802.1x
  • Armazenar e verificar senhas para um Captive Portal
  • Armazenar e verificar senhas para redes discadas dial-up PPP
  • Armazenar e verificar senhas para uma VPN (OpenVPN)
  • Armazenar e verificar senhas para usuários de um firewall (como o pfSense)
  • Armazenar e verificar senhas para uma rede física implementada com o protocolo 802.1x

Quais Protocolos o FreeRadius suporta na comunicação Usuário x Cliente Radius (NAS)?

Baseadas em login e senha

  • PAP
  • CHAP
  • Digest
  • MS-CHAP

Baseadas em EAP

  • PEAP
  • EAP-MSCHAPv2
  • Cisco LEAP
  • EAP-GTC
  • EAP-MD5
  • EAP-PWD

De que forma o FreeRadius armazena as senhas dos usuários?

  • Clear-text
  • NT hash (ntlm_auth)
  • MD5 hash
  • Salted MD5 hash
  • SHA1 hash
  • Salted SHA1 hash
  • Unix Crypt

Dependendo do protocolo escolhido na comunicação usuário x cliente radius (NAS), se é obrigado a armazenar a senha de uma forma específica. Essa tabela mostra a relação:

Clear-textNT hash
(ntlm_auth)
MD5 hashSalted MD5 hashSHA1 hashSalted SHA1 hashUnix Crypt
PAP
CHAPxxxxxx
Digestxxxxxx
MS-CHAPxxxxx
PEAPxxxxx
EAP-MSCHAPv2xxxxx
Cisco LEAPxxxxx
EAP-GTC
EAP-MD5xxxxxx
EAP-PWDxxxx
Tabela comparando protocolos de comunicação com formas de armazenamento de senhas. Extraído do website deployingradius.com de Alan DeKok http://deployingradius.com/documents/protocols/compatibility.html

Radius como um Authentication Oracle

O Radius pode agir apenas como um conversor de protocolos, mas buscar os usuários de um sistema externo como o módulo PAM do Linux, um servidor LDAP ou ntlm_auth.

Quando operando desse modo, o FreeRadius passa a ter as seguintes limitações de uso de protocolos:

PAMLDAP "bind as user"ntlm_auth
PAP
CHAPxxx
Digestxxx
MS-CHAPxx
PEAPxx
EAP-MSCHAPv2xx
Cisco LEAPxxx
EAP-GTCxxx
EAP-MD5xxx
EAP-PWDxxx
Tabela comparando protocolos de comunicação com formas de armazenamento de senhas em modo authentication oracle. Extraído do website deployingradius.com de Alan DeKok http://deployingradius.com/documents/protocols/oracles.html

Armazenando senhas no FreeRadius

O FreeRadius pode guardar senhas de diferentes formas em seu banco de dados interno ou num banco de dados externo. Dependendo da escolha da forma de guardar senhas, você precisa usar um protocolo específico de comunicação.

Esse artigo com uma ótima tabela explica quais formas e protocolos são compatíveis com os tipos de hash:
http://deployingradius.com/documents/protocols/compatibility.html

Atualmente quase todos os métodos de hashing de senhas no FreeRadius não são recomendados. O único que se salva é o UnixCrypt:
https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords/31846#31846

Formatos de hashing suportados (e como configurá-los) segundo a documentação oficial:
https://freeradius.org/radiusd/man/rlm_pap.html

Na documentação do FreeRadius também vemos alguns tipos formas de armazenamento de senhas:

https://freeradius.org/radiusd/man/rlm_pap.txt

Utilizando o FreeRadius como servidor de autenticação do PostgreSQL

Adicionar uma linha no arquivo pg_hba.conf, informando o IP do servidor Radius, o shared secret, etc... Um exemplo de configuração
[code]<br>hostssl             all        all        0.0.0.0/0         radius  radiusserver=127.0.0.1 radiussecret=your-super-secret-shared-secred radiusport=1812<br>[/code]

radiusserver é o IP ou DNS do(s) servidor(es) Radius.

radiussecret é a senha que é usada para criar uma conexão segura entre o Radius e o PostgreSQL.

radiusport é a porta de autenticação do Radius (1812 por padrão).

Referências

Tutorial para integrar PostgreSQL com diversos sistemas de autenticação
https://severalnines.com/blog/integrating-postgresql-authentication-systems

Documentação do pg_hba.conf
https://www.postgresql.org/docs/9.3/auth-pg-hba-conf.html

Multi Factor Authentication no FreeRadius

O FreeRadius suporta multi factor authentication MFA com Google Authenticator.

Opções de protocolos para usar no Radius

Explicação oficial do FreeRadius sobre os protocolos EAP suportados
https://wiki.freeradius.org/protocol/EAP

Uma explicação breve sobre vários protocolos
https://netscout.desk.com/customer/en/portal/articles/2333967-linkrunner-at-802-1x-authentication-eap-types?b_id=1807

Explicação de 2011 sobre PAP, CHAP e MS-CHAP
https://hub.packtpub.com/freeradius-working-authentication-methods/

Exemplos do arquivo de configuração do FreeRadius

https://www.ip-sa.pl/doc/dslam/maxtnt/radius/userfile.htm

You should also read:

Dicas e Cheats do Gmail

O Gmail tem algumas funções desconhecidas bem interessantes, aqui vai elas: Você pode colocar pontos entre as letras que fazem parte do seu…