nginx鉴权网关2020年8月25日第4卷第16期现代信息科技
Modern Information Technology Aug.2020
Vol.4 No.16
05
2020.8收稿日期:2020-07-03基金项目:江苏高校哲学社会科学研究一般项目(2019SJA0342)Nginx-rtmp-module流媒体服务器鉴权应用研究
林旻
(南京审计大学 实验中心(教育技术中心),江苏 南京 211815)
摘 要:随着信息技术和通信技术的不断发展,直播教育成为高等教育中不可或缺的一环,文章是在南京审计大学实验中
心原有的基于开源架构Nginx-rtmp-module 流媒体服务器的基础上,通过on_publish 和on_play 两个HTTP 回调通知模块来调用FLASK 编写的验证页面以达到流媒体服务器的推拉流鉴权功能的应用研究,解决了原Nginx-rtmp-module 的信息安全隐患,提高了直播教学平台的整体安全性。
关键词:Nginx ;rtmp-module ;Flask ;流媒体服务器;鉴权
中图分类号:TP274;TN919.8 文献标识码:A 文章编号:2096-4706(2020)16-0005-04
Research on Authentication Application of Nginx-rtmp-module
Streaming Media Server
LIN Min
(Experimental Center (Educational Technology Center ),Nanjing Audit University ,Nanjing 211815,China )
Abstract :With the continuous development of information technology and communication technology ,live education has gradually become an indispensable part of higher education. This paper is based on the original Nginx-rtmp-module streaming media server based on the open source architecture of the Experimental Center of Nanjing Audit University. Through on_publish and on_play two HTTP callback notification modules to call the verification page written by FLASK to achieve the application research of the streaming media server ’s push-pull streaming authentication function ,solves the info
rmation security hidden danger of the original Nginx-rtmp-module ,and improves the overall security of the live teaching platform.
Keywords :Nginx ;rtmp-module ;Flask ;streaming media server ;authentication
0 引 言随着信息技术和5G 通信技术的高速发展,各类在线课程、直播课程成为解决我国有限的优质教育资源和巨大的教育需求间矛盾的一个重要方法。南京审计大学实验中心积极响应教育部的号召,紧跟高等教育技术和信息技术的发展步伐,很早就研创出一套基于开源架构Nginx-rtmp-module 的课程直播平台,并且在使用过程中积累了丰富的直播教学经验。但是,随着直播教学的不断发展,直播服务器和直播视频流的信息安全问题也成为了校园信息安全的一个重要组成部分。如何防止课程教师以外人员通过流媒体服务器进行直播;如何防止该课程学生以外人员观看课程、盗取直播链接,已经成为直播教学的重要信息安全问题。本文是以南京审计大学实验中心正在大力开展的直播教学的实际管理目标为出发点,对在原有的基于开源架构Nginx-rtmp-module 的流媒体服务器上增加鉴权功能的应用研究。1 研究现状本校原有的直播课程平台是由本校实验中心基于开源
框架Nginx-rtmp-module 进行自主研创的直播课程平台,具有灵活、稳定和定制化等特点。但是因为开源框架Nginx-rtmp-module 本身没有权限管理功能,理论上任何人都可以通过该服务器进行推拉流操作以达到推送和播放直播视频的目的,这种情况会造成下文所述的三个信息安全问题。(1)非法推流:
因为Nginx-rtmp-module 本身没有权限功能,所以任何用户都可以对流媒体服务器进行推拉流操作,不仅会造成非法推流,还会占用服务器资源和网络带宽。
(2)非法播放:有的课程如SPOC ,是小规模且限制性的,从教学管理的角度需要对观看的学生进行限制,但如果流媒体服务器没有对推拉流操作进行权限认证,那么流媒体服务器中的视频流会被无权限用户播放或盗链。(3)挤占信道:因为Nginx-rtmp-module 推拉流地址格式的特点,很容易便可从拉流地址推算出推流地址,所以教
师的直播推流信道有被非法用户挤占的风险,容易造成课程信道被恶意占用和被传播违法违纪内容的风险。
综上所述,Nginx-rtmp-module 本身缺少权限验证功能
的问题会给直播平台带来很大的信息安全隐患,所以需要对Nginx-rtmp-module 增加鉴权功能,对流媒体服务器的推流和拉流操作进行权限控制。
DOI:10.19850/jki.2096-4706.2020.16.002
第16期现代信息科技062020.8
2 技术介绍2.1 Nginx-rtmp-module Nginx-rtmp-module 是基于Nginx 的开源流媒体模块。Nginx 是基于BSD 开源协议的高性能Web 服务器平台,具有占用资源少、稳定性高、数据处理量大等特点。而rtmp-module 是Github 开源软件平台的著名流媒体平台,支持RTMP 和HLS 流媒体协议,能够实现视频流的点播、直播、存储和转发等功能。2.2 推流推流是指将采集到的视频流传输到流媒体服务器的过程,在直播课程平台中是指教师通过直播设备或者OBS 等直播软件将课程视频流推送到Nginx-rtmp-module 流媒体服务器的过程。2.
3 拉流拉流是指从流媒体服务器或视频设备拉取视频流的过程,在直播课程平台中是指课程的呈现平台(Web 端、移动端或VLC 播放器)从流媒体服务器拉取教师推送的直播视频流并播放给学生进行学习的过程。2.
4 鉴权鉴权是指系统验证访问者是否拥有访问系统的权利的操作过程,直播课程平台中的鉴权可以分为推流鉴权和拉流鉴权两部分,推流鉴权是指用户向流媒体服务器推送视频流时,服务器需要对用户进行权限验证,只有通过验证的用户才有权限进行推流操作;拉流鉴权也叫播放鉴权,即是用户
向流媒体服务器申请拉取视频流,服务器对用户的权限进行验证,通过验证才允许用户进行拉流操作。2.5 Flask Flask 是Python 基本框架之一,主要用于Web 开发,具有轻便、灵活、自由性好和试错成本低等特点,本文研究的Nginx-rtmp-module 流媒体服务器的鉴权功能即是用Flask 进行开发。2.6 MySQ
L MySQL 是开源的关系型数据库管理系统,具有轻量、灵活、易于部署等特点,广泛用于各种小型开发项目中,在本文所研究的Nginx-rtmp-module 流媒体服务器的鉴权功能中所使用的数据库即是采用的MySQL 数据库。
3 设计
本文关于Nginx-rtmp-module 流媒体服务器的鉴权功能基于on_publish 和on_play 两个控制事件模块进行设计和开发。当用户向流媒体服务器推流的时候通过on_publish 跳转到权限验证页面,然后服务器根据页面返回的状态码判断用户是否有权限进行推流;同样当用户向流媒体服务器申请拉流播放时会通过on_play 跳转到拉流权限验证页面,然后
服务器根据页面返回的状态码判断用户名是否有权限进行拉流,两个模块具体功能为:
(1)on_publish :是Nginx-rtmp-module 的Notify 通知模块之一,功能主要为设置HTTP 回调,当用户申请推流时会发起一个HTTP 回调,然后根据返回的状态码进行相应的
指令操作,语法格式为“on_publish url;”。
(2)on_play :是Nginx-rtmp-module 的Notify 通知模块之一,功能主要为设置HTTP 回调,当用户分发播放命令时会发起一个HTTP 异步请求,同时该命令被挂起并等状返回的状态码,再根据返回的状态
码进行相应的指令操作,语
法格式为“on_play url;”。
根据推拉流的鉴权需要,on_publish 和on_play 的触发阶段、状态码和对应的操作设计如表1所示。表1 on_play 和on_publish 回调模块名称触发阶段描述状态码描述on_play start 针对播放的生命周期200允许播放403不允许播放
on_publish start 针对推流的生命周期200允许推流403不允许推流3.1 权限验证URL
因为Nginx-rtmp-module 流媒体服务器默认没有视频流推拉的权限验证功能,所以其默认的推拉流地址没有权限认
证的字段进行鉴权操作,所以我们需要给流媒体服务器的推拉流鉴权功能设计含有认证字段的推拉流地址,因为on_publish 和on_play 进行的是HTTP 回调,这里采用POST 方法进行设计,具体的URL 如表2所示。
类型鉴权IP 应用名称流名称用户名密码URL
推流无172.24.200.46lab_live test ——rtmp://172.24.200.46:1935/lab_live/linmin 有linmin test rtmp://172.24.200.46:1935/lab_live/
linmin?user=linmin&pwd=test
拉流无——rtmp://172.24.200.46:1935/lab_live/linmin 有linmin linmin rtmp://172.24.200.46:1935/lab_live/
linmin?user=linmin&pwd=test
表2 权限验证URL
3.2 用户表
表3 用户表字段名类型参数id int (20)AUTO_INCREMENT 、PRIMARY KEY user_name varchar (20)NOT NULL
user_password varchar (20)NOT NULL 在正常的直播教学过程中,用户的身份信息应当保存在
数据库中,本研究采用开源数据库MySQL 存储用户的身份
第16期07
2020.8信息,具体数据表如表3所示。4 推流鉴权根据设计,推流鉴权功能的实现主要分为两部分,一
部分是在RTMP 里配置on_publish 的HTTP 回调参数,一部分是编写被调用的认证页面,下文为具体实现步骤。4.1 Nginx-rtmp-module 配置在f 进行on_publish 的配置,调用本地的lab_
live 目录下的push 页面,具体代码为:rtmp { server { listen 1935; #监听的端口 chunk_size 4096; #设置流整合大小 application lablive { #rtmp 推流请求路径 live on; #开启直播 hls on; #开启HLS 视频流 hls_path /usr/local/lablive/hlsFile; #设置HLS 切片文件保存路径 hls_fragment 5s; #设置HLS 分段长度 hls_playlist_length 10s; #设置HLS 播放列表长度 on_publish localhost:8080/lab_live/push; } }} 4.2 推流验证当on_publish 调用了push 页后,需要用POST 方法采集URL 里的身份信息并和数据库里的用户身份信息进行验证,根据验证结果返回相应的状态码,核心代码为:import pymysql #采用数据库进行验证from flask import Flask, request, Response app = Flask(__name__)@ute('/lab_live/push',methods=['POST'])#采用POST 方法def pull (): # 打开数据库连接 db = t("ip ","用户名","密码","数据库名称" )#这里的用户名、密码是mysql 的数据库用户名和密码 cursor = db.cursor() # 使用 cursor() 方法创建一个游标对象 cursor username = request.form['user']#从url 获取用户名 password = request.form['pwd'] #从url 获取密码 print(username, '\t', password) # SQL 查询语句 sql = "select * from user where user_name = '%s' and user_password = '%s' " % (username, password) # 使用 execute() 方法执行 SQL 查询 ret = ute(sql) if ret:
return Response(response='success',status=200)#返回
200状态码
else:
return Response(status=403)#返回403状态码 #Flask.abort(404)
return password
5 拉流鉴权
根据设计,拉流鉴权功能的实现主要分为两部分,一部分是在RTMP 里配置on_play 的HTTP 回调参数,一部分是编写被调用的认证页面,下文为具体实现步骤。
5.1 Nginx-rtmp-module 配置
在f 进行on_play 的配置,调用本地的lab_live 目录下的pull 页面,具体代码为:
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4096; #设置流整合大小
application lablive { #rtmp 推流请求路径 live on; #开启直播
hls on; #开启HLS 视频流
hls_path /usr/local/lablive/hlsFile; #设置HLS 切片文件保存路径
hls_fragment 5s; #设置HLS 分段长度
hls_playlist_length 10s; #设置HLS 播放列表长度
on_play localhost:8080/lab_live/pull; }
}
}
5.2 拉流验证
当on_play 调用了pull 页后,需要用POST 方法采集URL 里的身份信息并和数据库里的用户身份信息进行验证,根据验证结果返回相应的状态码,核心代码为:
import pymysql
#采用数据库进行验证
from flask import Flask, request, Response
app = Flask(__name__)
@ute('/lab_live/pull',methods=['POST'])
#采用POST 方法
def auth():
# 打开数据库连接
db = t("ip 地址","用户名","密码","数据库名称" )
#这里的用户名、密码是mysql 的数据库用户名和密码cursor = db.cursor()
# 使用 cursor() 方法创建一个游标对象 cursor
username = request.form['user']#从url 后获取的数据 password = request.form['pwd'](下转12页)
林旻:Nginx-rtmp-module 流媒体服务器鉴权应用研究
第16期现代信息科技
122020.8
如图5所示,PCL-SOF-CD 的召回率为0.81,Bayes Net 为0.71,SMO 为0.68,LWL 为0.66,Adaboost.M 1为0.63,IBK 为0.74,综上可见PCL-SOF-CD 的召回率最高。0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9召回率IBK Adaboost.M 1
LWL SMO Bayes Net PCL-SOF-CD 对比方法图5 召回率对比结果如图6所示,PCL-SOF-CD 的F 1-Score 为0.84,Bayes Net 为0.75,SMO 为0.70,LWL 为0.73,Adaboost.M 1为0.65,IBK 为0.75,综上可见PCL-SOF-CD 的F 1-Score 最高。根据对比结果可以得知,PCL-SOF-CD 在精确率、召回率和F 1-Score 三个指标上都达到了较好的预测性能。F 1-Score IBK Adaboost.M 1LWL SMO
Bayes Net PCL-SOF-CD 对比方法0.00 0.20 0.40 0.60 0.80 1.00图6 F1-Score
对比结果4 结 论本文提出一种优化拟合方法,定义了该方法的3种运动方式:散漫随机运动、原地避让运动和域内聚运动。基于优化拟合方法计算了关键特征集合,并结合临床数据采用判别分析实现了lncRNA 与疾病的关联预测,提出了一种基于优化拟合及临床数据的癌症lncRNA 预测方法,实验表明该方法具有很高的推广价值。
参考文献:
[1] WASHIETL S ,KELLIS M ,GARBER M. Evolutionary
dynamics and tissue specificity of human long noncoding RNAs in six
mammals [J].Genome Research ,2014,24(4):616-628.[2] GUTTMAN M ,RINN J L. Modular regulatory principles of
large non-coding RNAs [J].Nature ,2012,482(7385):339-346.[3] HUARTE M. The emerging role of lncRNAs in cancer [J].
Nature Medicine ,2015,21(11):1253-1261.
[4] LI J ,XUAN Z Y ,LIU C N. Long Non-Coding RNAs and
Complex Human Diseases [J].IJMS ,2013,14(9):18790-18808.
[5] CHEN X ,SUN Y Z ,GUAN N N ,et al. Computational models for lncRNA function prediction and functional similarity calculation [J].Briefings in functional genomics ,2019,18(1):58-82.
[6] JANG S Y ,KIM G ,PARK S Y ,et al. Clinical significance
of lncRNA-ATB expression in human hepatocellular carcinoma [J].Oncotarget ,2017,8(45):78588-78597.
[7] MIAO Y ,SUI J ,XU S Y ,et al. Comprehensive analysis of a novel four-lncRNA signature as a prognostic biomarker for human gastric cancer [J].Oncotarget ,2017,8(43):75007-75024.[8] MO X B ,WU L F ,ZHU X W ,et al. Identification and
evaluation of lncRNA and mRNA integrative modules in human
peripheral blood mononuclear cells [J].Epigenomics ,2017,9(7):
943-954.
[9] ZHANG Y L ,LI X B ,HOU Y X ,et al. The lncRNA XIST
exhibits oncogenic properties via regulation of miR-449a and Bcl-2 in
human non-small cell lung cancer [J].Acta Pharmacologica Sinica ,2017,38(3):371-381.
作者简介:王波(1980—),男,汉族,黑龙江齐齐哈尔人,副教授,博士生,研究方向:与复杂疾病关联的lncRNA 预测技术。 print(username, '\t', password) # SQL 查询语句 sql = "select * from user where user_name = '%s' and user_password = '%s' " % (username, password) # 使用 execute() 方法执行 SQL 查询 ret = ute(sql) if ret: return Response(response='success',status=200)#返回200状态码 else: return Response(status=403)#返回403状态码 #Flask.abort(404) return password 6 结 论随着直播教学在国内高校的不断推广,直播教学的信息安全问题逐渐成为校园信息安全重要的一环,本文通过对Nginx-rtmp-module 流媒体服务器鉴权功能的应用研究,为
本校原有的流媒体直播服务器的推拉流操作增加了权限认证功能,降低了直播教学的信息安全隐患。但本文中所研究的鉴权功能还是基于单个流媒体服务器的研究,随着直播教学模式的深入发展,单个流媒体服务器无法满足正常的教学活
动需求,必然会向流媒体集方向发展,而在集上实现鉴权功能肯定不是当前单个服务器鉴权功能的简单叠加,需要考虑和集中调度服务器的深度协作,这将是本研究后续的研究方向。
参考文献:
[1] 郑东升.高可用性互联网直播视频推流系统的构建 [J].中国有线电视,2020(7):763-766.
[2] 马艾田,耿立宏,王闰强,等.基于Nginx 的科普云直播系统研究与实现 [J].信息技术与网络安全,2018,37(8):54-57+76.[3] 胡国强,周兆永,信朝霞.基于SRS 的开源直播系统的设
计与实现 [J].现代电子技术,2016,39(16):36-39+43.
作者简介:林旻(1984—),男,回族,江苏南京人,工程师,硕士,研究方向:实验室信息化建设。
(上接07页)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论