Conectar-se

Esqueci minha senha

Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Clique aqui para adicionar nosso forum aos seus favoritos
Estatísticas
Temos 64 usuários registrados
O último usuário registrado atende pelo nome de spectrocool

Os nossos membros postaram um total de 97 mensagens em 58 assuntos

[Tutorial] Tacacs + Mysql

Ir em baixo

[Tutorial] Tacacs + Mysql

Mensagem  R. Jardim em Seg Jan 24, 2011 6:19 pm

Em uma rede com ativos de rede gerenciáveis, o controle de acesso e a arquivamento das configurações é primordial para prover a disponibilidade que a mesma se propõe. No caso das redes com ativos da marca Cisco Systems, é possível criar um servidor capaz de guardar os usuários e os comando que cada um aplicocou nos equipamentos. Esse servidor se chama TACACS+ (Terminal Access Controller Access-Control System Plus). O tacacs+ é um protocolo remodelado pela cisco, com base no tacacs, que visa ser um substitudo do serviço conhecido como RADIUS.
Esse tópico mostra como criar esse serviço com base no sistema Debian e arquivar os log em um banco de dados (MySQL);




DAEMON TACACS+

Para instalação do serviço, são preciso apenas dois pacotes: libtacacs+1 e o tacacs+; Você pode baixar os pacotes do espelho brasileiro apartir dos links abaixo, basta escolher a plataforma e depois usar South America > ftp.br.debian.org/debian (Recomendável);

http://packages.debian.org/squeeze/libtacacs+1
http://packages.debian.org/squeeze/tacacs+

Siga o passo-a-passo para intalação.


Código:
tacacs+~# cd /usr/src
tacacs+~# wget http://ftp.br.debian.org/debian/pool/main/t/tacacs+/libtacacs+1_4.0.4.19-8_i386.deb <-- versão i86
tacacs+/usr/src# wget http://ftp.br.debian.org/debian/pool/main/t/tacacs+/tacacs+_4.0.4.19-8_i386.deb   <-- versão i86
tacacs+/usr/src# dpkg -i libtacacs+1_4.0.4.19-8_i386.deb
tacacs+/usr/src# dpkg -i tacacs+_4.0.4.19-8_i386.deb

Pronto com isso o serviço é instalado. Vamos as configurações. O arquivo de configuração padrão fica localizado é [i]/etc/tacacs+/tac_plus.conf[i], faça um backup desse arquivo é subistitua por suas configurações. Abaixo segue o exemplo aplicado nos testes:


Código:
# DEFINE CHAVE QUE SERÁ USADA NA COMUNICAÇÃO CLIENTE-SERVIDOR;
key = cisco123

# DEFINE O ARQUIVO EM QUE OS LOGS SERÃO DIRECIONADOS;
accounting file = /var/log/tacacs/tacacs.log

# CRIAR UM GROPU DE USUÁRIOS COM ACESSO MÁXIMO AO EQUIPAMENTO - NÍVEL 15;
group = admins {
default service = permit
service = exec {
priv-lvl = 15
idletime = 5
}
}


# CRIA UM GRUPO DE USUÁRIOS COM DIREITOS MENORES DE CONFIGURAÇÃO E VISUALIZAÇÃO;
group = users {
default service = permit
service = exec {
priv-lvl = 7
idletime =  5
}
}


# ADICIONA UM USUÁRIO CHAMADO rafael AO GRUPO admins;
user = rafael {
member = admins
login = des TCBb5IvZHIIi.
}

# ADICIONA UM USUÁRIO CHAMADO felipe AO GRUPO users;
user = felipe {
member = users
login = des jaur0wkwiPzgQ

Um detalhe desse arquivo é o que é colodo no campo 'login ='. Ele é quem define como será a visualização dos passawords no arquivo de configuração, pode ser do tipo 'cleartext' em que você coloca diretamento o password ou na forma criptografada pelo algoritmo DES. Exemplo


  1. login = cleartext mysecret
  2. login = des 4jjRwBMQ0IkGs


A segunda forma é obtida através de um comando que é instalado junto ao tac_plus, o tac_pwd. A saída abaixo é um exemplo de como utiliza-lo.

Código:
tacacs+:~# tac_pwd
Password to be encrypted:

Após o termino da configuração é preciso reiniciar o serviço com o comando:

Código:
tacacs+:/usr/src# /etc/init.d/tacacs_plus restart
Restarting TACACS+ authentication daemon: tacacs+.

A partir desse ponto você já pode configurar o cliente Cisco para se authenticar no servidor Tacacs+, conforme sua necessidade:

Código:
Exemplo:
configure terminal
aaa new-model
aaa authentication login default group tacacs+ local  
aaa authentication enable default group tacacs+ enable
aaa authorization exec default group tacacs+ local none
aaa authorization commands 0 default group tacacs+ local none
aaa authorization commands 1 default group tacacs+ local none
aaa authorization commands 15 default group tacacs+ local none
aaa authorization configuration default group tacacs+
aaa accounting exec default start-stop group tacacs+
aaa accounting commands 0 default start-stop group tacacs+
aaa accounting commands 1 default start-stop group tacacs+
aaa accounting commands 15 default start-stop group tacacs+
aaa accounting network default start-stop group tacacs+
aaa accounting connection default start-stop group tacacs+
aaa accounting system default start-stop group tacacs+

tacacs-server host <ip do servidor Tacacs+>
tacacs-server key <sua senha do arquivo de configuração>
Feito isso saia do roteador, sem salvar de preferência, e ao acessa-lo novamente você verá uma tela paracida com essa:

Código:
User Access Verification

Username: rafael
Password:

ARQUIVANDO LOG NO MYSQL

O arquivo de log é definido no arquivo de configuração do tacacs+, sua saida é do tipo:

Código:
Mon Jan 24 18:04:19 2011        192.168.0.254   rafael  tty6    192.168.0.2     start   task_id=4       timezone=UTC    service=shell
Mon Jan 24 18:04:35 2011        192.168.0.254   rafael  tty6    192.168.0.2     stop    task_id=4       timezone=UTC    service=shell   priv-lvl=15     cmd=ping 192.168.0.1 repeat 200 size 1500 <cr>
Mon Jan 24 18:04:44 2011        192.168.0.254   rafael  tty6    192.168.0.2     stop    task_id=5       timezone=UTC    service=shell   priv-lvl=1      cmd=show interfaces <cr>
Mon Jan 24 18:04:48 2011        192.168.0.254   rafael  tty6    192.168.0.2     stop    task_id=4       timezone=UTC    service=shell   disc-cause=1    disc-cause-ext=9        pre-session-time=4  elapsed_time=29  stop_time=1014941198

Com base nesse arquivo pensei numa maneira de guardar essas informações de maneira mais organizada, por isso o uso do MySQL. A instalação do servidor de banco é dados pode ser feita facilmente pelo comando:

Código:
tacacs+:~# apt-get install mysql-server
Durante sua instalação será solicitada a senha do root do DB para acesso ao serviço.

Após as instação criei um novo Database chamado tacacs e duas tabelas para guardar os dados, uma para logins e outra para comandos aplicados. Use os comando abaixo:


Código:
tacacs+:/var/log/tacacs# mysql -p -uroot
Enter password:

mysql> CREATE DATABASE tacacs;
mysql> USE tacacs;
mysql> CREATE TABLE registro (data DATE, hora TIME, user VARCHAR(20), hostip VARCHAR(15), sourceip VARCHAR (12), term VARCHAR(5), cmd_priv INT(2), cmd VARCHAR(255));
mysql> CREATE TABLE login (data DATE, hora TIME, user VARCHAR(20), hostip VARCHAR(15), sourceip VARCHAR (12), term VARCHAR(5), status VARCHAR(10));
mysql> SHOW TABLES; <---- VISUALIZAR AS TABALAS CRIADAS
OBS.: Vale lembrar que essas tabelas vão guardar o que eu achei necessário de cada linha do arquivo de log. Você pode editar e modificar o filtro mostrado mais abaixo:

Nesse tutorial não é possível pegar a saida do tac_plus e jogar diretamento no database, por isso fiz um script para realização do filtro de cada linha do arquivo de log e importação para o banco de dados. Esse filtro deve ser colocado no mesmo diretório em que o arquivo de log está alocado e irá gerar outros arquivos: login.log para a tabela 'tacacs.login' e registro.log para a tabela 'tacacs.registro'. Basta copiar o arquivo baixo para a terminal e salvar. Esse script tem a função:


  1. Modificar os mesês da forma {Jan,Feb,Mar,...} para {01,02,03...} nativa do sql;
  2. Inserir tabulação entre os campos para importação ao banco;
  3. Organização dos campos e exclusão de palavras;
  4. Importação para o banco;
  5. Limpeza dos registro para evitar duplicidade;


Código:
#!/bin/bash

# VARIAVÉIS

# APONTAR O ARQUIVO DE LOG CONFIGURADO EM "accounting file" DO ARQUIVO DE CONFIGURAÇÃO DO /etc/tacacs/tac_plus.conf
LOGFILE=/var/log/tacacs/tacacs.log

# CRIANDO ARQUIVOS DE LOG TEMPORÁRIOS
logons=$(tempfile) ; chmod go-rw $logons
registros=$(tempfile) ; chmod go-rw $registros


# ACESSO AO BANCO DE DADOS
SQLUSER=tacplus
SQLPASS=tacpluspassword

# FILTRO DAS LINHAS DO LOG

LINHAS(){

CLIN=`cat $LOGFILE | wc -l`
 for (( LINHA = 1 ; LINHA <= $CLIN; LINHA++ )); do
  MES=`head -$LINHA $LOGFILE | tail -1 | cut -d" " -f2`
   FILTRO
 done
RMLIM=`cat $LOGFILE | wc -l`
tail -$(($RMLIM - $CLIN)) $LOGFILE > $LOGFILE

}

# ANALISANDO LINHA A LINHA DO ARQUIVO DE LOG;

FILTRO(){
 if [ `head -$LINHA $LOGFILE | tail -1 | fmt -utw500 |cut -d" " -f10` = "start" ]; then
 LOGON
 elif [ `head -$LINHA $LOGFILE | tail -1 | fmt -utw500 | sed 's/ /=/g' | cut -d= -f17` = "disc-cause" ]; then
  DISC
 else
  REGISTRO
 fi
}

# EDITANDO SAÍDA DOS COMANDOS PARA O PADRÃO DO MYSQL E ARQUIVANDO;

REGISTRO(){

reg="head -\$LINHA \$LOGFILE | tail -1 | fmt -utw500 |  awk '{ OFS=\"\\t\"; ORS=\"\"} {print \$5\"-\"\$2\"-\"\$3\" \"\$4,\$7,\$6,\$9,\$8,\$14\"\t\"} {for (i=15; i<=30; i+=1) printf \" \"\$i} {print \"\\n\"}' | sed -e 's/cmd=//g' -e 's/<cr>//g' -e 's/priv-lvl=//g' -e 's/async/console/g'"

 case $MES in
 Jan) eval $reg -e 's/Jan/01/g' >> $registros ;;
  Feb) eval $reg -e 's/Feb/02/g' >> $registros ;;
  Mar) eval $reg -e 's/Mar/03/g' >> $registros ;;
  Apr) eval $reg -e 's/Apr/04/g' >> $registros ;;
  May) eval $reg -e 's/May/05/g' >> $registros ;;
  Jun) eval $reg -e 's/Jun/06/g' >> $registros ;;
  Jul) eval $reg -e 's/Jul/07/g' >> $registros ;;
  Aug) eval $reg -e 's/Aug/08/g' >> $registros ;;
  Sep) eval $reg -e 's/Sep/09/g' >> $registros ;;
  Oct) eval $reg -e 's/Oct/10/g' >> $registros ;;
  Nov) eval $reg -e 's/Nov/11/g' >> $registros ;;
  Dec) eval $reg -e 's/Dec/12/g' >> $registros ;;
 esac

}

LOGON(){

filtro="head -\$LINHA \$LOGFILE | tail -1  | fmt -utw500 | awk '{ OFS=\"\t\"; print \$5\"-\"\$2\"-\"\$3\" \"\$4,\$7,\$6,\$9,\$8, \"LOGIN\" }' | sed -e 's/async/console/g'"

 case $MES in  
 Jan) eval $filtro -e 's/Jan/01/g' >> $logons ;;
 Feb) eval $filtro -e 's/Feb/02/g' >> $logons ;;
  Mar) eval $filtro -e 's/Mar/03/g' >> $logons ;;
  Apr) eval $filtro -e 's/Apr/04/g' >> $logons ;;
  May) eval $filtro -e 's/May/05/g' >> $logons ;;
  Jun) eval $filtro -e 's/Jun/06/g' >> $logons ;;
  Jul) eval $filtro -e 's/Jul/07/g' >> $logons ;;
  Aug) eval $filtro -e 's/Aug/08/g' >> $logons ;;
  Sep) eval $filtro -e 's/Sep/09/g' >> $logons ;;
  Oct) eval $filtro -e 's/Oct/10/g' >> $logons ;;
  Nov) eval $filtro -e 's/Nov/11/g' >> $logons ;;
  Dec) eval $filtro -e 's/Dec/12/g' >> $logons ;;
esac
}

DISC(){

filtro="head -\$LINHA  \$LOGFILE | tail -1  | fmt -utw500 | awk '{ OFS=\"\t\"; print \$5\"-\"\$2\"-\"\$3\" \"\$4,\$7,\$6,\$9,\$8, \"DISCONNECT\" }' | sed -e 's/async/console/g'"

 case $MES in
  Jan) eval $filtro -e 's/Jan/01/g' >> $logons ;;
 Feb) eval $filtro -e 's/Feb/02/g' >> $logons ;;
  Mar) eval $filtro -e 's/Mar/03/g' >> $logons ;;
  Apr) eval $filtro -e 's/Apr/04/g' >> $logons ;;
  May) eval $filtro -e 's/May/05/g' >> $logons ;;
  Jun) eval $filtro -e 's/Jun/06/g' >> $logons ;;
  Jul) eval $filtro -e 's/Jul/07/g' >> $logons ;;
  Aug) eval $filtro -e 's/Aug/08/g' >> $logons ;;
  Sep) eval $filtro -e 's/Sep/09/g' >> $logons ;;
  Oct) eval $filtro -e 's/Oct/10/g' >> $logons ;;
  Nov) eval $filtro -e 's/Nov/11/g' >> $logons ;;
  Dec) eval $filtro -e 's/Dec/12/g' >> $logons ;;
esac
}


# ARQUIVAMENTO NO BANCO DE DADOS;

MYSQL(){

# IMPORTAR OS COMANDOS PARA A TABELA tacacs.registros;
mysql -u"$SQLUSER" -p"$SQLPASS" -e "LOAD DATA LOCAL INFILE '$registros' INTO TABLE tacacs.registros;"

# IMPORTAR OS LOGINS/DISCONNECTS PARA A TABELA tacacs.login;
mysql -u"$SQLUSER" -p"$SQLPASS" -e "LOAD DATA LOCAL INFILE '$logons' INTO TABLE tacacs.logons;"  

# ESSAS ENTRADAS SÃO CRIADAS QUANDO O ROTEADOR SE CONECTA AO TACACS+, VOCÊ PODE MOVER PARA OUTRA TABELA SE QUISER;
mysql -u"$SQLUSER" -p"$SQLPASS" -e "DELETE FROM tacacs.logons WHERE term = 'unkno';"

# SALVAR OS DADOS ALTERADOS NO BANCO DE DADOS;
mysql -u"$SQLUSER" -p"$SQLPASS" -e "COMMIT;"

# APAGAR ARQUIVOS TEMPORÁRIOS;
rm $logons
rm $registros

}

# EXECUÇÃO DO SCRIPT;

LINHAS; MYSQL
OBS.: OFS é a variável do comando awk que é usada como separador. Como o MySQL separa as campos por tabulações (tecla TAB) na hora de importar o arquivo, você precisa substituir as palavras TAB entre aspas pelo espaçamento da tecla TAB ("        "). O código no forum insere espaços no lugar, o que causou erros no script quando copiado e colodo diretamente via terminal.

Na primeira utilização você irá receber, se arquivo de log estiver vazio:

Código:
cat: /var/log/tacacs/tacacs.log: Arquivo ou diretório não encontrado
cat: /var/log/tacacs/tacacs.log: Arquivo ou diretório não encontrado
ERROR 2 (HY000) at line 1: File 'registro.log' not found (Errcode: 2)
ERROR 2 (HY000) at line 1: File 'login.log' not found (Errcode: 2)

Durante o processo são gerados

Código:
login.log
2011-01-24      18:21:53        rafael  192.168.0.254   192.168.0.2     tty6    LOGIN
2011-01-24      18:22:40        rafael  192.168.0.254   192.168.0.2     tty6    DISCONNECT

registro.log
2011-01-24      18:21:57        rafael  192.168.0.254   192.168.0.2     tty6    1        show version
2011-01-24      18:22:10        rafael  192.168.0.254   192.168.0.2     tty6    1        show ip interface brief
2011-01-24      18:22:13        rafael  192.168.0.254   192.168.0.2     tty6    15       configure terminal
2011-01-24      18:22:21        rafael  192.168.0.254   192.168.0.2     tty6    15       no cdp run
2011-01-24      18:22:30        rafael  192.168.0.254   192.168.0.2     tty6    15       copy running-config startup-config

E são armazenado no Mysql dessa forma:




Para execução automática do script basta inserir no '/etc/crontab' a linha do tipo

Código:
*/5 * * * * root /var/log/tacacs/filtro.sh   <-- A cada 5 minutos, toda hora, todo dia do mês, todo dia da semana, todo mês, como usuário root


Tópico bloqueado: http://www.networkteam.com.br/t61-tutorial-tac_plus_config



Última edição por R. Jardim em Ter Ago 13, 2013 5:46 pm, editado 7 vez(es) (Razão : Tópico bloqueado)

_________________________________________________
avatar
R. Jardim
Administrador

Mensagens : 45
Data de inscrição : 11/02/2010
Idade : 28
Localização : Recife

http://www.networkteam.com.br

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum