Sauvegarde et récupération automatiques des listes d'adresses dynamiques sur Mikrotik

RouterOS dans Mikrotik ne se souvient pas des éléments dynamiques des listes d'adresses, et en cas de redémarrage ou de perte d'alimentation, seuls les éléments statiques resteront dans les listes. Par exemple, vous avez une règle qui intercepte les spammeurs ou les scanners de ports et interdit leurs adresses IP pendant un mois. En règle générale, ces adresses sont enregistrées en tant qu'entrées dynamiques dans les listes, mais elles ne sont pas enregistrées lors du redémarrage, ce qui signifie qu'il est facile de perdre la base de données «radis», collectée pendant, disons, quelques mois de fonctionnement continu de la passerelle.

Pour que ce schéma fonctionne, vous avez besoin d'un serveur FTP (je l'ai Windows, mais le fichier de commandes est facilement refait pour les nix) avec un compte qui a des autorisations de lecture / écriture. Le mécanisme est basé sur l'interaction des éléments suivants: les scripts backupDynList_to_FTP et BackupDynListFromFTP sur la passerelle et le script convertmtik.bat sur le serveur FTP. Un serveur tiers est nécessaire pour décharger la mémoire interne de Mikrotik (les listes peuvent être assez grandes et la mémoire non volatile n'est pas grande pour tout le monde) et pour traiter le fichier avec des moyens de travail avec le texte plus puissants que le langage de script intégré que mikrotik possède. L'appel de fonction DynListExport est utilisé pour contourner la limite système sur la taille de la liste. La nécessité de convertir la liste est due au fait que si le même élément (par exemple, un enregistrement statique) est déjà présent dans la base de données, une erreur se produit lors de l'importation et l'importation est arrêtée. Pour éviter cela, chaque fois qu'un enregistrement statique est ajouté, le gestionnaire d'erreurs est réinitialisé et en cas de correspondance, l'enregistrement n'est tout simplement pas ajouté et le processus d'importation va plus loin.

Le script BackupDynList_to_FTP est exécuté toutes les heures (00:00), il collecte toutes les données sur les enregistrements dynamiques (qui ont au moins une demi-heure à vivre) dans toutes les listes dans le fichier iplist_dyn.src et envoie ce fichier à ftp. Sur le serveur, toutes les heures avec un décalage d'une demi-heure à partir du premier script (00:30), le fichier de commandes convertmtik.bat est exécuté, qui convertit le script d'origine reçu de la passerelle en un script protégé contre les erreurs de coïncidence et l'enregistre sous le nom iplist_dyn_done.src

Maintenant, en cas de chute ou de redémarrage de la passerelle, au moment du lancement, les données sur les enregistrements dynamiques disparaissent automatiquement, mais 60 secondes après le lancement, le script BackupDynListFromFTP télécharge iplist_dyn_done.src à partir de FTP et le lance pour s'exécuter, en restaurant les listes.

L'activateur Hourly_Dynlist_Backup_on_FTP (/ sys sheduler) est exécuté au début de chaque heure:

/system script run BackupDynList_to_FTP 

Script BackupDynList_to_FTP (n'oubliez pas de changer l'adresse FTP, le nom d'utilisateur et le mot de passe):

 /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!" 

L'activateur BackupDynList_from_FTP (/ sys sheduler) est exécuté au démarrage de la passerelle (démarrage):

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

Script BackupDynListFromFTP (n'oubliez pas de changer l'adresse FTP, le nom d'utilisateur et le mot de passe):

 :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 de serveur Convertmtik.bat - utilise le port SED de l'utilitaire Linux pour son travail, par exemple à partir de gnuwin32, qui doit être enregistré dans le chemin sur le serveur:

 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/fr477510/


All Articles