Autenticação via 802.1x EAP-TLS e Mac Based + FreeRadius + Cisco Switch

Publicado por Rither Nascimento em 03/05/2019

[ Hits: 6.831 ]

 


Autenticação via 802.1x EAP-TLS e Mac Based + FreeRadius + Cisco Switch



Após dedicar bastante tempo pesquisando artigos e exemplos de configuração, acabei não encontrando algo prático e efetivo sobre o assunto. Gostaria de compartilhar com todos a configuração aplicada para o ambiente descrito abaixo.

Necessidade:
  • Prover autenticação por meio do protocolo 802.1x para conexões cabeadas em switch Cisco;
  • Desktops utilizaram de autenticação por meio de certificado gerado automaticamente pelo Domínio (certificado de computador);
  • Equipamentos non-802.1x (ip phones, impressoras, leitores biométricos etc) devem se conectar utilizando o mac-address como autenticador.

Cenário:
  • Desktop do usuário é conectado a um telefone IP e o telefone é conectado ao switch;
  • Telefone IP não tem suporte para protocolo 802.1x e deve trabalhar na VLAN de VOZ definida no switch;
  • Desktop do usuário deverá trabalhar na VLAN de DADOS definida no switch.

Para a solução de FreeRadius, utilizei uma VM (VMware) com a seguinte configuração de HW e S.O:
  • Cores: 2
  • vCPU: 2
  • Memoria: 4Gb
  • Disco: 50Gb
  • S.O: CentOS Linux release 7.6.1810

Instalação

# yum install freeradius openssl

Configuração

Arquivo /etc/raddb/radiusd.conf:

prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${localstatedir}/lib/radiusd
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid
correct_escapes = true
max_request_time = 30
cleanup_delay = 5
max_requests = 16384
hostname_lookups = no
log {
        destination = files
        colourise = yes
        file = ${logdir}/radius.log
        syslog_facility = daemon
        stripped_names = no
        auth = yes
        auth_badpass = yes
        auth_goodpass = yes
        msg_denied = "You are already logged in - access denied"
}
checkrad = ${sbindir}/checkrad
security {
        user = radiusd
        group = radiusd
        allow_core_dumps = no
        max_attributes = 200
        reject_delay = 1
        status_server = yes
}
proxy_requests  = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
        start_servers = 5
        max_servers = 32
        min_spare_servers = 3
        max_spare_servers = 10
        max_requests_per_server = 0
        auto_limit_acct = no
}
modules {
        $INCLUDE mods-enabled/
}
instantiate {
}
policy {
        $INCLUDE policy.d/
}
$INCLUDE sites-enabled/

Arquivo /etc/raddb/users:

# USERS
aa11bb22cc33    Cleartext-Password := "aa11bb22cc33"
                Cisco-AVPair = "device-traffic-class=voice"

DEFAULT
                Auth-Type = Accept

Arquivo /etc/raddb/clients.conf:

#SWITCH - LAB
client 192.168.0.10 {
        ipaddr = 192.168.0.10
        shortname = SWT-LAB
        secret = Brasil@2019
}

Arquivo /etc/raddb/mods-available/eap:

eap {
        default_eap_type = ttls
        timer_expire = 60
        ignore_unknown_eap_types = no
        cisco_accounting_username_bug = no
        md5 {
        }
        leap {
        }
        gtc {
                auth_type = PAP
        }
        tls {
                private_key_password = brasilcert
               private_key_file = ${certdir}/server_keycert.pem     # CERTIFICADO GERADO NO CA SERVER
               certificate_file = ${certdir}/server_keycert.pem     # CERTIFICADO GERADO NO CA SERVER
               ca_file = ${certdir}/cacert.pem                      # CERTIFICADO RAIZ EXPORTADO DO CA SERVER
                dh_file = ${certdir}/dh
                radom_file = ${certdir}/random
        }
        ttls {
                default_eap_type = mschapv2
                use_tunneled_reply = yes
                virtual_server = "inner-tunnel"
        }
        peap {
                default_eap_type = mschapv2
                virtual_server = "inner-tunnel"
        }
        mschapv2 {
        }
}

Após realizar a alteração dos arquivos conforme acima, execute o comando abaixo para verificar a integridade da configuração.

Teste para validar a configuração aplicada:

# radiusd -X

A resposta deve ser "Ready to process requests", então você pode dar um Ctrl + C para parar e então inicializar o serviço do Radius:

# systemctl start radiusd

Configuração do switch Cisco

aa new-model
!
aaa authentication dot1x default group radius
aaa authorization network default group radius
aaa accounting dot1x default start-stop group radius
!
dot1x system-auth-control
!
radius-server attribute 6 on-for-login-auth
radius-server attribute 8 include-in-access-req
radius-server attribute 25 access-request include
radius-server host 192.168.0.5 auth-port 1812 acct-port 1813 key Brasil@2019
radius-server vsa send accounting
radius-server vsa send authentication
!
interface FastEthernet0/1
switchport access vlan 100
switchport mode access
switchport voice vlan 50
authentication event fail action next-method
authentication event server dead action authorize voice
authentication host-mode multi-domain
authentication order mab dot1x
authentication priority mab dot1x
authentication port-control auto
authentication periodic
authentication timer reauthenticate server
mab
dot1x pae authenticator
spanning-tree portfast

Estes debugs abaixo podem auxiliar muito na determinação de problemas de autenticação:

# sh debugging
  dot1x:
  Dot1x registry info debugging is on
  Dot1x events debugging is on
  Dot1x Errors debugging is on


Para verificar o status da autenticação no switch, utilize os comandos abaixo:

# show authentication session

A saída do comando deve ser algo similar a este:

Interface  MAC Address     Method   Domain   Status         Session ID
Fa0/1     ac16.XXXX.XXXX  dot1x    DATA     Authz Success  0AD2540700002B9DA93F5842
Fa0/1     ccf9.XXXX.XXXX  mab      VOICE    Authz Success  0AD2540700002B99A93CF661x

Para acompanhar o processo de autenticação no servidor Radius, segue abaixo alguns logs que me auxiliaram na determinação de problemas com a autenticação.

LOG de requisição do switch para o servidor para o telefone e para o computador:

# tail -f /var/log/radius/radius.log

LOG de accounting do telefone e do computador:

# tail -f /var/log/radius/radacct/<ip_do_switch>/detail-anomesdia

Informações importantes

1. No arquivo users, é onde criamos o "usuário/senha" para os dispositivos non-802.1x, no caso apresentado, um telefone Avaya, mas pode ser qualquer dispositivo como impressora ou uma catraca por exemplo.

2. O certificado utilizado no servidor foi gerado através de um CA Server existente (certificado do tipo WEB mesmo), mas também há a possibilidade de criar uma estrutura de CA totalmente stand-alone no próprio servidor radius. Para isso, segue um link que explica o passo a passo de como fazer isso: Wifi Authentication/Accounting With FreeRadius On CentOS 5

3. O certificado quando gerado pelo CA server, vem em um formato .CSR, e o mesmo deve ser convertido para .pem. Para essa conversão, existem vários sites que fazem online, sem precisar instalar nada.

4. O certificado das estações de trabalho foram gerados automaticamente pela própria integração com Active Directory e através de GPO. Caso queira utilizar a CA Stand-Alone citada no item 2, basta seguir o procedimento do link e importar o certificado de cliente gerado no servidor, no desktop ou equipamento que deseja.

Importante lembrar que este certificado deve ficar na pasta Personal. (mmc > add snap-in > Certificado > computador > importar em Pessoal > Certificados).

5. O teste foi realizado em um desktop com windows 7. Foi necessário alterar na placa de rede na aba Autenticação para que utiliza-se "Microsoft Cartão Inteligente ou outro Certificado". Após mudar para esta opção, clicar em Configuração ao lado e desmarcar a flag de "Validar Certificado do Servidor".

Espero contribuir com todos para que não "sofram" tanto para achar conteúdo como este (principalmente em português e com detalhes).

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Zabbix API com cURL e alguns exemplos de utilização

Utilizando delay_class 4 do Squid 3 Integrado ao AD

Mudando tipo de autenticação do Squid para algumas máquinas

Módulo de segurança do Banco do Brasil (Linux Mint)

Acessando desktop do Debian 8 (Jessie) remotamente através do TightVNC

  

Comentários
[1] Comentário enviado por FlavioSilva em 16/07/2019 - 12:18h

Rither, blz?

Estou precisando fazer esse teste acima porém no meu teste quero que phone ip para autenticar via dot1x e não mab, existe essa possibilidade?


[2] Comentário enviado por Rither em 18/07/2019 - 06:46h


[1] Comentário enviado por FlavioSilva em 16/07/2019 - 12:18h

Rither, blz?

Estou precisando fazer esse teste acima porém no meu teste quero que phone ip para autenticar via dot1x e não mab, existe essa possibilidade?




Fala ae Fabio, tudo sussa e vc?
Para que vc consiga realizar a autenticação do phone via dot1x, é necessário que o telefone tenha suporte à este tipo de autenticação.
Nas configurações vc tem que ter a opção de colocar um usuário e senha ou realizar o import de um certificado para autenticar o device.
Verifique no datasheet do aparelho se existe esta feature.

Qualquer dúvida, manda ai que tentamos ajudar da melhor forma!

Abraço!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts