Entrar
Procurar
Estatísticas
Temos 65 usuários registradosO último membro registrado é Thalyssonht
Os nossos membros postaram um total de 97 mensagens em 58 assuntos
[Tutorial] Tacacs + Mysql
Página 1 de 1
[Tutorial] Tacacs + Mysql
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.
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:
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
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.
Após o termino da configuração é preciso reiniciar o serviço com o comando:
A partir desse ponto você já pode configurar o cliente Cisco para se authenticar no servidor Tacacs+, conforme sua necessidade:
ARQUIVANDO LOG NO MYSQL
O arquivo de log é definido no arquivo de configuração do tacacs+, sua saida é do tipo:
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:
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:
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:
Na primeira utilização você irá receber, se arquivo de log estiver vazio:
Durante o processo são gerados
E são armazenado no Mysql dessa forma:
Para execução automática do script basta inserir no '/etc/crontab' a linha do tipo
Tópico bloqueado: http://www.networkteam.com.br/t61-tutorial-tac_plus_config
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
- login = cleartext mysecret
- 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>
- 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
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
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:
- Modificar os mesês da forma {Jan,Feb,Mar,...} para {01,02,03...} nativa do sql;
- Inserir tabulação entre os campos para importação ao banco;
- Organização dos campos e exclusão de palavras;
- Importação para o banco;
- 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
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) (Motivo da edição : Tópico bloqueado)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|