Pencadangan otomatis dan pemulihan daftar alamat dinamis di Mikrotik

RouterOS di Mikrotik tidak mengingat elemen dinamis dari daftar alamat, dan jika terjadi reboot atau kehilangan daya, hanya elemen statis yang akan tetap ada dalam daftar. Misalnya, Anda memiliki aturan yang menangkap spammer atau pemindai port dan melarang alamat IP mereka selama sebulan. Biasanya, alamat tersebut disimpan sebagai entri dinamis dalam daftar, tetapi mereka tidak disimpan selama reboot, yang berarti mudah kehilangan basis data "lobak", yang dikumpulkan untuk beberapa bulan operasi gerbang berkelanjutan.

Agar skema ini berfungsi, Anda memerlukan server FTP (saya memilikinya Windows, tetapi file batch mudah diperbaiki untuk nixes) dengan akun yang memiliki izin baca / tulis. Mekanisme ini didasarkan pada interaksi elemen-elemen berikut: skrip backupDynList_to_FTP dan BackupDynListFromFTP di gateway, dan skrip convertmtik.bat di server FTP. Server pihak ketiga diperlukan untuk mengeluarkan memori internal Mikrotik (daftar bisa cukup besar, dan memori non-volatil tidak besar untuk semua orang) dan untuk memproses file dengan cara yang lebih kuat untuk bekerja dengan teks daripada bahasa skrip bawaan yang dimiliki mikrotik. Panggilan fungsi DynListExport digunakan untuk melewati batas sistem pada ukuran daftar. Kebutuhan untuk mengonversi daftar adalah karena fakta bahwa jika elemen yang sama (katakanlah, catatan statis) sudah ada dalam database, maka kesalahan terjadi selama impor dan impor dihentikan. Untuk menghindarinya, setiap kali catatan statis ditambahkan, penangan kesalahan diatur ulang dan jika ada kecocokan, catatan sama sekali tidak ditambahkan, dan proses impor berjalan lebih jauh.

Skrip BackupDynList_to_FTP dijalankan setiap jam (00:00), ia mengumpulkan semua data tentang catatan dinamis (yang memiliki setidaknya setengah jam untuk hidup) di semua daftar ke dalam file iplist_dyn.src dan mengirimkan file ini ke ftp. Di server, setiap jam dengan setengah jam shift dari skrip pertama (00:30), file batch convertmtik.bat dijalankan, yang mengubah skrip asli yang diterima dari gateway menjadi skrip yang dilindungi dari kesalahan kebetulan dan menyimpannya dengan nama iplist_dyn_done.src

Sekarang, dalam hal jatuh atau reboot gateway, pada saat peluncuran, data tentang catatan dinamis secara otomatis menghilang, tetapi 60 detik setelah peluncuran, skrip BackupDynListFromFTP mengunduh iplist_dyn_done.src dari FTP dan mulai menjalankannya, mengembalikan daftar.

Aktivator Hourly_Dynlist_Backup_on_FTP (/ sys sheduler) dijalankan pada awal setiap jam:

/system script run BackupDynList_to_FTP 

Script BackupDynList_to_FTP (jangan lupa untuk mengubah alamat FTP, nama pengguna, dan kata sandi):

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

Activator BackupDynList_from_FTP (/ sys sheduler) dijalankan pada saat gateway dimulai (startup):

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

Script BackupDynListFromFTP (jangan lupa untuk mengubah alamat FTP, nama pengguna, dan kata sandi):

 :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 server Convertmtik.bat - menggunakan port SED dari utilitas Linux untuk pekerjaannya, misalnya dari gnuwin32, yang harus didaftarkan di lintasan di server:

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


All Articles