<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="新建ROSBAK项目(已下架)">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">熊茂祥</a><br />时间:2020-04-26 14:09<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">ROS</a><br />标签:<a href="index.php?action=tags&amp;item=ros&amp;hash=">ros</a>, <a href="index.php?action=tags&amp;item=%E5%A4%87%E4%BB%BD&amp;hash=">备份</a>, <a href="index.php?action=tags&amp;item=%E8%87%AA%E5%8A%A8&amp;hash=">自动</a>, <a href="index.php?action=tags&amp;item=%E4%BA%91%E5%A4%87%E4%BB%BD&amp;hash=">云备份</a>, <a href="index.php?action=tags&amp;item=%E8%BF%9C%E7%A8%8B&amp;hash=">远程</a><br />内容:
由于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=&quot;/system script run bak&quot; 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 &quot;00000@gmail.com&quot;

###定义自己的手机号###

:global myphone &quot;13000000000&quot;

###定义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 &quot;12345678&quot;

###节点名称(存储到FTP服务器上的文件名后缀)###

:global rname &quot;test_node&quot;

###开启服务状态日志(yes/no)###

:global recvlog &quot;yes&quot;

###开始工作勿改###

:do [/tool fetch url=(&quot;http://&quot;.$ftpip.&quot;:&quot;.$webport.&quot;/user=&quot;.$ftpu.&quot;&amp;pass=&quot;.$ftpp.&quot;&amp;email=&quot;.$myemail.&quot;&amp;phone=&quot;.$myphone) keep-result=$recvlog dst-path=rosbak.log]

:delay 5s

:if ([/file find name=&quot;rosbak.log&quot;] !=&quot;&quot;) do={:log warning [/file get [find name=&quot;rosbak.log&quot;] contents];/file remove [find name=&quot;rosbak.log&quot;]}

: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.&quot;_auto&quot;) password=$backpw encryption=aes-sha256

:delay 5

###开始上传到FTP服务器###

:do [/tool fetch address=$ftpip port=$ftpport src-path=($aa.&quot;_auto.backup&quot;) user=$ftpu mode=ftp password=$ftpp dst-path=($aa.&quot;_&quot;.$rname.&quot;_auto.backup&quot;) upload=yes]

###删除备份文件###

:delay 10

/file remove [find name~&quot;_auto.backup&quot;]
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
