Em Construção!


Configurando servidor FreeRADIUS para autenticar clientes de um access point wi-fi utilizando PAM


Introdução


Esse processo não é complicado em si, porém como o FreeRADIUS é muito extensível, ficamos perdidos nas inúmeras opções, protocolos, hashs e arquivos de configuração.

Mas depois que entendemos as relações básicas, onde fica cada opção, fica mais fácil atacar o problema.

Na minha rede, fiz testes utilizando Mandriva 2008.0, apesar de eu não gostar dessa distribuição, foi a que eu tive de usar. Infelizmente, o FreeRADIUS que tinha disponível nos sources oficiais do MDV era muito antigo em relação a versão atualmente disponibilizada no site oficial [1] desse servidor, então preferi baixar o source e compilá-lo.

Compilar o FreeRADIUS não foge da regra geral ./configure && make && make install, porém, precisamos nos certificar que certas dependências serão preenchidas, caso contrário na hora da utilização perderemos algumas features imprescindíveis.
Ex.: Se você não tivermos as "development libraries" do openssl, mesmo tendo este instalado, não poderemos criar túneis TLS para proteger os dados.

Também vou dar algumas dicas para não misturar os arquivos do FreeRADIUS com o resto do sistema, e também para que fique fácil sua remoção caso seja necessário.

Acredito que esse tutorial seja de escopo para usuários médios/avançados, não vou ficar explicando coisas básicas, por exemplo descompactar um tarball. Se você tem dúvidas, lembre-se: GIYF - Google Is Your Friend... Para não usar a outra versão mais deselegante. hehehe

Instalando as dependências


Primeiros instale as seguintes dependências, em geral esses pacotes ou terminam com -dev ou, como no caso do MDV, -devel. Use o gerenciador de pacotes da sua distro, apt-get, urpmi, rpm, ... ou seja lá qual for. Em geral, todas as distros modernas tem esses pacotes prontos.


Compilando o FreeRADIUS


Baixe e descompacte o código fonte de [1]. Um bom lugar para fazê-lo é em /usr/src . Entre nesse diretório.

Como dito anteriormente, a compilação do FreeRADIUS não foge ao famoso ./configure && make && make install, porém podemos ir um pouco além, já que vamos instalar sem empacotar, é legal que criemos uma árvore alternativa, objetivando não poluir a principal. Crie uma nova pasta na raíz, pode ser um /opt2 (em geral, o KDE usa o /opt...) ou um /freeradius. Fica a sua escolha, vou tomar como base o /opt2.

./configure --prefix=/opt2/ --with-openssl | grep WARNING


Se tiver dúvidas nos parâmetros do ./configure, ./configure --help é o que você precisa.

Por que utilizar o "| grep WARNING" ? Simples, para ficar mais fácil de verificar se nada de importante foi desabilitado, pois a lista passa rápido.

Por exemplo, uma das minhas saídas foi:
configure: WARNING: silently not building rlm_krb5.
configure: WARNING: FAILURE: rlm_krb5 requires:  krb5.h krb5.


Ele disse "não vou fazer o módulo do kerberos, pois não achei os arquivos de cabeçalho dele!". Tudo bem, não quero nada com kerberos... Mas e se fosse o openssl? Então seria um problema.

Se o ./configure ocorreu sem erros, siga adiante, caso contrário, e resolva os problemas do ./configure.

Compile e instale o source:
 make && make install 

Se ocorrerem problemas na compilação e instalação, resolva-os. Caso contrário, siga em frente.

Novo diretório de libraries


Se você se assustou com esses warnings:
Libraries have been installed in:
   /opt2/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
	 during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
	 during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.




Como foi criada uma nova raíz para o FreeRADIUS, o sistema não vê as novas libraries, logo temos que fazê-lo enxergar esses arquivos, é simples, edite o arquivo /etc/ld.so.conf e adicione a linha:
/opt2/lib


e depois para atualizar a base de dados das bibliotecas, execute:
ldconfig


Teste inicial do servidor


O FreeRADIUS já vem com uma conta inicial de teste, para você testar e ver se o seu servidor esta rodando ok, logo é bacana fazer esse teste e ver se ele foi compilado e instalado corretamente.

Rode o daemon do RADIUS com o comando:
./opt2/sbin/radiusd -X


Nesse momento ele executará o daemon, e se tudo ocorrer OK, ele deverá produzir os certificados SSL com demora de alguns instantes, e se tudo der certo, ele não fechar inesperadamente, estará rodando em foreground.

Agora, usaremos o utilitário /opt2/bin/radtest para testar e verificar se é possível autenticar sem problemas:
[mylogin@mypc ~]$ /opt2/bin/radtest usuario1 senha1 127.0.0.1 0 testing123
Sending Access-Request of id 52 to 127.0.0.1 port 1812
	User-Name = "usuario1"
	User-Password = "senha1"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=52, length=20


No comando, substitua usuario1/senha1 por um usuário e uma senha do seu sistema.

Se você obteve rad_recv: Access-Accept, parabéns seu servidor RADIUS está de pé e autenticando OK.

Configurando o FreeRADIUS


A parte boa desse processo é a seguinte, o FreeRADIUS vem praticamente pronto para ser usado, mas existem diversas opções que podem ser desabilitadas para aumentar a segurança do seu servidor.

Primeiro vamos editar o arquivo /opt2/etc/raddb/clients.conf, onde são armazenados os dispositivos que podem ser autenticados no servidor RADIUS.

Para começar você verá no arquivo, bem começo a entrada que libera para o IP 127.0.0.1 e para a senha testing123, aquela que usamos no exemplo anterior para testar o servidor. Apesar de liberar somente para a máquina local, comente tudo que está entre os { }; não vamos usar estas configurações.

As entradas de configuração nesse arquivo tem um formato bem simples, algo como:
client ENDEREÇO {
		secret            = CHAVE_SECRETA
		shortname       = NOME_DA_PORTA
		nastype          = DIVERSOS
}

ENDEREÇO pode ser, uma classe rede, um //hostname//, um IP. Usaremos aqui o IP que AP utiliza na rede.
NOME_DA_PORTA auto-explicativo, não?
DIVERSOS pode ser cisco, computone, livingston, max40xx, multitech, netserver, pathras, patton, portslave, tc, usrhiper, other.
Para nós, other está OK.



Para abrir acesso no AP Wi-FI, eu adicionei a seguinte entrada no clients.conf:
client 172.16.0.1 {
		secret            = senha_secreta
		shortname       = AP_WiFI
		nastype          = other
}


Sendo que 172.16.0.1 é o IP do meu roteador wireless.

Configurando o Access Point para autenticar no FreeRADIUS


A figura mostra um pedaço de um screenshot da janela de configuração de um roteador wifi DLINK DI-524, mas as opções não devem variar muito entre os roteadores semelhantes

autenticação 802.1x

Salve as configurações e pronto. Assim, todas as solicitações de associação (conexão) que o roteador receber, serão automaticamente repassadas para a autenticação no servidor RADIUS.

Entenda a relação Protocolo em Uso X Tipo de Criptografia (ou hash) Suportado


Clear-text NT hash
(ntlm_auth)
MD5 hash Salted MD5 hash SHA1 hash Salted SHA1 hash Unix Crypt
PAP
CHAP x x x x x x
Digest x x x x x x
MS-CHAP x x x x x
PEAP x x x x x
EAP-MSCHAPv2 x x x x x
Cisco LEAP x x x x x
EAP-GTC
EAP-MD5 x x x x x x
EAP-SIM x x x x x x


Eu estava tendo sérios problemas para entender que protocolo usar com usuários NIS, até que postei um email na lista oficial do FreeRADIUS, e recebi como resposta essa tabela. Foi simplesmente a melhor resposta que eu poderia obter =) Com ela fica bem claro que protocolo podemos usar, com cada tipo de hash.

Na NIS, ou do /etc/passwd, as senhas são armazenadas com hashs do tipo unix crypt, logo como demonstrado na tabela, as opções não são muitas. Utilizei PAP aqui.

Mas você deve estar se perguntando: "PAP? Mas PAP não tem criptografia!", é nessa hora que entra o TTLS, ou "Tunneled Transport Layer Security", que cria um tunel criptográfico entre o servidor Radius e o cliente, não deixando que a senha seja transportada em texto claro.

Se você possui hashs de senha de outro tipo, como por exemplo NT, você poderá utilizar outros tipos de protocolos, de acordo com a sua necessidade, o FreeRADIUS é muito extensível.

Referências

  1. Site oficial do FreeRADIUS http://freeradius.org/
  2. 802.1X Port-Based Authentication HOWTO - Desatualizado, mas tem um bom esquema de como funciona a autenticação por RADIUS
  3. HOWTO:FreeRadius+EAP/PEAP
  4. Deploying RADIUS:The book

Agradecimentos


Thank you Ivan Kalik for that wonderful table! =)
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki