Exportação automática do MK-AUTH para MIKROTIK por: M4D3


Segue script para exportação da access-list e cadastro de clientes do pppoe secret (pode ser adaptado para hotspot facilmente).

#!/bin/bash
#======== EXPORTACAO DE DADOS MKAUTH PARA MIKROTIK ========#
##---------------==== COMPILADO POR: ====------------------##
##---------- LUCIANO RAMPANELLI - M4D3@HOTMAIL.COM ---------##
#--------------------- www.nimoc.com.br ----------------------#
#===============================================#

banco=mkradius
table=sis_cliente
campo=ativo

#IP DE CADA AP OU SERVIDOR QUE IRA RECEBER OS DADOS
ap1=172.16.16.251
ap2=172.16.16.252

#USUARIO FTP PARA ENVIO DE ARQUIVOS
ftp_user="ftpuser"
ftp_pass="ftpuser123"

#USUARIO SSH PARA EXECUCAO DE COMANDOS
ssh_user="sshuser"
#DEVE SER CADASTRADO SEM SENHA, LIBERAR APENAS IP DO MKAUTH NO MIKROTIK PARA ESTE USUARIO

#ARQUIVOS DESTINO
arquivo1="access-list.rsc"
arquivo2="secret.rsc"


#EXPORTACAO DO BANCO DE DADOS
if [ "$1" = "s" ];then
        mysql -u root -pvertrigo -e\
     "SELECT login, mac, plano, tipo, senha FROM $table WHERE $campo = '$1'" $banco |awk '{ print $1, $2, $3, $4, $5 }' |grep -v "login mac plano tipo senha" |grep -v "NULL" > /tmp/.lmp
fi

count=`cat /tmp/.lmp|wc -l`
indice=$count

#MONTAGEM DA STRING DE IMPORTACAO DOS MACS PARA A ACCESS-LIST
echo "/interface wireless access-list " > $arquivo1
   while [ $count -gt 0 ]; do
     login=`cat /tmp/.lmp |awk '{ print $1 }' |sed -n $count"p"`
     mac=`cat /tmp/.lmp |awk '{ print $2 }' |sed -n $count"p"`
     if [ ! -z $login ]; then
      echo "add comment="$login" disabled=no interface=all mac-address=$mac signal-range=-78.120 forward=no" >> $arquivo1
     fi
    count=`echo $count-1|bc`
   done
cat $arquivo1
echo " "

count=`cat /tmp/.lmp|wc -l`
indice=$count

#MONTAGEM DA STRING DE IMPORTACAO DOS CLIENTES PPPOE
echo "/ppp secret " > $arquivo2
   while [ $count -gt 0 ]; do
     login=`cat /tmp/.lmp |awk '{ print $1 }' |sed -n $count"p"`
     mac=`cat /tmp/.lmp |awk '{ print $2 }' |sed -n $count"p"`
     plano=`cat /tmp/.lmp |awk '{ print $3 }' |sed -n $count"p"`
     tipo=`cat /tmp/.lmp |awk '{ print $4 }' |sed -n $count"p"`
     senha=`cat /tmp/.lmp |awk '{ print $5 }' |sed -n $count"p"`
     if [ $tipo = "pppoe" ]; then
      echo "add caller-id=$mac name=$login password=$senha profile=$plano service=$tipo disabled=yes" >> $arquivo2
     fi
    count=`echo $count-1|bc`
   done
cat $arquivo2
echo " "

#ENVIO DE ARQUIVOS POR FTP
echo "Enviando arquiovos..."
ftp -in $ap1 << ap1
        user $ftp_user $ftp_pass
        send $arquivo1
        send $arquivo2
        bye
        EOF
        quit
ap1

ftp -in $ap2 << ap2
                   user $ftp_user $ftp_pass
                   send $arquivo1
                   send $arquivo2
                   bye
           EOF
           quit
ap2

echo " "

#EXECUCAO DE COMANDOS VIA SSH
echo "Importando dados..."
ssh $ssh_user@$ap1 << sh1
           /ppp secret export file=bkp_secret.rsc
           /ppp secret remove [/ppp secret find]
           /import $arquivo2
           /interface wireless access-list export file=bkp_access-list.rsc
           /interface wireless access-list remove [/interface wireless access-list find]
           /import $arquivo1
           /quit
sh1

ssh $ssh_user@$ap2 << sh2
                   /ppp secret export file=bkp_secret.rsc
                   /ppp secret remove [/ppp secret find]
                   /import $arquivo2
                   /interface wireless access-list export file=bkp_access-list.rsc
                   /interface wireless access-list remove [/interface wireless access-list find]
                   /import $arquivo1
                   /quit
sh2

rm -fr $arquivo1
rm -fr $arquivo2

echo "Exportado(s) $indice registro(s)"

#DOCUMENTACAO
#http://thobias.org/doc/shell_bd.html#toc11

#DEPENDENCIAS
#apt-get update
#apt-get install ftp bc -y


#PARA RODAR DIGITE

#mka2mk.sh s

Salve o script acima como mka2mkt.sh
Dê de permissao de execução: chmod +x mka2mkt.sh
E rode o script após configurar os parametros com: ./mka2mkt.sh s

A letra 's' identifica os clientes ativos, mas você pode alterar para usar como bem entender.


O agendamento pode ser feito para rodar durante a madrugada pelo crontab, mantendo seu MK-AUTH sincronizado com mikrotik.


É isso pessoal, dúvidas é só perguntar, convido os colegas a aprimorarem o script bem como a complementarem com novas funções.

Valeu

Luciano Rampanelli - M4D3

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Enviar-me um email quando as pessoas responderem –

Respostas


  • Seria interessante o MK-AUTH incorporar estas funções, isso traria maior segurança para os provedores com toda certeza.

  • Testado em MikroTik 4.x e 5.x

  • Se o pedro conseguisse fazer isso iria ficar massa pois faço aqui na mão para caso aconteça algo com o server radius a rb assuma tudo fiz um script porem a exportação dos usuarios faço na mão grande isso seria maravilhoso.

    Pedro veja o que pode fazer para exportar isso todos os dias pela madrugada ou algo parecido...

    grato.

    m4d3 disse:


    Seria interessante o MK-AUTH incorporar estas funções, isso traria maior segurança para os provedores com toda certeza.

  • Pra fazer de madrugada basta agendar o script pelo crontab, o ideal seria fazer em tempo real, a cada alteração feita no MK-AUTH enviar também para o MikroTik.

    Abraço


  • O cadastro da secret vai desativado para o mikrotik, basta adicionar em tools netwatch um monitoramento para o ip do MK-AUTH com a seguinte instrução:

    DOWN
    /ppp secret set [find disabled=yes] disabled=no

    UP
    /ppp secret set [find disabled=no] disabled=yes


    Assim se cair o MK-AUTH a secret é automáticamente ativada e quando religar o MK-AUTH a secret é novamente desativada.





  • Para rodar automaticamente todos os dias as 04:50 da manhã logo após o backup automático diário, salve o script em /usr/local/mkauth/scripts/mka2mkt.sh e em seguida digite no console:

    echo "50 04   * * *   root    sh /usr/local/mkauth/scripts/mka2mkt.sh" >> /etc/cron.d/backup


    Lembrando que se fizer atualização do MK-AUTH deve digitar novamente o comando acima para reinstalar o agendamento.


  • Parabens Luciano, com a flexibilidade dessa regra, aliada ao mk-auth e a um netwatch no Mikrotik o serviço não irá parar tão facilmente!


  • Valeu Renato, também acredito que será muito útil.

    Abraço

  • muito legal, o interessante que é possivel alterar esse script para fazer um integração de controle IP x MAC na ARP no sistema, que muitos já pediram aqui e não coloquei pq o radius no suporta...

  • Então pedro, teria como implementar esse script para ser executado pelo mk-auth?

This reply was deleted.