segunda-feira, 1 de agosto de 2011

Tradutor de ACL Cisco para 3Com / H3C / HP Serie A

O Fernando Quintino criou um Shell Script para traduzir ACLs utilizadas em Switches Multicamada e Roteadores Cisco em migração de configuração para dispositivos 3Com/H3C/HP Serie A e/ou CCNA's com dificuldades na sintaxe do Comware.

O Script foi muito útil em migrações que era necessário traduzir centenas de listas de acesso.

Para quem não está acostumado a usar Shell Script:

1. Crie o arquivo no Linux com o script abaixo com o nome ACL_Ciscox3com.v0.1.beta
2.Salve também a ACL modelo Cisco no mesmo diretório.
3. Altere as permissões para poder executar o arquivo com o comando chmod+x ACL_Ciscox3com.v0.1.beta‎.
4. Para executar use ./ACL_Ciscox3com.v0.1.beta‎.
5.Depois siga as instruções na tela.

#!/bin/bash
#
#Este script tem como objetivo, coverter ACL de equipamentos Cisco para equipamentos
#3com, H3C, Huawei e HP Serie A, de forma rápida, prática e automatizada.
#
#Após a conversao, verifique as regras para garantir que tudo ocorreu de forma correta.
#
#Criado por Fernando Quintino
#
RULE=-2
END="!"
S_HOST="host0"
#Solicita ao usuario digitar o arquivo de origem
echo Digite o nome do arquivo origem:
read SOURCEFILE
echo
#Solicita ao usuario digitar o arquivo de destino
echo Digite o nome do arquivo destino:
read DESTFILE
echo
echo
echo Arquivo Origem: $SOURCEFILE 
echo Arquivo Destino: $PWD/$DESTFILE
echo
#Alteracoes na sintaxe das regras
cat $SOURCEFILE | sed -e 's/ /,/g' | sed -e 's/p,any,/p,source,0.0.0.0,255.255.255.255,/g' | sed -e 's/p,host,/p,source,host0,/g' | sed -e 's/,any,/,destination,0.0.0.0,255.255.255.255,/g' | sed -e 's/,host,/,destination,/g' | sed -e 's/,eq,/,destination-port,eq,/g' | sed -e 's/,0.0.0.0,255.255.255.255,/,any,/g' | sed -e 's/,/ /g' | sed -e 's/permit/%permit/g' | sed -e 's/deny/%block/g' | tr "%" "\n" > tempfile1
#Remover itens duplicados
awk '!a[$0]++' tempfile1  > tempfile2
#Adicionar ! entre as ACLs
cat tempfile2 | sed 's/access-list/!%access-list/g' | tr "%" "\n" > tempfile3
#Adicionar numero das rules
while read ACL; do
 VERIF_S_HOST=$(echo $RULE $ACL | sed 's/ /,/g' | cut -f5 -d,)
 if [ $ACL ==  $END ]; then
  RULE=-2
 elif [ $VERIF_S_HOST == $S_HOST ]; then
  RULE=$(($RULE+1))
  echo "$RULE $ACL" | sed 's/host0 //' | sed 's/destination/0 destination/' >> tempfile4
 else
  RULE=$(($RULE+1))
  echo "$RULE $ACL" >> tempfile4
 fi
done < tempfile3
#Adiciona rule ao inicio das linhas e altera "access-list" para "acl number"
cat tempfile4 | sed -e 's/^/rule /g' | sed -e 's/rule -1 access-list/acl number/g' > $DESTFILE
#Remove os arquivos temporarios
rm tempfile1
rm tempfile2
rm tempfile3
rm tempfile4

Caso algum leitor queira traduzir o script para Windows ou colaborar, sugerir ou atualizar o mesmo para Linux, sinta-se a vontade e compartilhe com a comunidade!

Até a próxima