Pular para o conteúdo

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

Dica publicada em Linux / Redes
Rither Nascimento Rither
Hits: 8.156 Categoria: Linux Subcategoria: Redes
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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/
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
Nenhuma dica encontrada.

Ferramentas para administradores de redes

DNS Dinâmico no Linux com ddupdate - DuckDNS

Configuração de rede IPv6 estática no Ubuntu

SSH pelo gerenciador Dolphin

Como instalar driver wireless das placas broadcom b43

#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

Entre na sua conta para comentar.