Backup e recuperação automáticos de listas de endereços dinâmicas no Mikrotik

O RouterOS no Mikrotik não se lembra dos elementos dinâmicos das listas de endereços e, no caso de uma reinicialização ou perda de energia, apenas elementos estáticos permanecerão nas listas. Por exemplo, você tem uma regra que captura spammers ou scanners de portas e proíbe seus endereços IP por um mês. Normalmente, esses endereços são salvos como entradas dinâmicas nas listas, mas não são salvos durante a reinicialização, o que significa que é fácil perder o banco de dados "rabanete", coletado por alguns meses de operação contínua do gateway.

Para que esse esquema funcione, você precisa de um servidor FTP (eu tenho o Windows, mas o arquivo em lotes é refeito facilmente para nixes) com uma conta que tenha permissões de leitura / gravação. O mecanismo é baseado na interação dos seguintes elementos: os scripts backupDynList_to_FTP e BackupDynListFromFTP no gateway e o script convertmtik.bat no servidor FTP. É necessário um servidor de terceiros para descarregar a memória interna do Mikrotik (as listas podem ser muito grandes e a memória não volátil não é grande para todos) e para processar o arquivo com meios mais poderosos de trabalhar com texto do que a linguagem de script interna que o mikrotik possui. A chamada de função DynListExport é usada para ignorar o limite do sistema no tamanho da lista. A necessidade de converter a lista se deve ao fato de que se o mesmo elemento (por exemplo, um registro estático) já estiver presente no banco de dados, ocorrerá um erro durante a importação e a importação será interrompida. Para evitar isso, sempre que um registro estático é adicionado, o manipulador de erros é redefinido e, no caso de uma correspondência, o registro simplesmente não é adicionado e o processo de importação avança.

O script BackupDynList_to_FTP é executado a cada hora (00:00), coleta todos os dados sobre registros dinâmicos (que têm pelo menos meia hora de vida) em todas as listas no arquivo iplist_dyn.src e envia esse arquivo para o ftp. No servidor, a cada hora com um turno de meia hora do primeiro script (00:30), o arquivo em lote convertmtik.bat é executado, que converte o script original recebido do gateway em um script protegido contra erros de coincidência e o salva com o nome iplist_dyn_done.src

Agora, no caso de uma queda ou reinicialização do gateway, no momento do lançamento, os dados sobre registros dinâmicos desaparecem automaticamente, mas 60 segundos após o lançamento, o script BackupDynListFromFTP baixa o iplist_dyn_done.src do FTP e o executa, restaurando as listas.

O ativador Hourly_Dynlist_Backup_on_FTP (/ sys sheduler) é executado no início de cada hora:

/system script run BackupDynList_to_FTP 

Script BackupDynList_to_FTP (não esqueça de alterar o endereço FTP, nome de usuário e senha):

 /system script environment remove [ find where name="DynListExport" ]; :global DynListExport do={ :foreach i in=[/ip firewall address–list find where dynamic=yes and timeout>0d00h30m] do={ :local list [/ip firewall address–list get $i list]; :local address [/ip firewall address–list get $i address]; :local timeout [/ip firewall address–list get $i timeout]; :local comment [/ip firewall address–list get $i comment]; :put "/ip firewall address–list add list=$list address=$address timeout=$timeout comment=\"$comment\";"}; } :log info "Starting Backup to FTP Script..." :global iplistfile ("iplist_dyn.rsc") :if ([/file find name=$iplistfile]!= "") do={/file rem $iplistfile}; /execute script="\$DynListExport" file=$iplistfile :delay 60s /tool fetch address="_FTP_" port=21 mode=ftp src–path="iplist_dyn.rsc.txt" user= password= dst–path="iplist_dyn.src" upload=yes :delay 20s /file rem $iplistfile :log info "Finished Backup to FTP!" 

O Activator BackupDynList_from_FTP (/ sys sheduler) é executado no momento em que o gateway é iniciado (inicialização):

 {:delay 60s}; /system script run BackupDynListFromFTP 

Script BackupDynListFromFTP (não esqueça de alterar o endereço FTP, nome de usuário e senha):

 :local BackupFile "iplist_dyn_done.src" /file remove [find name=$BackupFile] /tool fetch address="_FTP_" port=21 mode=ftp src–path="$BackupFile" user= password= /import file–name=$BackupFile {:delay 30s}; /file remove [find name=$BackupFile] /log info "$BackupFile imported" 

Script do servidor Convertmtik.bat - usa a porta SED do utilitário Linux para seu trabalho, por exemplo, do gnuwin32, que deve ser registrado no caminho no servidor:

 echo # ––––––––––––––––––––––––––––––––––––––––––––––––––––– — > iplist_dyn_done.src echo # %date% %time% >> iplist_dyn_done.src echo # ––––––––––––––––––––––––––––––––––––––––––––––––––––– — >> iplist_dyn_done.src echo /ip firewall address–list > iplist_dyn_done.src sed –e "s/;//" –e "s/\/ip firewall address–list //" –e "s/.*/:do { & } on–error={}/" iplist_dyn.src >> iplist_dyn_done.src 

Source: https://habr.com/ru/post/pt477510/


All Articles