Você está na página 1de 9

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:

1. Outras distribuições Linux podem ser utilizadas sem problemas.


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