sexta-feira, 12 de abril de 2013

Lab: AAA e Tacacs+ com GNS3

Neste Lab iremos configurar AAA para obter permissão de acesso a um roteador Cisco através do GNS3. Para isso iremos configurar, tambem, um sevidor Tacacs+ (TACACS.net) que será utilizado para fornecer autenticação, autorização e auditoria (accounting).



1 – Introdução

‘Em segurança da informação, o termo protocolos AAA é uma referência aos protocolos relacionados com os procedimentos de autenticação, autorização e accounting. A autenticação verifica a identidade digital do usuário de um sistema, a autorização garante que um usuário autenticado somente tenha acesso aos recursos autorizados e, por fim, a accounting refere-se a coleta de informações sobre o uso dos recursos de um sistema pelos seus usuários’ [1].


1.1 – AAA
Quando se exige segurança de rede, AAA (Authentication, Authorization e Account – Autenticação, Autorização e Contabilidade) é uma exigência que, além de escalavel, pemite maior flexibilidade e controlo de configuração de acesso. Vejamos cada um:

Autenticação: Identifica usuários através de Username e Password. Se autenticados, ele estará apto a receber autorizações de acordo com os direitos que lhe são atribuídos.

Autorização: Verifica que políticas e recursos devem ser aplicados ao usuário autenticado através de servidores RADIUS ou TACACS+. No nosso exemplo o servidor utilizado será o Tacacs+. 

Auditoria(accounting): Fornece uma maneira de coletar informações de segurança. Gera relatório de auditoria que pode ser usado para verificar quando e o que fazem os usuários autenticados e autorizados.




1.2 – TACACS

Significa Terminal Access Controller Access Control System. Um protocolo empregado para controlar acesso a equipamentos de rede. Uma técnica de acesso  a rede na qual o usuário conecta-se a um servidor centralizado que contém um banco de dados de contas. Após autenticar o usuário, o servidor de acesso encaminha a informação para o equipamento (cliente) que solicitou a autenticação.


2 – Configurando

·     Habilitar AAA
·     Configurar autenticação.
·     Configurar autorização.
·     Configurar auditoria.
·     Configurar acesso ao servidor.
·     Configurar as interfaces line.

2.1 Habilitar AAA

Em modo de configuração global entrar com o comando:


    Router(config)#aaa new-model



2.2 – Configurar autenticação.

A forma geral do comando é:

  Router(config)#aaa authentication login {default | list-name} method1 [method2...]

·   default aplica os métodos, automaticamente, a toda às interfaces/line (console, vty, aux. etc.).
·   list-name é um nome, uma string criada que poderá ser aplicada as interfaces desejadas. Com isso
      as interfaces escolhidas serão afetadas pelos métodos aplicados a este nome.
·   Method:
      none                      - Não solicita autenticação.                                       
      line                        - Usa a senha da interface line para autenticação.
      enable                   - Usa a senha de enable para autenticar.
      local                      - Usa o banco de dados local para a autenticação
      group radius     - Usa RADIUS para autenticação remota.
      group tacacs+    - Usa TACACS+ para autenticação remota.


Exemplos:


Router(config)#aaa authentication login default group tacacs+ local


Neste comando o login será feito, automaticamente, em todas as interfaces/line (default), preferencialmente, através do tacacs+. Se o tacacs falhar(*) será feito através do banco de dados local do roteador.


Router(config)#aaa authentication login JOIRONET group tacacs+ local


Aqui, o login será feito somente nas interfaces/lines que estão configuradas com o comando ‘login authentication JOIRONET’. O login será feito preferencialmente através do tacacs+, se ele falhar(*) será feito através do banco de dados local do roteador.

(*) Falhar significa que o Tacacs+ está sem conectividade ou inoperante. Erro é quando a senha não confere e será  tentado novamente até que expire as tentativas.



Router(config-line)#aaa authentication username-prompt Usuario:
Router(config-line)#aaa authentication password-prompt Senha:


Normalmente os strings ‘Username’ e ‘Password’ são fornecidos por default. Em caso de falha, os strings de usuário e senha poderão ser substituídos pelos digitados nestes comandos. Isso pode ser útil para diferenciar a autenticação local, caso as strings tenham textos diferentes, das default.



Router(config-line)#aaa authentication attempts login 2


Configura a quantidade máxima de tentativas de login.


2.3 – Configurar autorização.

A forma do comando é:

Router(config)# aaa authorization {auth-proxy | network | exec | commands level  reverse-access configuration | ipmobile} {default | list-name}[method1 [method2...]]


Principais tipos:

Commands - Tenta autorização para todos os comandos do modo EXEC, incluindo comandos de configuração global, associados a um nível de privilégio específico.
EXECAplica-se aos atributos associados a uma sessão de terminal de usuário para comandos do modo EXEC.
NetworkAplica-se a conexões de rede. Isso pode incluir conexões PPP, SLIP.

Principais Métodos:

TACACS+ - Utiliza o servidor tacacs para definir os direitos de cada usuário.
If-Authenticated – O usuário terá acesso as funções requisitadas desde que autenticado com sucesso. 
NoneNão é solicitada informações de autorização; autorização não é realizada sobre esta linha/interface.
Local – O bando de dados local é utilizado  para autorizar direitos específicos para o usuário. Somente um equeno conjunto de funções pode ser controlado via banco de dados local. 
RADIUS - Utiliza o servidor radius para definir os direitos de cada usuário.

Exemplos:


Router(config)#aaa authorization exec default group tacacs+ local


Tenta autorizar os comandos do modo EXEC para todas as interfces/lines (default) preferencialmente pelo tacacs+.
Se falhar tenta através do banco de dados local do roteador.


Router(config)#aaa authorization commands 6 default group tacacs+ local


Tenta autorizar os comandos do modo EXEC com nível de privilégio 6 para todas as interfces/lines (default) pelo tacacs+. Se falhar, tenta o método local.


2.4 – Configurar Auditoria.

A forma do comando é:

Router(config)# aaa accounting {system | network | exec | connection | commands level} {default | list-name} {start-stop | stop-only | none} [method1 [method2...]]

A lista de métodos é similar a dos comandos anteriores com exceção de:

·         System - Fornece informações sobre eventos do sistema.
·         Connection – Fornece informações sobre todas as conexões feitas ao servidor de acesso.
·         Resource -  Fornece registro start e stop para chamadas de usuários que passaram na autenticação e fornece registros stop para chamadas que falharam. Veja Configuring Account para maiores detalhes.


Exemplos:


Router(config)# aaa accounting exec default start-stop group tacacs+


Audita os comandos do modo EXEC para todas as interfces/lines (default) e provê registro start-stop para chamadas que foram autenticadas no servidor tacacs+.


Router(config)#aaa accounting commands 6 default start-stop group tacacs+


Audita comandos do modo EXEC, incluindo comandos de configuração global, com nível de privilégio 6,  para todas as interfces/lines no servidor tacacs+.


2.5 - Configurar acesso ao servidor


Router(config)#tacacs-server host 10.1.1.1
Router(config)#tacacs-server key senha


Host é o nome ou endereço ip do servidor tacacs e key é a senha.


2.6 – Configurar as interfaces line.

A forma do comando é:

line [aux | console | tty | vty] line-number [ending-line-number]

aux – Porta auxiliar EIA/TIA-232 DTE.
console – Porta de console .
tty - Linha assíncrona padrão.
vty - Linha de terminal virtual para o acesso remoto.


2.7 – Exemplo mais completo:

!
enable password local
!
aaa new-model
aaa authentication login BDLOCAL local
aaa authentication login default group tacacs+ local
aaa authorization exec default group tacacs+ local
aaa accounting exec default start-stop group tacacs+
!
username cisco password cisco
!
tacacs-server host 10.1.1.1
tacacs-server key senha
!
line con 0
 login authentication BDLOCAL
 
!  Autenticação será local (pelo list-name: BDLOCAL).
line aux 0
!  Autenticação default (tacacs+ ou local).
line vty 0 4
!  Idem.




3 – Lab



3.1 - Topologia
 
Figura 1


 Para que este Lab funcione corretamente, será necessário instalar uma loopback no PC para conectá-lo ao roteador Cisco permitindo, assim, conectividade entre ele e o Tacacs+. No link Como configurar o Adaptador Loopback do Windows com o GNS3 você encontra um ótimo tutorial de como fazer isso.

O roteador Terminal é utilizado para testar a linha vty através de telnet (telnet 192.168.0.2). Para testar a Con 0 ou a Aux 0, clicar com o botão esquerdo mo mouse sobre o roteador Cisco e escolher, no menu suspenso, Console ou Console to AUX port.


3.2 - Script

!
hostname Cisco
!
aaa new-model
!
aaa authentication password-prompt Senha:
aaa authentication username-prompt Usuario:
aaa authentication login default group tacacs+ local
aaa authentication login BDLOCAL local
aaa authorization exec default group tacacs+ local
aaa accounting exec default start-stop group tacacs+
!
enable password teste
!
username cisco  password 0 cisco                ! Bd local
!
interface FastEthernet0/0
 ip address 192.168.0.2 255.255.255.0
!
interface FastEthernet1/0
 ip address 10.1.1.2 255.255.255.0
!
tacacs-server host 10.1.1.1
tacacs-server key senha
!
line con 0
 login authentication BDLOCAL
line aux 0

line vty 0 4
!



3.3 – Logs


<102> 2013-04-01 19:38:47 [10.1.1.2:64444] 04/01/2013 19:38:47 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Start task_id=2 timezone=UTC service=shell
<102> 2013-04-01 19:39:01 [10.1.1.2:14265] 04/01/2013 19:39:01 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=2 timezone=UTC service=shell priv-lvl=15 cmd=show running-config <cr>
<102> 2013-04-01 19:39:22 [10.1.1.2:40707] 04/01/2013 19:39:22 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=3 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal <cr>
<102> 2013-04-01 19:39:40 [10.1.1.2:54287] 04/01/2013 19:39:40 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=4 timezone=UTC service=shell priv-lvl=15 cmd=show running-config <cr>
<102> 2013-04-01 19:39:49 [10.1.1.2:31014] 04/01/2013 19:39:49 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=5 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal <cr>
<102> 2013-04-01 19:39:56 [10.1.1.2:51598] 04/01/2013 19:39:56 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=6 timezone=UTC service=shell priv-lvl=15 cmd=interface FastEthernet 0/0 <cr>
<102> 2013-04-01 19:40:08 [10.1.1.2:50540] 04/01/2013 19:40:08 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=7 timezone=UTC service=shell priv-lvl=15 cmd=no shutdown <cr>
<102> 2013-04-01 19:40:42 [10.1.1.2:19665] 04/01/2013 19:40:42 NAS_IP=10.1.1.2 Port=tty130 rem_addr=192.168.0.1 User=joiro@net Flags=Stop task_id=2 timezone=UTC service=shell disc-cause=1 disc-cause-ext=9 pre-session-time=17 elapsed_time=116 stop_time=1014940977



No diretório Logs do Tacacs.net encontra-se, alem de outros, os arquivos de Accounting. Neles ficam registrados várias informações como data/hora, usuários e os comandos por eles aplicados no roteador.


4 - Instalando TACACS.net


No site www.tacacs.net está disponível, grátis para download, um servidor de tacacs+ pequeno simples, mas bastante eficiente para testes em laboratório embora, pela documentação do produto, seja possível utilizá-lo em um ambiente de produção.

Baixe o arquivo TACACSSetup_v1.2.2.zip  descompacte e instale em seu computador. Na instalação é solicitada a senha que será utilizada para autenticar o cliente (roteador) no comando ‘tacacs-server key senha’ do Cisco. Imediatamente após a instalação o serviço TACACS.net é iniciado  e fica assim indefinidamente até que seja parado manualmente ou por algum problema.

Para verificar o serviço funcionando no Windows 7, vá ao Painel de Controle, Ferramentas Administrativas e depois clique em Serviços. Procure o serviço TACCACS.net e veja o status ‘iniciado’.

Se o serviço, por algum motivo, estiver parado (não iniciado), e ao tentar inicia-lo ele exibir a seguinte mensagem:
 
“O serviço TACACS.net em Computador local foi iniciado e interrompido. Alguns serviços...”


É porque um ou mais arquivo de configuração ‘*.xml.’ foi corrompido ou alguma variável se tornou  incompatível entre os arquivos.  O Resumo Gráfico no item 3 esclarece esta relação entre os arquivos.  Até mesmo uma letra acentuada em um comentário provoca erro no exibidor de ‘xml’. Cuidado para não alterar a estrutura do documento. Todo comentário tem que ser iniciado (<!--) e fechado (-->). Antes de alterar qualquer um dos arquivos, faça backup.


4.1 – Configurando

Arquivo ‘tacplus.xml’

Este arquivo configura alguns parâmetros do Tacacs.net. Na prática, basta configurar o IP do Servidor que já funciona, mas outros parâmetros poderiam ser alterados como os strings ‘Password:’ e ‘Username:’ por ‘Senha: e ‘Usuario:’, por exemplo. Por default o serviço Tacacs+ roda na porta TCP 49, mas caso tenha algum conflito com esta porta, nada impede que seja mudada desde que no roteador (cliente) você especifique a porta no comando ‘tacacs-server host 10.1.1.1 port xxx’.

<Server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Port>49</Port>
  <LocalIP>10.1.1.1</LocalIP>
  <PasswordPrompt>Password: </PasswordPrompt>
  <UserNamePrompt>Username: </UserNamePrompt>


Arquivo ‘clients.xml’

Este é o arquivo de configuração que define o cliente TACCAS+, também chamado de NAS. Através do IP do cliente (Roteador, Switch etc), é selecionado o ‘ClientGroup Name’, neste caso, ‘CISCO’. Este nome será utilizado Junto com o 'Name' do "UserGroup" do 'autentication.xml',(‘Privilegiado’ ou ‘Sem Privilegio’ no nosso exemplo) pelo arquivo de 'authorization.xml' para atribuir as políticas para o usuário autenticado.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Version 1.2 -->

<Clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ClientGroups>

<!—GRUPO CISCO
Este grupo foi criado para autenticar o roteador CISCO utilizado para esta experiência. O que define a escolha deste grupo é o IP 10.1.1.2 do roteador.  -->

   <ClientGroup Name="CISCO">
            <Secret ClearText="senha" DES=""></Secret>
                        <Clients>
                            <Client>10.1.1.2</Client> <!-- Ip do roteador -->
                        </Clients>
            </ClientGroup>
</ClientGroups>

Arquivo ‘authentication.xml’

Este arquivo, como sugere o nome, autentica o usuário e senha. O ‘Name’ do ‘UserGroup’ será utilizado pelo arquivo ‘authorization.xml’ juntamente com  o ‘ClientGroup Name’ do arquivo ‘clients.xml’ para aplicar as políticas estabelecidas ao usuário autenticado.

<?xml version="1.0" encoding="utf-8"?>
<!-- Version 1.2 -->
<Authentication xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UserGroups>
    <UserGroup>
      <Name>Privilegiado</Name>
      <AuthenticationType>File</AuthenticationType>
              <Users>
                        <User>
                          <Name>joiro@net</Name>
                                    <LoginPassword ClearText="joiro" DES=""> </LoginPassword>
                                    <EnablePassword ClearText="" DES=""></EnablePassword>
                                   <CHAPPassword ClearText="" DES=""> </CHAPPassword>
                                   <OutboundPassword ClearText="" DES=""> </OutboundPassword>
                        </User>
    </UserGroup>
    <UserGroup>
      <Name>Sem Privilegio</Name>
      <AuthenticationType>File</AuthenticationType>
                        <Users>
                                   <User>
                                     <Name>jeca</Name>
                                     <LoginPassword ClearText="tatu" DES=""> </LoginPassword>
                                     <EnablePassword ClearText="" DES=""></EnablePassword>
                                     <CHAPPassword ClearText="" DES=""> </CHAPPassword>
                                     <OutboundPassword ClearText="" DES=""> </OutboundPassword>
                                   </User>
                          </Users>
    </UserGroup>
  </UserGroups>
</Authentication>


Arquivo ‘authorization.xml’

Este arquivo define as políticas de autorização para o usuário autenticado desde que  o ‘<UserGroup> <Name>’ e   ClientGroup Name’, coincidam. Em ‘AutoExec’ e  ‘Shell’ serão definidas as políticas.

<?xml version="1.0" encoding="utf-8"?>
<!-- Version 1.2 -->
<Authorizations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Authorizations>
  <Authorization>
            <UserGroups>
                        <UserGroup>Privilegiado</UserGroup>
            </UserGroups>
            <ClientGroups>
                        <ClientGroup>CISCO</ClientGroup>
            </ClientGroups>
                        <AutoExec>
                                   <Set>priv-lvl=15</Set> <!—Seta privilegio 15 -->
                        </AutoExec>
                        <Shell>
                                   <Permit>.*</Permit> <!—Permite todos os comandos -->
                        </Shell>                                                                                                  
                        <Services>
                                   <Service>
                                               <!-- <Set>service=ppp</Set> -->
                                               <!--<Set>protocol=ip </Set> -->
                                   </Service>
                        </Services>
            </Authorization>
            <Authorization>
                        <UserGroups>
                                   <UserGroup>Sem Privilegio</UserGroup>
                        </UserGroups>
                        <ClientGroups>
                                   <ClientGroup>CISCO</ClientGroup>
                        </ClientGroups>
                        <Shell>
                                   <Permit>telnet .*</Permit>  <!--Permite telnet -->
                                   <Permit>.*show.*</Permit> <!--Permite commandos ‘show’ -->
                                   <Permit>enable</Permit>   <!--Permite commando ‘enable’  -->
                                   <Deny>.*</Deny>                <!--Proibe todos os outros commandos -->
                        </Shell>
            </Authorization>
</Authorizations>
</Authorizations>

4.2 – Resumo gráfico                




Figura 2

5 - Links Relacionados:


 [1] – Protocolos AAA

2 comentários:

  1. Very good explanation. I've successfully made a GNS3 lab and it's working at all.

    ResponderExcluir
  2. Excelente, muy buen trabajo, solo me falta comprobarlo por mi propia cuenta. Muito Brigado.

    ResponderExcluir