sábado, 16 de dezembro de 2006

Freeradius - Servidor de autenticação 802.1x


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


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.




Reações:

0 comentários: