靶机的创建方法以及网络攻防训练系统

文档序号:25992039发布日期:2021-07-23 21:04阅读:349来源:国知局
靶机的创建方法以及网络攻防训练系统

本发明属于网络安全技术领域,具体涉及一种基于django框架和swarm的网络攻防训练系统。



背景技术:

近年来,计算机技术和互联网在高速发展,提供给人们便利的同时也带来了一系列安全问题,现在网络安全已经成为了计算机技术不可或缺的一部分,随着全球网络安全事件频发,网络安全已经上升到国家战略高度。当前形势需要大量的掌握安全技术的人才,各大高校都开设了网络安全相关专业。

随着网络安全技术的发展,也衍生出一系列的赛事,通过在比赛中模拟真实环境进行攻防来比拼安全技术,选手平时则会通过网络攻防训练平台进行演练,网络攻防训练平台能够为网络攻防教学提供学习和实验环境,是开展网络安全技术学习和实践的重要支撑。



技术实现要素:

本发明的目的是为了解决网络系统安全的问题,提出了一种基于django框架和swarm的网络攻防训练系统。

本发明的技术方案是:一种基于django框架和swarm的网络攻防训练系统,包括靶机管理模块、用户模块、比赛模块、题目模块、笔记模块、管理模块和日志模块;

用户模块、比赛模块、题目模块、笔记模块和管理模块作为网络攻防训练系统的前端;靶机管理模块和日志模块作为网络攻防训练系统的后端;

靶机管理模块用于创建动态靶机、销毁动态靶机、动态积分和搜索动态靶机;

用户模块用于用户注册、用户登录、修改用户信息和统计用户数据;

比赛模块包括创建比赛、自定义比赛、报名比赛、参加比赛和搜索比赛;

题目模块用于开启题目、关闭题目、查看题目信息、搜索题目和提交答案字符串;

笔记模块用于查看笔记、搜索笔记和留言讨论;

管理模块用于用户管理、题目管理、比赛管理、笔记管理、docker管理和日志管理;

日志模块用于记录用户训练情况、查看笔记情况和参加比赛情况。

进一步的,靶机的创建方法包括以下步骤:

s1:通过用户在网络攻防训练系统的前端发起开题请求,利用后端依次进行身份识别和调用对应的函数,并将对应的函数发送至消息队列;

s2:利用docker管理端监听消息队列,并获取消息队列接收的开题请求;

s3:根据开题请求,利用docker管理端调用swarm接口创建相应的docker容器;

s4:调用frp内网穿透服务端的接口进行内网穿透,将docker容器的端口映射至外网服务器的端口或子域名中,完成靶机创建;

s5:利用docker管理端将创建的靶机信息传回消息队列,并利用docker管理端监听消息队列,将消息队列接收的靶机信息传回网络攻防训练系统的前端,使用户界面显示靶机信息。

进一步地,步骤s1中,后端进行身份识别的具体过程为:依次判断用户是否登录、题目请求是否被打开和题目请求是否为容器题目。

进一步地,网络攻防训练系统采用分布式部署架构部署若干个后端,若干个后端通过异步框架的网页服务器进行反向代理;

异步框架的网页服务器用于接收用户在前端的http请求,将其转化为uwsgi请求,并将uwsgi请求传输至uwsgi服务器;通过uwsgi服务器将http请求转化为wsgi服务,并将wsgi服务传输至后端;根据后端的服务器性能,配置转发量百分比,将http请求的数据进行分流,并保存用户的会话信息和数据库缓存信息。

进一步地,网络攻防训练系统的后端采用非关系型数据库保存用户的会话信息和数据库缓存信息。

进一步地,网络攻防训练系统的后端采用fastdfs作为分布式文件存储服务器,其具体工作过程为:在文件上传时,利用网络攻防训练系统的后端调用fastdfs的跟踪服务器发起轮询,若轮询的结果为文件已存在,则文件不需要进行保存,否则将文件存储到fastdfs的存储服务器中,并同时返回文件标识符;在用户需要存储的文件时,通过file_id向storage服务发起查询。

本发明的有益效果是:

(1)本发明构建了一个云平台训练环境,能够为网络攻防演练、渗透测试、ctf训练以及防护技术研究提供综合模拟环境,避免对真实网络的影响和危害,可用于政府、企业以及高校等行业的网络安全实验室。

(2)本网络攻防训练系统的容器类题目采用动态靶机进行构建,只有在用户需要做题时候动态创建一个专属题目环境,做完题即关闭,减少了资源浪费的同时,每个用户创建的题目环境独立,不会相互影响。

(3)本网络攻防训练系统的靶机服务器运行在内网环境,通过frp服务将swarm创建的容器进行内网穿透转发端口出来,靶机不通外网,减少了安全隐患的同时,对于搭建分布式靶机服务可以转发在一个域名/ip上。

附图说明

图1为网络攻防训练系统的结构图;

图2为本发明中开启创建靶机流程图;

图3为本发明的分布式部署示意图;

图4为本发明的缓存示意图;

图5为本发明的fastdfs示意图;

图6为本发明的swarm网络图。

具体实施方式

下面结合附图对本发明的实施例作进一步的说明。

在描述本发明的具体实施例之前,为使本发明的方案更加清楚完整,首先对本发明中出现的缩略语和关键术语定义进行说明:

morrison:前端项目名称,即展现给用户的界面,网站显示在浏览器的部分。

balderich:后段项目名称,即处理用户的事件程序,运行在服务器上。

anna:docker管理端名称,即处理docker容器请求,并返回相应的内容,运行在内网服务器上。

frpclient:frp内网穿透客户端,和anna运行在一起,用来将本地网络的端口转发至frpserve上。

frpserve:frp内网穿透服务端,用来接收frpclient的转发请求,将内网服务器网络端口转发到frpserve的服务器端口上,运行在外网服务器上。

消息队列:是一种能够进行异步的通信工具,a程序可以将消息发送到消息队列中,b程序可以从消息队列中取得消息,而整个步骤之间ab不需要进行通信,a不用关心b什么时候取数据,b也不关心是谁发送的请求。主要目的是为了将ab程序解耦,其次即使b服务宕了消息也依然在消息队列中,可以被其他例如c程序给取走继续工作。

docker:一种虚拟化技术,使得能够在一个操作系统中同时运行其他操作系统。

swarm:一种docker集群管理技术,用于管理docker集群。

nginx:一种异步框架的网页服务器,常用作反向代理,负载平衡。

uwsgi:uwsgi是一个web服务器,它实现了wsgi协议、uwsgi、http等协议。

serve:即网站服务器后端balderich。

redis:一种非关系型数据库,常用来保存缓存信息等。

anna:docker管理端。

fastdfs:一个开源的高性能分布式文件系统,包含tracker跟踪服务器和storage存储服务器。

如图1所示,本发明提供了一种基于django框架和swarm的网络攻防训练系统,包括靶机管理模块、用户模块、比赛模块、题目模块、笔记模块、管理模块和日志模块;

用户模块、比赛模块、题目模块、笔记模块和管理模块作为网络攻防训练系统的前端;靶机管理模块和日志模块作为网络攻防训练系统的后端;

用户模块、比赛模块、题目模块、笔记模块和管理模块所描述的功能即为前端所展示给用户的功能界面描述,同时后端有相应接口处理这些功能;靶机管理模块和日志模块为后端功能接口,前端界面对应管理模块中的docker管理功能界面和日志管理功能界面。

靶机管理模块用于创建动态靶机、销毁动态靶机、动态积分和搜索动态靶机;

用户模块用于用户注册、用户登录、修改用户信息和统计用户数据;

比赛模块包括创建比赛、自定义比赛、报名比赛、参加比赛和搜索比赛;

题目模块用于开启题目、关闭题目、查看题目信息、搜索题目和提交答案字符串;

笔记模块用于查看笔记、搜索笔记和留言讨论;

管理模块用于用户管理、题目管理、比赛管理、笔记管理、docker管理和日志管理;

日志模块用于记录用户训练情况、查看笔记情况和参加比赛情况。

平台采用b/s架构模式对整个训练平台进行统一管理和调度。

在本发明实施例中,靶机管理模块的靶机开启方法包括以下步骤:

s1:通过用户在网络攻防训练系统的前端发起开题请求,利用后端依次进行身份识别和调用对应的函数,并将对应的函数发送至消息队列;

s2:利用docker管理端监听消息队列,并获取消息队列接收的开题请求;

s3:根据开题请求,利用docker管理端调用swarm接口创建相应的docker容器;

s4:调用frp内网穿透服务端的接口进行内网穿透,将docker容器的端口映射至外网服务器的端口或子域名中,完成靶机创建;

s5:利用docker管理端将创建的靶机信息传回消息队列,并利用docker管理端监听消息队列,将消息队列接收的靶机信息传回网络攻防训练系统的前端,使用户界面显示靶机信息。

如图2所示的靶机开启示意图,morrison是本发明的前端项目,即云平台的界面部分,用户操作全部在此项目上,通过http协议和后端进行异步通信。balderich即本发明的后端部分,负责接收前端的请求操作信息,去查找/更新所需要的信息。通过和其他中间件,例如redis、mysql和fastdfs进行交互。anna是本发明的docker容器管理项目,通过swarm和frp提供的接口操作docker容器的创建、销毁、延时和内网穿透。前端只和后端进行通信,后端和容器管理端只使用消息队列进行异步通信,各项目之间互相解耦。方便后期维护及二次开发。

当用户在前端发起打开题目请求时,后端会调用相应的函数往消息队列中发送一条开启靶机的信息,balderich收到这个请求之后会做身份识别和其他处理事项,首先会判断用户是否登陆,然后判断题目是否能够被打开,是否是一道容器题目,当验证无误后将会调用相应的函数,即图中的调用接口函数将请求发送到消息队列中,anna端会一直监听消息队列,当有消息时,就会获取这个请求,获取请求之后会对请求内容做判断,例如是要开启容器还是关闭容器等。当容器管理端监听到此条信息会调用相应的接口创建对应的题目容器,同时会调用frpclient容器中的api,将新创建的容器对应端口转发给frpserve服务器,即将内网中容器端口转发到外部,同时会将容器信息(id、外部访问地址、域等信息)发送到消息队列中,由后端收到本条信息后发送回前端显示给用户。对于此处的开题步骤,anna端会调用相应的swarm接口创建相应的docker容器,即题目靶机,当创建完成之后,则会调用frpclient端的接口进行内网穿透,即把内网中的题目靶机端口映射到外网服务器的端口或子域名中。使得用户能够通过地址访问到这一台靶机。到这里整个创建流程已经结束,靶机创建,之后anna会将靶机信息传回消息队列,同样balderich监听到这个消息之后就将靶机的相应消息传给morrison界面,用户界面即显示靶机信息。

把balderich程序和anna程序分开放在不同的服务器中,balderich主要负责处理逻辑业务,对于anna则只需要一个程序进行管理即可,如果每个balderich的内部都同时负责一个anna程序,这样在分布式部署的时候就是有多少个逻辑业务处理程序就有多少个anna程序,但实际使用中根本不需要这样,会造成资源浪费且不好集中管理题目靶机。分开部署,中间使用消息队列通信,这样可以多个后端,只运行一个anna程序即可。

在本发明实施例中,把anna程序运行在内网服务器中,然后使用内网穿透的方式进行转发,而不是直接运行在外部服务器中使得靶机可以直接被外界访问。基于两点考虑:第一,ip资源以及网络资源很宝贵,如果将anna运行在外部服务器中,每一个节点都需要一个外网ip,而且需要相应的网络带宽,而运行在内网服务器中,则只需要少量的上行带宽即可,其他带宽资源可以选择配送给balderich;第二,安全考虑多个ip暴露在外网下,以及平台提供的就是安全环境训练,每个靶机都是一些包含安全漏洞的题目,则可能会被进行恶意利用。

在本发明实施例中,步骤s1中,后端进行身份识别的具体过程为:依次判断用户是否登录、题目请求是否被打开和题目请求是否为容器题目。

在本发明实施例中,网络攻防训练系统采用分布式部署架构部署若干个后端,若干个后端通过异步框架的网页服务器进行反向代理;

异步框架的网页服务器用于接收用户在前端的http请求(http请求是系统对请求负载分流的处理,所有的前端请求都是http请求,即超文本传输协议,开题请求是其中一个),将其转化为uwsgi请求,并将uwsgi请求传输至uwsgi服务器;通过uwsgi服务器将http请求转化为wsgi服务,并将wsgi服务传输至后端;根据后端的服务器性能,配置转发量百分比,将http请求的数据进行分流,并保存用户的会话信息和数据库缓存信息。

如图3所示,后端采用了分布式设计思想,采用redis服务器保存缓存及回话,fastdfs存储文件,可以进行分布式部署,同时不需要进行分布式部署的也保留了单机部署模式,只需要修改配置文件即可。多台后端服务通过nginx进行反向代理,前端只需要往nginx进行请求,不需要关心具体哪个服务进行了处理。

在本发明实施例中,网络攻防训练系统的后端采用非关系型数据库保存用户的会话信息和数据库缓存信息。

后端通过同一个消息队列和容器管理端进行通信,也不需要关心最终谁创建了容器服务。其好处是可以将前端搭建在网络带宽较大的服务器中,提高用户访问速度,后端可以部署多台,进行负载均衡,减少响应时间。同时靶机端可以部署在内网环境中,和消息队列通信只需要极小的带宽,同时可以多台部署以支撑大量容器创建需求。

如图4所示的缓存示意图,后端进行查询后可以将结果保存在redis服务器中,对于一部分冷数据可以提高查询效率,同时在平台开发的设计上,也将冷热数据存储在不同的数据表中,方便进行缓存处理。如图5所示的数据库集群示意图,多个服务器公用一个redis服务器进行读写数据,达到数据共享。

同时对于用户的docker管理请求,将会由serve服务器发送到消息队列中,消息队列同样由多个anna服务器反向监听,可以将靶机建立在不同的服务器上,做到负载均衡,同时基于反向代理的配置,可以动态的进行加减配置。

例如需要增加一台后端服务则直接增加后端服务器,然后在uwsgi配置中加上这台服务器的地址即可。

对于anna端的分布式同理,将服务器接入消息队列即可。

在本发明实施例中,网络攻防训练系统的后端采用fastdfs作为分布式文件存储服务器,其具体工作过程为:在文件上传时,利用网络攻防训练系统的后端调用fastdfs的跟踪服务器发起轮询,若轮询的结果为文件已存在,则文件不需要进行保存,否则将文件存储到fastdfs的存储服务器中,并同时返回文件标识符;在用户需要存储的文件时,通过file_id向storage服务发起查询。

如图5所示的fastdfs示意图,主要是为了处理分布式部署中文件存储问题,分布式部署下不能将文件存储在一台服务器中,不然会产生文件同步问题,而将文件同步到每台服务器中又是对资源的浪费,所以这里采用高效的fastdfs处理此问题,当有文件上传需求时,后端调用fastdfs中跟踪服务器进行操作,跟踪服务器会发起轮询,如果文件已经存在则不需要再次保存,否则则存储本文件到存储服务器中。同时返回文件标识符,当需要用到文件时,通过文件标识符直接向存储服务器发起查询,提高效率。同时存储服务器可以部署多台,通过nginx进行转发。将文件存储在fastdfs中,多个服务器直接向fastdfs服务器进行请求,同时内部保留了接口,可以选择不使用fastdfs,使用fastdfs,使用其他oss存储服务器等。

如图6所示,为swarm中的网络图,管理节点用来管理docker集群,和anna运行在同一服务器上,工作节点负责执行管理节点下发的任务,工作节点可以分别运行在不同的服务器中,所有工作节点创建的容器都接入我们创建的anna_frp_containers网络。即内网网络,同时创建一个frp客户端的容器,这个容器处于两个网络中,既属于anna_frp_containers网络,也属于anna_frp网络,其中anna_frp能够接通外网,这也就是为什么frpclient能够进行内网转发,因为它能够通过anna_frp_containers网络和题目靶机进行通信,又能通过anna_frp网络和外部服务器的frp服务端进行通信。

本发明的工作原理及过程为:网络攻防训练系统的前端项目,即云平台的界面部分,用户操作全部在此项目上,通过http协议和后端进行异步通信。网络攻防训练系统的后端部分,负责接收前端的请求操作信息,去查找/更新所需要的信息。通过和其他中间件,例如redis、mysql、fastdfs进行交互。前端只和后端进行通信,后端和容器管理端只使用消息队列进行异步通信,各项目之间互相解耦。方便后期维护及二次开发。

本发明的有益效果为:

(1)本发明构建了一个云平台训练环境,能够为网络攻防演练、渗透测试、ctf训练以及防护技术研究提供综合模拟环境,避免对真实网络的影响和危害,可用于政府、企业以及高校等行业的网络安全实验室。

(2)本网络攻防训练系统的容器类题目采用动态靶机进行构建,只有在用户需要做题时候动态创建一个专属题目环境,做完题即关闭,减少了资源浪费的同时,每个用户创建的题目环境独立,不会相互影响。

(3)本网络攻防训练系统的靶机服务器运行在内网环境,通过frp服务将swarm创建的容器进行内网穿透转发端口出来,靶机不通外网,减少了安全隐患的同时,对于搭建分布式靶机服务可以转发在一个域名/ip上。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1