Wiki source for FreeRadius


Show raw source

======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.

- libopenssl-devel
-


====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

{{image url="files/freeradius/802.png" title="text" alt="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====

""<table border=1>
<th>
<td width="12%"><font color="#4088b8"><strong>Clear-text</strong></font></td>
<td width="12%"><font color="#4088b8"><strong>NT hash<br />(<a href="oracles.html">ntlm_auth</a>)</strong></font></td>
<td width="12%"><font color="#4088b8"><strong>MD5 hash</strong></font></td>
<td width="12%"><font color="#4088b8"><strong>Salted MD5 hash</strong></font></td>
<td width="12%"><font color="#4088b8"><strong>SHA1 hash</strong></font></td>
<td width="12%"><font color="#4088b8"><strong>Salted SHA1 hash</strong></font></td>

<td width="12%"><font color="#4088b8"><strong>Unix Crypt</strong></font></td>
</th>
<tr>
<tr><td><font color="#4088b8"><strong>PAP</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
</tr>
<tr><td><font color="#4088b8"><strong>CHAP</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>Digest</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>MS-CHAP</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>PEAP</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>EAP-MSCHAPv2</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>Cisco LEAP</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>EAP-GTC</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#00ff00" align="center">√</td>
</tr>
<tr><td><font color="#4088b8"><strong>EAP-MD5</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
<tr><td><font color="#4088b8"><strong>EAP-SIM</strong></font></td>
<td bgcolor="#00ff00" align="center">√</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>

<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
<td bgcolor="#ff0000" align="center">x</td>
</tr>
</table>""

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/]]
1) [[http://tldp.org/HOWTO/8021X-HOWTO/index.html 802.1X Port-Based Authentication HOWTO]] - Desatualizado, mas tem um bom esquema de como funciona a autenticação por RADIUS
1) [[http://ubuntuforums.org/showthread.php?s=c634dd1d057317a7da2edb1cf8a8f359&t=478804 HOWTO:FreeRadius+EAP/PEAP]]
1) [[http://deployingradius.com/ Deploying RADIUS:The book]]

====Agradecimentos====

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