RouterOS en Mikrotik no recuerda los elementos dinámicos de las listas de direcciones, y en caso de reinicio o pérdida de energía, solo permanecerán elementos estáticos en las listas. Por ejemplo, tiene una regla que atrapa a los spammers o escáneres de puertos y prohíbe sus direcciones IP durante un mes. Por lo general, estas direcciones se guardan como entradas dinámicas en las listas, pero no se guardan durante el reinicio, lo que significa que es fácil perder la base de datos "rábano", recopilada durante unos meses de funcionamiento continuo de la puerta de enlace.
Para que este esquema funcione, necesita un servidor FTP (lo tengo en Windows, pero el archivo por lotes se rehace fácilmente para nixes) con una cuenta que tiene permisos de lectura / escritura. El mecanismo se basa en la interacción de los siguientes elementos: los scripts backupDynList_to_FTP y BackupDynListFromFTP en la puerta de enlace, y el script convertmtik.bat en el servidor FTP. Se necesita un servidor de terceros para descargar la memoria interna de Mikrotik (las listas pueden ser bastante grandes y la memoria no volátil no es grande para todos) y para procesar el archivo con medios más potentes para trabajar con texto que el lenguaje de script incorporado que tiene mikrotik. La llamada de función DynListExport se utiliza para omitir el límite del sistema en el tamaño de la lista. La necesidad de convertir la lista se debe al hecho de que si el mismo elemento (por ejemplo, un registro estático) ya está presente en la base de datos, se produce un error durante la importación y la importación se detiene. Para evitar esto, cada vez que se agrega un registro estático, el controlador de errores se restablece y, en caso de una coincidencia, el registro simplemente no se agrega y el proceso de importación va más allá.
El script BackupDynList_to_FTP se ejecuta cada hora (00:00), recopila todos los datos sobre registros dinámicos (que tienen al menos media hora de vida) en todas las listas en el archivo iplist_dyn.src y envía este archivo a ftp. En el servidor, cada hora con un turno de media hora desde el primer script (00:30), se ejecuta el archivo por lotes convertmtik.bat, que convierte el script original recibido de la puerta de enlace en un script que está protegido contra errores de coincidencia y lo guarda con el nombre iplist_dyn_done.src
Ahora, en caso de caída o reinicio de la puerta de enlace, en el momento del lanzamiento, los datos sobre registros dinámicos desaparecen automáticamente, pero 60 segundos después del lanzamiento, el script BackupDynListFromFTP descarga iplist_dyn_done.src desde FTP y lo inicia para ejecutar, restaurando las listas.
El activador Hourly_Dynlist_Backup_on_FTP (/ sys sheduler) se ejecuta al comienzo de cada hora:
/system script run BackupDynList_to_FTP
Script BackupDynList_to_FTP (no olvide cambiar la dirección FTP, el nombre de usuario y la contraseña):
/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!"
El Activador BackupDynList_from_FTP (/ sys sheduler) se ejecuta en el momento en que se inicia la puerta de enlace (inicio):
{:delay 60s}; /system script run BackupDynListFromFTP
Script BackupDynListFromFTP (no olvide cambiar la dirección FTP, el nombre de usuario y la contraseña):
: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 del servidor Convertmtik.bat: utiliza el puerto SED de la utilidad Linux para su trabajo, por ejemplo, desde gnuwin32, que debe registrarse en la ruta del 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