Professional Documents
Culture Documents
Este é o primeiro de 6 artigos que pretendo apresentar sobre autenticação IEEE 802.1x e
RADIUS.
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
• Servidor web;
• Servidor MySQL;
• Desenvolvimento KDE;
Obs:
Instalação
OBS: Todas as linhas precedidas de # devem ser interpretadas como comandos executados
diretamente no shell como root.
# yum -y install freeradius-mysql
• freeradius-mysql;
• freeradius;
• net-snmp;
• net-snmp-utils.
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.
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
Usaremos agora uma ferramenta de testes instalado junto com o pacote do "freeradius", o
"radtest". Abra um novo shell e rode:
OBS: O "testing123" é a chave secreta configurada no exemplo esta deve ser alterada
conforme sua definição.
Métodos de autenticação
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.
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.
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.
clients.conf:
eap.conf:
eap {
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
}
}
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
}
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
}
mschapv2 {
}
# mecanismo de autenticação
authenticate {
Auth-Type MS-CHAP {
mschap
}
eap