Servidor de autenticação 802.1x com Freeradius
Introdução
Este é o primeiro de 6 artigos que pretendo apresentar sobre autenticação IEEE 802.1x e RADIUS.
Pretendo dividir os arquivos da seguinte forma:
- 01. Instalação de servidor Radius (FreeRadius) e configurações
para autenticação de clientes wireless com PEAP-MSCHAPv2 (usuário e
senha);
- 02. Instalação de um portal de autenticação HotSpot (Captive Portal), utilizando o NoCat.
- 03. Instalação de ferramenta de gerencia gráfica para o FreeRadius (phpRadmin) e autenticação com base de dados MySQL;
- 04. Integração do FreeRadius com AD e LDAP.
- 05. Autenticação 802.1x utilizando certificado Digital;
- Integração da gerência do FreeRadius, MySQL, DHCP Server, OpenSSL, DNS, Apache e Nocat, com o WebMin.
Neste artigo então trataremos de instalar o servidor e configurá-lo de
modo que possamos autenticar clientes de redes wireless, utilizando como
credenciais de acesso "usuário e senha", substituiremos o MD5 pelo
MS-CHAPv2 por questões de segurança visto que o MD5 não utiliza sessões
cifradas entre o suplicante e o server FreeRadius, a MS não
disponibiliza em seu cliente XP MD5 para Wireless apenas Wired.
Bom, com este modelo de autenticação já é possível montar uma rede
wireless com um bom nível de segurança, permitindo uma base de usuários
em arquivo texto, o qual futuramente migraremos para um banco MySQL e
depois para AD ou LDAP.
Neste modelo de autenticação é possível configurar SSO (Single sign-on) e
também passar como parâmetro a VLan ao qual o Cliente estará associado.
A base de usuários neste primeiro artigo será em arquivo texto para diminuir a complexidade e facilitar o entendimento.
Diagrama lógico:
Pré-requisitos
Instalação do
Fedora Core 6, marcando as seguintes opções na instalação inicial:
- Servidor web;
- Servidor MySQL;
- Desenvolvimento KDE;
Obs:
- Outras distribuições Linux podem ser utilizadas sem problemas.
- Não abordarei a instalação do Fedora Core, mesmo porque este
processo está muito fácil nesta distribuição, dê o boot pelo CD e siga
os passos do wizard de instalação e quando for solicitado selecione os
pacotes acima, a instalação da interface gráfica não é pré-requisito,
pois o gerenciamento do servidor Radius pode ser feito via navegador a
partir de outra máquina.
Instalação
Primeiro instalaremos o
FreeRadius já com suporte a
MySQL.
OBS: Todas as linhas precedidas de # devem ser interpretadas como comandos executados diretamente no shell como root.
# yum -y install freeradius-mysql
Serão instalados os seguintes pacotes e dependências:
- freeradius-mysql;
- freeradius;
- net-snmp;
- net-snmp-utils.
Após a conclusão da instalação todos os arquivos de configuração estarão
em /etc/raddb/, sendo que os principais arquivos e os que utilizaremos
são:
radiusd.conf : Principal arquivo de configuração, nele
configuram-se todos os parâmetros do servidor e também se habilita os
módulos de AAA desejados;
- clients.conf : Configuração dos dispositivos que farão as consultas ao Radius (NAS), tipo Access Point, switches etc..;
- users : Base de usuários, neste arquivo pode-se
cadastrar as credenciais dos usuários, o uso deste arquivo para
cadastrar a base de usuários pode se tornar um sério risco de segurança
caso você pense em manter assim, visto que você terá que se preocupar em
gerenciar o controle de acesso ao mesmo.
FASE 1
O objetivo desta primeira fase é realizar um teste básico para verificar
o funcionamento do servidor, para tanto, será configurado de modo a
aceitar pedidos de autenticação da máquina local e consultar o arquivo
"users" para autenticar o usuário.
Em /etc/raddb/ -- edite o arquivo radius.conf e altere as seguintes
linhas "apenas" (as demais linhas não comentadas aqui deixe como estão,
por padrão).
OBS: O # no início de linhas em arquivos de configuração são comentários e // no final de linhas também serão comentários.
# indica a interface que o radius responde, coloque o ip da
# interface desejada ou coloque "*" caso queira que responda
# em qualquer interface
bind_address = 10.34.122.1
# indica a porta udp de escuta , pode usar também "*"
port = 1812
# log para as autenticações
log_auth = yes // log dos de autenticações e tentativas de autenticações
log_auth_badpass = yes // log de login/senha incorretos
log_auth_goodpass = yes // log de login/senha corretos
Em /etc/raddb -- edite users e acrescente o usuário conforme indicado abaixo ao final do arquivo:
# adicionar um usuário simples para teste
teste Auth-Type := Local, User-Password == "teste"
Em /etc/raddb -- edite clients.conf e acrescente o NAS conforme indicado abaixo ao final do arquivo:
# adiciona o localhost (NAS) permitindo que ele consulte o radius, outros
# dispositivos também devem ser adicionados da mesma forma alterando
# apenas os dados
client 10.1.1.2 {
secret = testing123 // chave secreta que deve também ser configurada no NAS
shortname = localhost // nome do dispositivo , que também deve ser o mesmo do configurado no dispositivo
nastype = other // nastype é o tipo de NAS , existe alguns padrões de
fabricantes já pré estabelecidos, pode ser consultado neste mesmo
arquivo
}
Agora iniciaremos o radius, o arranque padrão deve ser feita com o seguinte comando:
# /etc/init.d/radiusd start
Porém para visualizarmos os logs com maior facilidade iniciaremos no modo "debug" com o comando:
# radiusd -X
Desta forma será exibido neste terminal todas as solicitações e respostas.
OBS: Os logs também podem ser vistos em /var/log/radiusd/radius.log.
Usaremos agora uma ferramenta de testes instalado junto com o pacote do "freeradius", o "radtest". Abra um novo shell e rode:
# radtest teste teste 10.34.122.1:1812 1812 testing123
OBS: O "testing123" é a chave secreta configurada no exemplo esta deve ser alterada conforme sua definição.
O retorno deve ser algo tipo:
Sending Access-Request of id 40 to 10.34.122.1 port 1812
User-Name = "teste"
User-Password = "teste"
NAS-IP-Address = 255.255.255.255
NAS-Port = 1812
rad_recv: Access-Accept packet from host 10.34.122.1:1812, id=40, length=20
Ok! Fase 1 concluída.
Métodos de autenticação
Antes de prosseguirmos para o próxima etapa, precisamos alinhar o
entendimento sobre os mecanismos de autenticação mais comuns existentes,
segue.
O IEEE 802.1x é um padrão do IEEE (i 3 é), que define mecanismos para
autenticação em camada 2, dentre os protocolos que usa esta o RADIUS
(Remote Authentication Dial In User Service), que é um protocolo de
autenticação AA(A) (a os que descordarão e dirão que AAA é para TACACS+
mas não vou entrar neste mérito). O 802.1x permite que utilizemos o EAP
(Extensible Authentication Protocol) o qual nos possibilita uma
variedade de métodos de autenticação conforme segue:
- EAP-TLS - Por padrão em clientes 802.1x Windows (XP por exemplo),
utiliza estrutura de certificados digitais para cliente e servidor;
- EAP-TTLS - Permite a autenticação de usuários baseados em "usuários e senha" e de servidores com certificado digital;
- PEAP (Protected EAP) - permite o uso do MSCHAPv2. (baseado em password), por exemplo;
- EAP_MD5 - Baseado em password também porem não a cifragem do
campo, portanto para redes wireless, torna-se muito inseguro, a MS
(Microsoft) nem disponibiliza em seus clients wireless somente para
conexões cabeadas, mas o uso do MS-CHAPv2 é tão simples quanto e mais
seguro, talvez seu uso seja necessário em situações de integração com
outras plataformas e/ou soluções.
- PEAP-MSCHAPv2 - Modelo utilizado neste primeiro tutorial,
permite a autenticação baseada em password, autenticação múltipla de
usuário e computador, integração de autenticação camada 2 com login em
rede Windows... Também é suportado em Linux, mas com uma linhas a mais de configuração (normal heheh).
Estes são os principais tipos e os que me interessa apresentar a
diferença neste momento, mas existem outras formas como LEAP da cisco e
outros.
Para a autenticação dos clientes estou focando no MSCHAPv2 em Windows
porque de um modo geral nossos clientes na grande maioria serão Windows.
As boas práticas de segurança devem ser observadas sempre, tais como
senhas fortes, período de validade de senhas e certificados, etc.
Não esquecer que estamos apenas provisionando a autenticação, após esta
etapa o controle do que cada usuário pode ou não fazer deve ser
implementado com cautela, é possível definir praticamente tudo o que o
usuário pode ou não fazer após o login, mas não vou abordar nada sobre
isso, pelo menos não por enquanto.
FASE 2
Nesta fase configuraremos o
radius para autenticar clientes wireless utilizando PEAP-MSCHAPv2 com criptografia WPA.
PEAP-MSCHAPv2 = Mecanismos de credenciais para autenticação, neste projeto piloto utilizando usuário e senha.
WPA = Mecanismos que fornecem criptografia aos dados, utilizando TKIP
(ou AES caso seu equipamento suporte WPA2) como algorítimo de
criptografia.
Descrição: Rede com criptografia forte para os dados trafegados e com
controle de acesso via 802.1x que permite um bom nível de segurança a
rede wireless, basicamente com esta rede o usuário será solicitado a
fornecer usuário e senha para ter acesso a rede, após a confirmação das
credenciais é que o mesmo terá acesso a rede, antes disso fica bloqueado
em camada 2 qualquer acesso a rede, após a autenticação os dados são
criptografados usando WPA, que é fornecida automaticamente ao cliente.
Configurações: altere os arquivos de configuração localizados em /etc/raddb/ conforme segue.
clients.conf:
client 10.34.122.3 { // endereço do AP
secret = testing123 // chave secreta
shortname = DWL-3200AP // nome do AP
nastype = other // tipo
}
eap.conf:
eap {
# neste arquivo definimos os mecanismos de EAP suportados e como
# deve o servidor se comportar para cada requisição, observe que
# tratamos não apenas da autenticação entre suplicante e servidor,
# mas também entre o NAS e servidores.
# especificaremos que por padrão a autenticação será com TTLS
default_eap_type = ttls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
md5 {
}
mschapv2 {
}
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
fragment_size = 1024
}
ttls {
default_eap_type = md5
copy_request_to_tunnel = no
use_tunneled_reply = no
}
peap {
default_eap_type = mschapv2
}
}
Em radius.conf altere conforme segue:
radiusd.conf
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = /etc/freeradius
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run
listen {
ipaddr = *
port = 0
type = auth
}
thread pool {
start_servers = 1
max_servers = 4
min_spare_servers = 1
max_spare_servers = 3
max_requests_per_server = 0
}
#Importando o arquivo com os clientes NAS, com permissão de autenticação
$INCLUDE ${confdir}/clients.conf
# abaixo estão os módulos de autenticação, autorização e contabilidade
# que serão suportados.
modules {
# se utilizado apenas pap, usuário e senha passarão em texto puro, o
# que não e nosso caso.
pap {
encryption_scheme = clear
}
chap {
authtype = CHAP
}
# inclui o arquivo de configuração do EAP anterior
$INCLUDE ${confdir}/eap.conf
# suporta MS-CHAP para autenticação e também MS-CHAPv2
mschap {
authtype = MS-CHAP
with_ntdomain_hack = yes
}
mschapv2 {
}
# suporte a autenticação de usuários cadastrados em arquivo no caminho especificado
files {
usersfile = ${confdir}/users
compat = no
}
}
# autoriza os seguintes módulos, obs MS-CHAP inclui v2
authorize {
files
mschap
eap
}
# mecanismo de autenticação
authenticate {
Auth-Type MS-CHAP {
mschap
}
eap
}
Em "users" altere conforme segue:
usuario1 User-Password == "senha1"
# usuário e senha para o PEAP-MS-CHAPv2
Agora basta configurar o AP para autenticação 802.1x com as seguintes informações:
Servidor radius = 10.34.122.1
Porta = 1812
Chave secreta = testing123 // altere a chave
Configuração AP (Access Point)
Utilizarei o AP da TrendNet, porém pode-se utilizar qualquer AP que
possua suporte a IEEE 802.1x, seguem os passos para configuração deste
equipamento.
Configuração de endereço IP no equipamento:
Configuração de rede wireless (SSID), desabilitando modo 802.11ª, neste
caso estou usando somente rede 802.11g, mas pode configurar para 802.11a
também.
OBS: A função de "L2 isolation" é de grande importância, principalmente
para os usuários da rede "guest", protegendo contra o acesso direto de
clientes wireless a outros clientes wireless.
Selecione o modo de autenticação WPA.
Configurações para IEEE 802.1x (Radius).
Configuração cliente (Windows XP)
Segue exemplo de configuração de cliente Windows XP, também é valida para W2K, W2K3.
OBS: Para o Windows 98 é necessário utilizar um cliente, pois o 98 não tem suporte nativo ao 802.1x.
Os requisitos básicos da configuração para Windows XP valem para os
demais sistemas operacionais que possuem suplicante 802.1x, ou seja,
para outro SO basta configurar os mesmos parâmetros.
Identificando a rede:
Dê dois cliques sobre esta rede, assim o perfil desta rede será
adicionado, clique então em "change advanced Settings" e vá em "wireless
network" conforme imagem abaixo, selecione a rede e clique em
propriedades.
Por padrão o Windows XP ao identificar uma rede wireless com 802.1x
habilitado, seleciona como credenciais de autenticação certificado
digital (EAP-TLS), que é baseado em certificado digital (uma mensagem de
que não pode encontrar o certificado para validar-se na rede deve ser
indicado no balão), porém como queremos utilizar usuário e senha, temos
que configurar para que seja solicitado este modelo de autenticação
(EAP-PEAP-MSCHAPv2).
OBS: Caso este balão não seja exibido, confira se o serviço "configurações zero sem fio" está ativo.
Conforme indicado na imagem acima, você deve selecionar para a
associação com o AP, WPA e TKIP como mecanismo de criptografia (AES
caso use WPA2), depois na aba autenticação selecione EAP-PEAP, clique
então em propriedades e desmarque a opção de validar certificado (como
estamos usando TTLS temos a opção de autenticar apenas com usuário e
senha, deixaremos as formas de EAP com certificado para os próximos
artigos), selecione finalmente EAP-MSCHAPv2 e configure para não
utilizar o usuário e senha do Windows (importante, não esqueça destas
opções), marque também o Fast Reconnect e evite chateação com o XP.
Espero que minha contribuição seja útil, fico a disposição para ajudar a desenvolver qualquer boa idéia sobre o tema.