Para uma melhor experiência com caixas de código, experimente ver o site em um Desktop.
Este tutorial apresenta uma configuração completa de um roteador Cisco IOS para autenticação de usuários através de um servidor RADIUS, utilizando também uma conta local como fallback e habilitando acesso remoto por Telnet e SSH.
O procedimento foi validado em laboratório com Cisco IOS 12.4 e MikroTik User Manager 7.21.5.
A estrutura utilizada foi semelhante a:
Ou o que nos interessa é apenas isso:
RADIUS
MikroTik User Manager
100.66.0.1
|
|
+------+------+
| |
Cisco 01 Cisco 02
100.66.0.2 100.66.0.6
Cisco 01 e Cisco 02 utilizam a mesma configuração lógica, alterando apenas hostname, IP e cadastro do cliente RADIUS.
O servidor RADIUS possui os roteadores Cisco cadastrados como clientes RADIUS.
Exemplo:
RADIUS Server: 100.66.0.1
Authentication: UDP/1812
Accounting: UDP/1813
Shared Secret: CiscoRadius123
O usuário utilizado nos testes foi:
Usuário: cisco01
Senha: cisco01
Nesta etapa será configurado o User Manager para enviar ao Cisco o atributo Cisco-AVPair, informando que o usuário RADIUS deve receber nível de privilégio 15.
No ambiente testado, foi necessário combinar:
atributo Cisco-AVPair no User Manager;
grupo no User Manager contendo esse atributo;
usuário associado ao grupo;
aaa authorization exec no Cisco.
O User Manager permite criar atributos RADIUS personalizados e associá-los a grupos, fazendo com que sejam enviados nos pacotes Access-Accept.
No MikroTik:
/user-manager/attribute
add name=Cisco-AVPair vendor-id=9 type-id=1 value-type=string packet-types=access-accept
Verifique:
/user-manager/attribute/print
Deve aparecer algo semelhante a:
NAME VALUE-TYPE
Cisco-AVPair string
name=Cisco-AVPair
Nome do atributo RADIUS utilizado pelo Cisco.
vendor-id=9
Identifica a Cisco como fabricante do atributo.
type-id=1
Identificador do atributo Cisco-AVPair.
value-type=string
O conteúdo do atributo será enviado como texto.
packet-types=access-accept
O atributo será enviado no Access-Accept, ou seja, na resposta positiva de autenticação.
Agora será criado um grupo específico para os usuários Cisco que deverão receber privilégio 15:
/user-manager/user/group
add name=Cisco-Administrators
Verifique:
/user-manager/user/group/print detail
Agora vem a parte principal.
O atributo será associado ao grupo com o seguinte valor:
shell:priv-lvl=15
Execute:
/user-manager/user/group
set [find name=Cisco-Administrators] attributes="Cisco-AVPair:shell:priv-lvl=15"
Verifique:
/user-manager/user/group/print detail
O resultado deverá apresentar algo semelhante a:
name="Cisco-Administrators"
attributes="Cisco-AVPair:shell:priv-lvl=15"
Importante: as aspas são importantes nesse comando. O valor completo do atributo contém : e =, portanto é recomendável informar o valor entre aspas no CLI do RouterOS.
A lógica é semelhante à utilização de Mikrotik-Group, mas neste caso o atributo é o Cisco-AVPair e o valor informa ao equipamento Cisco o nível de privilégio:
Cisco-AVPair:shell:priv-lvl=15
Agora pode ser criado o usuário:
/user-manager/user
add name=cisco01 password="SENHA_DO_USUARIO" group=Cisco-Administrators
Por exemplo:
/user-manager/user
add name=cisco01 password="cisco01" group=Cisco-Administrators
Verifique:
/user-manager/user/print detail
O usuário deverá aparecer associado ao grupo:
name="cisco01"
group=Cisco-Administrators
Como o atributo está associado ao grupo, não é necessário cadastrá-lo novamente individualmente no usuário. O User Manager permite justamente utilizar grupos para aplicar atributos comuns a vários usuários.
O Cisco também precisa estar cadastrado no User Manager como um equipamento autorizado a realizar requisições RADIUS.
Exemplo para um Cisco com endereço 100.66.0.2:
/user-manager/router
add name=Cisco 01 address=100.66.0.2 protocol=udp shared-secret="CiscoRadius123" coa-port=3799
Confira:
/user-manager/router/print detail
Deve aparecer:
name="Cisco 01"
address=100.66.0.2
protocol=udp
coa-port=3799
O shared-secret deve ser exatamente o mesmo configurado no Cisco.
Antes de ativar AAA/RADIUS, é altamente recomendável criar pelo menos uma conta administrativa local.
username admin privilege 15 secret admin
username admin
Cria o usuário local admin.
privilege 15
Define o nível de privilégio 15 para esse usuário.
No Cisco IOS, o nível 15 corresponde ao nível privilegiado máximo.
secret admin
Define a senha utilizando o mecanismo secret, que é preferível ao comando password para contas locais.
No laboratório, o comando apareceu posteriormente no running-config como:
username admin privilege 15 secret 5 $1$...
A senha não aparece em texto puro no running-config.
Boa prática: em ambiente real, utilizar uma senha forte e não utilizar admin como senha.
Além do usuário administrativo, foi configurada uma senha para o comando enable:
enable secret cisco
Essa configuração é importante como mecanismo adicional de acesso administrativo local.
Depois de entrar em modo EXEC de usuário:
Router>
o comando:
enable
solicita a senha configurada em:
enable secret cisco
e leva a:
Router#
Essa configuração também fornece uma alternativa caso seja necessário acessar o equipamento sem depender do servidor RADIUS.
O primeiro comando relacionado ao AAA é:
aaa new-model
Ele habilita o modelo AAA do Cisco IOS.
AAA significa:
Authentication
Authorization
Accounting
Ou seja:
Authentication — quem é o usuário?
Authorization — o que o usuário pode fazer?
Accounting — registrar o que o usuário fez.
Neste laboratório foram utilizados principalmente Authentication e Authorization.
A configuração utilizada foi:
aaa authentication login default group radius local
Essa linha é uma das mais importantes.
Ela cria/utiliza a lista de métodos de autenticação chamada:
default
e determina a ordem:
RADIUS → LOCAL
Ou seja, quando um usuário realizar login:
O Cisco tenta autenticar no RADIUS.
Se o RADIUS não estiver disponível ou não concluir a autenticação, o Cisco pode utilizar a base local.
A estrutura pode ser entendida assim:
aaa authentication login default group radius local
│ │ │ │ │ │
│ │ │ │ │ └── banco local
│ │ │ │ └──────── grupo RADIUS
│ │ │ └──────────────── lista default
│ │ └────────────────────── login
│ └───────────────────────────────────── authentication
└───────────────────────────────────────── AAA
Aqui está uma das configurações que fez diferença no laboratório:
aaa authorization exec default group radius local
Essa configuração controla a autorização da sessão EXEC depois que o usuário é autenticado.
A sequência passa a ser aproximadamente:
Usuário
↓
Autenticação
↓
RADIUS aceita
↓
Autorização EXEC
↓
Cisco cria a sessão EXEC
↓
Router#
Sem essa configuração, o comportamento observado no laboratório era:
Router>
mesmo com o usuário RADIUS autenticado.
Depois de adicionar:
aaa authorization exec default group radius local
o acesso remoto passou a resultar diretamente em:
Router#
Para que o usuário autenticado pelo RADIUS entre diretamente no modo privilegiado (Router#), as duas configurações são necessárias no ambiente testado:
aaa authentication login default group radius local
aaa authorization exec default group radius local
A autenticação (aaa authentication login) valida o usuário e a senha no RADIUS.
A autorização de EXEC (aaa authorization exec) permite que o Cisco aplique os atributos de autorização recebidos do RADIUS durante a criação da sessão EXEC.
Também foi necessário manter o atributo Cisco-AVPair no User Manager para atribuir o nível de privilégio ao usuário Cisco:
Cisco-AVPair = shell:priv-lvl=15
Esse atributo pode ser associado ao usuário ou ao grupo utilizado pelo usuário RADIUS.
No ambiente testado, somente o atributo no MikroTik não foi suficiente. Sem:
aaa authorization exec default group radius local
o usuário conseguia autenticar, mas a sessão não recebia o privilégio 15.
Portanto, o funcionamento validado foi:
Cisco
├── aaa authentication login default group radius local
│ └── autentica o usuário
│
└── aaa authorization exec default group radius local
└── solicita/aplica autorização da sessão EXEC
│
▼
MikroTik User Manager
│
└── Cisco-AVPair
shell:priv-lvl=15
│
▼
Router#
Resultado: autenticação RADIUS + autorização EXEC + Cisco-AVPair:shell:priv-lvl=15 → usuário entra diretamente em Router#.
No Cisco:
radius-server host 100.66.0.1 auth-port 1812 acct-port 1813
Essa configuração informa onde está o servidor RADIUS.
100.66.0.1
É o endereço IP do servidor RADIUS.
auth-port 1812
A porta UDP 1812 é utilizada para autenticação RADIUS.
acct-port 1813
A porta UDP 1813 é utilizada para Accounting.
A configuração completa:
radius-server host 100.66.0.1 auth-port 1812 acct-port 1813
pode ser interpretada como:
Servidor RADIUS
|
+-- Authentication → UDP 1812
|
+-- Accounting → UDP 1813
O Cisco também precisa conhecer o segredo compartilhado configurado para esse cliente RADIUS:
radius-server key CiscoRadius123
Esse valor precisa ser exatamente igual ao configurado no servidor RADIUS para o roteador.
Por exemplo:
Cisco:
CiscoRadius123
e no RADIUS(MikroTik):
CiscoRadius123
O Shared Secret não é a senha do usuário.
São duas coisas diferentes:
Usado entre:
Cisco ↔ RADIUS
Usada entre:
Usuário ↔ Cisco/RADIUS
Durante o laboratório, uma situação importante foi identificada: quando o Cisco enviava a requisição RADIUS, mas não recebia uma resposta válida, o debug mostrava retransmissões.
Posteriormente, quando a comunicação estava correta, apareceu:
RADIUS: Received from id ... Access-Accept
Esse é um excelente indicador de que a comunicação RADIUS está funcionando.
As linhas VTY são utilizadas para acesso remoto ao equipamento.
A configuração utilizada foi:
line vty 0 4
login authentication default
transport input telnet ssh
line vty 0 4
Seleciona as linhas VTY 0 até 4.
Em outras palavras, trata-se da configuração das sessões de acesso remoto disponíveis nessas linhas.
login authentication default
Essa linha determina que o login das VTY utilizará a lista AAA chamada:
default
que foi configurada anteriormente:
aaa authentication login default group radius local
Assim, a cadeia fica:
Acesso VTY
↓
login authentication default
↓
lista "default"
↓
RADIUS
↓
LOCAL como fallback
Foi utilizado:
transport input telnet ssh
Isso permite conexões remotas através de:
Telnet
SSH
Portanto:
Telnet → permitido
SSH → permitido
Em um ambiente de produção, o ideal é preferir SSH e desabilitar Telnet, pois Telnet não fornece a mesma proteção criptográfica do SSH.
Nesse caso, a configuração recomendada seria:
transport input ssh
Para um laboratório onde os dois protocolos estão sendo estudados, pode-se manter:
transport input telnet ssh
Para habilitar o SSH no Cisco IOS utilizado no laboratório, foram executados:
conf t
ip domain-name omegait-telecom.local
crypto key generate rsa
ip ssh version 2
end
ip domain-name omegait-telecom.local
O domínio é utilizado pelo IOS durante a geração das chaves RSA.
Sem um hostname e domínio adequadamente configurados, a geração da chave RSA pode não funcionar como esperado.
No laboratório:
hostname: cisco01
domain: omegait-telecom.local
O comando:
crypto key generate rsa
gera as chaves criptográficas utilizadas pelo SSH.
Durante a execução, o IOS pode perguntar o tamanho da chave.
Em equipamentos antigos, pode aparecer algo semelhante a:
How many bits in the modulus [512]:
No laboratório com o IOS utilizado, foi empregada uma chave RSA de 1024 bits. Em ambientes reais, deve-se utilizar um tamanho compatível com a política de segurança vigente.
Depois que a chave RSA é criada, o equipamento passa a ter os elementos necessários para atuar como servidor SSH.
Foi configurado:
ip ssh version 2
Isso força o Cisco a utilizar SSH versão 2.
O SSHv2 deve ser preferido ao SSHv1 por questões de segurança e compatibilidade.
A configuração funcional utilizada no laboratório ficou essencialmente assim:
!
aaa new-model
!
aaa authentication login default group radius local
aaa authorization exec default group radius local
!
enable secret cisco
!
username admin privilege 15 secret admin
!
radius-server host 100.66.0.1 auth-port 1812 acct-port 1813
radius-server key CiscoRadius123
!
line vty 0 4
login authentication default
transport input telnet ssh
!
ip domain-name omegait-telecom.local
crypto key generate rsa
ip ssh version 2
!
Depois da configuração, pode-se salvar:
write memory
ou:
write
Para verificar as linhas VTY:
show running-config | section line vty
O resultado esperado é semelhante a:
line vty 0 4
login authentication default
transport input telnet ssh
Isso confirma que as VTY estão utilizando a lista AAA default e aceitando Telnet/SSH.
O comando:
show ip ssh
permite verificar o estado do servidor SSH.
Um resultado esperado deve indicar que o SSH está habilitado e, no laboratório, configurado para versão 2.
Também pode ser utilizado:
show ssh
para visualizar sessões SSH existentes.
A partir de outro equipamento, pode ser realizado um teste SSH:
ssh cisco01@100.66.0.2
ou, a partir de um MikroTik:
/system ssh address=100.66.0.2 user=cisco01
Após informar a senha do usuário RADIUS:
cisco01
o resultado esperado no laboratório foi:
cisco01#
ou:
cisco02#
Observe a diferença:
cisco01>
representa nível EXEC 1.
Enquanto:
cisco01#
representa o modo EXEC privilegiado.
Também pode ser realizado um teste Telnet:
telnet 100.66.0.2
O Cisco deve apresentar:
User Access Verification
Username: cisco01
Password:
Depois da autenticação, com a autorização EXEC configurada corretamente:
cisco01#
A conta local:
username admin privilege 15 secret admin
também deve ser testada.
Por exemplo:
Username: admin
Password: admin
Como a lista AAA foi configurada como:
aaa authentication login default group radius local
o Cisco possui o método local como alternativa ao RADIUS.
Isso é particularmente importante para evitar ficar completamente dependente do servidor RADIUS para administração do equipamento.
Depois de entrar no Cisco:
show privilege
Um usuário privilegiado deverá apresentar:
Current privilege level is 15
No laboratório, o usuário RADIUS passou a entrar diretamente em:
Router#
após a configuração:
aaa authorization exec default group radius local
Durante o laboratório, o debug RADIUS foi extremamente útil.
Para ativar:
debug radius
Para desativar:
undebug all
ou:
no debug all
O comando:
undebug all
é especialmente útil quando o terminal começa a ficar constantemente preenchido pelas mensagens de debug.
Quando o Cisco envia uma solicitação:
RADIUS: Send Access-Request to 100.66.0.1:1812
significa que o Cisco está enviando a requisição de autenticação para o servidor.
Quando aparece:
RADIUS: Received from id ... Access-Accept
o servidor RADIUS aceitou a autenticação.
Quando aparece:
RADIUS: Received from id ... Access-Reject
o servidor recusou a autenticação.
Já mensagens como:
RADIUS: Retransmit to ...
indicam que o Cisco está retransmitindo a solicitação porque não recebeu uma resposta válida dentro do intervalo esperado.
Para configurar um Cisco do zero, uma sequência prática é:
conf t
hostname cisco01
aaa new-model
aaa authentication login default group radius local
aaa authorization exec default group radius local
enable secret cisco
username admin privilege 15 secret admin
radius-server host 100.66.0.1 auth-port 1812 acct-port 1813
radius-server key CiscoRadius123
ip domain-name omegait-telecom.local
crypto key generate rsa
ip ssh version 2
line vty 0 4
login authentication default
transport input telnet ssh
end
write
Depois:
show running-config | section line vty
e:
show ip ssh
Por fim, testar:
Telnet → usuário RADIUS
SSH → usuário RADIUS
Login local → usuário admin
Enable → senha local
Com essa configuração, o fluxo fica:
┌───────────────────┐
│ Cliente SSH/Telnet│
└────────┬──────────┘
│
▼
┌─────────────────┐
│ Cisco VTY 0-4 │
└────────┬────────┘
│
▼
login authentication default
│
▼
┌─────────────────┐
│ RADIUS │
│ UDP 1812 │
└────────┬────────┘
│
Access-Accept
│
▼
authorization exec default
│
▼
┌─────────────────┐
│ Cisco EXEC │
│ │
│ Router# │
└─────────────────┘
Se o RADIUS não puder ser utilizado, a lista:
group radius local
permite utilizar a base local como alternativa, conforme o comportamento do método AAA e a disponibilidade do servidor.
Comando : Função
aaa new-model : Habilita AAA
aaa authentication login default group radius local : Autenticação RADIUS com fallback local
aaa authorization exec default group radius local : Autoriza a criação da sessão EXEC
username admin privilege 15 secret ... : Cria administrador local
enable secret ... : Define senha local do modo privilegiado
radius-server host ... : Define o servidor RADIUS
auth-port 1812 : Porta de autenticação RADIUS
acct-port 1813 : Porta de Accounting
radius-server key ... : Shared Secret entre Cisco e RADIUS
line vty 0 4 : Seleciona as linhas de acesso remoto
login authentication default : Usa a lista AAA default nas VTY
transport input telnet ssh : Permite Telnet e SSH
ip domain-name ... : Define domínio utilizado na geração das chaves
crypto key generate rsa : Gera as chaves RSA para SSH
ip ssh version 2 : Habilita/força SSH versão 2
show ip ssh : Verifica o SSH
show ssh : Verifica sessões SSH
show privilege : Mostra o nível de privilégio atual
debug radius : Ativa diagnóstico RADIUS
undebug all : Desativa todos os debugs
write : Salva a configuração
Se o objetivo for guardar uma versão curta para consulta:
aaa new-model
aaa authentication login default group radius local
aaa authorization exec default group radius local
enable secret cisco
username admin privilege 15 secret admin
radius-server host 100.66.0.1 auth-port 1812 acct-port 1813
radius-server key CiscoRadius123
ip domain-name omegait-telecom.local
crypto key generate rsa
ip ssh version 2
line vty 0 4
login authentication default
transport input telnet ssh
end
write
Essa é a configuração que foi efetivamente validada no laboratório, incluindo autenticação RADIUS, fallback local, privilégio 15 e acesso SSH em dois roteadores Cisco 1710(Dynamips) C1710-bk9no3r2sy-mz.124-23.image no EVE-NG version: 6.2.0-4 e QEMU version: 2.4.0.