由于mikrotik官方的云备份绑定了设备SN,当设备损坏时将无法取回备份。
如果使用ROS发送邮件备份,在传输附件的时候数据是明文的,有被中间人截取到备份文件的可能性。
所以我做了这个ROSBAK项目,通过自动化云备份来解决这个问题。
ROSBAK项目已实现以下功能:
1.使用golang编写和mysql数据库完成 ftp 和认证功能。
2.使用L2TP+IPSEC进行通讯加密。(可选)
3.支持按FTP用户自动划分存储目录。
4.支持限制用户文件数量、存储容量。(超出限制将禁止新上传文件。)
5.仅支持英文数字常用符号的文件名上传,不支持的文件名将被禁止上传。
6.禁止新建文件夹,只允许在根目录使用。
7.支持按用户划分存储时间限制。(超出存储时间的文件将会被自动删除。)
8.自动记录用户最后登录时间。
8.支持自动清除长期没有登录过的用户数据。
9.添加自动注册接口,在脚本用即可完成用户创建。
10.对提交的参数进行正则式白名单过滤,防止注入。
11.自动回传用户状态信息到ROS日志。
已开放公测阶段。发现BUG可联系微信x9939781
注意事项:
如一个公网IP下有多个ROS设备需要使用ROSBAK,那么这种情况无法多台同时使用L2TP+IPSEC。需要这个公网IP下的ROS全部取消IPSEC,仅使用L2TP或者直接设置ROSBAK服务器的公网IP。
###新建一个L2TP###
/interface l2tp-client add connect-to=120.92.138.136 disabled=no max-mru=1380 max-mtu=1380 name=CLOUD_BAK user=ros6.com password=ros6.com
###新建一个计划任务###
/system scheduler add interval=1d name=bak on-event="/system script run bak" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/01/1970 start-time=[/system clock get time]
###以下内容保存到bak脚本等待计划任务调用###
###以下信息,请按需要填写,邮箱和手机号只在找回账号密码时会用到###
###若用户不存在,会自动注册,无需人工干预###
###定义自己的邮箱###
:global myemail "00000@gmail.com"
###定义自己的手机号###
:global myphone "13000000000"
###定义WEB服务器端口###
:global webport 2120
###定义FTP服务器IP地址(120.92.138.136/100.61.66.1)###
:global ftpip 100.61.66.1
###定义FTP服务器端口###
:global ftpport 2121
###定义FTP服务器用户名###
:global ftpu 00000
###定义FTP服务器密码###
:global ftpp 11111111
###定义备份文件密码(还原备份时输入的密码)###
:global backpw "12345678"
###节点名称(存储到FTP服务器上的文件名后缀)###
:global rname "test_node"
###开启服务状态日志(yes/no)###
:global recvlog "yes"
###开始工作勿改###
:do [/tool fetch url=("http://".$ftpip.":".$webport."/user=".$ftpu."&pass=".$ftpp."&email=".$myemail."&phone=".$myphone) keep-result=$recvlog dst-path=rosbak.log]
:delay 5s
:if ([/file find name="rosbak.log"] !="") do={:log warning [/file get [find name="rosbak.log"] contents];/file remove [find name="rosbak.log"]}
:global taa 0
:global nowmonth
:global allmonth jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec
:foreach lizi in=[$allmonth] do={
:if ([:pick [/system clock get date] 0 3]=$lizi) do={
:set nowmonth ($taa+1)}
:set taa ($taa + 1)}
:global aa ([:pick [/system clock get date] 7 11].$nowmonth.[:pick [/system clock get date] 4 6]);
###开始备份###
/sys backup save name=($aa."_auto") password=$backpw encryption=aes-sha256
:delay 5
###开始上传到FTP服务器###
:do [/tool fetch address=$ftpip port=$ftpport src-path=($aa."_auto.backup") user=$ftpu mode=ftp password=$ftpp dst-path=($aa."_".$rname."_auto.backup") upload=yes]
###删除备份文件###
:delay 10
/file remove [find name~"_auto.backup"]