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