如何防止有人劫持rtmp流源而不限制一个IP

2023-12-06

长期倾听者,第一次来电。

我想知道是否有一种方法可以防止有人劫持我们的 rtmp 流,而不将传入源限制为特定的 IP 地址(这就是我们目前正在做的)。原因是我们的 ISP 可能会随时更改我们的源 IP,除非我们为静态 IP 支付更多费用(如果没有其他解决此问题的方法,我们会这样做)。我们正在使用:

nginx 服务器与rtmp流媒体模块

这是设置:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        meta copy;
                        hls on;
                        hls_path /mnt/hls/live;
                        hls_fragment 5s;
                        hls_playlist_length 10s;

                allow publish IP_ADDRESS_GOES_HERE;
                deny publish all;
        }
}

我们在播放器中使用密钥,以便源流媒体需要提供播放器将检查的密钥。但这可以从播放器页面的源代码以及可用于获取 IP 的流服务器的域中轻松查看。因此,如果我们关闭上面的“拒绝全部发布”设置,任何拥有该 IP 和密钥的人都可以将自己的流发送到我们的网站。

Again, 这里的目标是能够限制 rtmp 接收非我们组织的流源。我不是安全专家、IT 专业人士或 nginx 专家。我猜答案对你们中的许多人来说都是显而易见的,但如果您能为入门级人员总结一下,我将非常感激。谢谢!

UPDATE:

我尝试使用 on_publish 指令并添加了以下更改:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        on_publish http://localhost:8000/auth;
                        meta copy;
                        hls on;
                        hls_path /mnt/hls/live;
                        hls_fragment 5s;
                        hls_playlist_length 10s;

#                allow publish IP_ADDRESS_GOES_HERE;
#                deny publish all;
        }
}

and

http {

...

    server {
    
    ...

        listen 8000;
        location /auth{
            if ($arg_user != 'usernamegoeshere') {
                return 404;
            }
            if ($arg_psk = 'passwordgoeshere') {
                return 201;
            }
            return 404;
        }
    
    ...
    
    }

...

}

使用 OBS 进行身份验证无法连接。但是,如果我将所有 404 更改为 201,则流会通过。有什么想法吗?我缺少什么?


Nginx RTMP 支持CIDR for IP_ADDRESS_GOES_HERE, like:

allow play 192.168.0.0/24;

但是,仅当您的 IP 在指定 CIDR 中发生变化时,它才起作用。如果你的IP是随机的,你需要编写代码来验证IP或识别客户端的东西,例如:

                                    --on-publish->--- 
Client(OBS) ---RTMP--> Nginx/Other                      Your Backend Server
                                    --<--allow/deny---

注意:对于 Nginx RTMP,请注意它使用HTTP GET要访问回调,所以请配置notify_method get; see #1442 or here.

如果需要对多个协议进行身份验证,例如验证 SRT/RTMP 发布者,或 HLS/HTTP-FLV/WebRTC 播放器,使用带有 HTTP 回调的 SRS 很简单,请阅读用法here。如果无法替换您的 NginxRTMP 服务器,有一个解决方案,使用 SRS 作为代理来验证客户端,然后转发到您的 NginxRTMP,如下所示:

                              --on-publish(play)->--- 
Client(OBS) --SRT/RTMP-> SRS  --<---allow/deny-------  Your Backend Server
                          +
                          |
                          +-->--Forward-if-Verify-ok----> NginxRTMP
                          |
                          +-->--Stream-if-Verify-ok----> Player(FLV/HLS/WebRTC)

注意:SRS回调您的后端服务器以验证客户端,请阅读HTTP回调。对于SRS转发到Nginx RTMP,请阅读Edge or Forward.

很公平。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止有人劫持rtmp流源而不限制一个IP 的相关文章

  • Flex 和 crossdomain.xml

    我想知道将 crossdomain xml 添加到应用程序服务器的根目录是否存在任何安全问题 它可以添加到服务器的任何其他部分吗 您是否知道任何不需要服务器放置此文件的解决方法 谢谢 达米安 通过添加 crossdomain xml 主要的
  • 为什么用户名不能更改?

    我到处都读到 并在实践中看到 用户名不应该更改 当我问为什么时 给出的理由是 安全 我一直在寻找关于为什么更改用户名不安全的明确答案 但我似乎找不到答案 这里有哪位有安全经验的人可以回答这个问题吗 注 如果您不知道答案 请不要猜测 我自己也
  • 如何确保密钥是在 TPM 内部创建的?

    我需要 在客户端计算机上运行 exe 这将在 TPM 中创建密钥对 然后我将使用 TPM 生成的密钥对的公钥部分创建 CSR 我关心的是如何确保密钥是在 TPM 内部创建的 而不是由欺骗的 TPM 创建的 这将使私钥能够被迁移和复制 我听说
  • uWSGI 皇帝权限被拒绝,除非 root

    我尝试使用二进制文件本身的标志 uid www data gid www data 并将其设置在我的配置中 uid www data gid www data 但套接字总是由我正在使用的帐户生成 因此我从 nginx 收到权限被拒绝的错误
  • 为什么使用 mysql_real_escape_string,addslashes 不会阻止一切?

    我正在查看文档并偶然发现了 mysql real escape string 我不明白为什么当您可以只使用addslashes 时它很有用 有人可以向我展示一个场景来说明它为什么有用吗 我也很好奇为什么它需要数据库连接 这似乎是一个很大的开
  • 如何防止客户修改 firebase 数据(在没有后端的 Web 应用程序中)?

    我最近开始探索 firebase 作为我的 Angular JS 单页网站的身份验证解决方案 它看起来很完美 然而 从安全角度来看 我不太确定是否将逻辑保留在我的应用程序中的客户端 假设我对在我的网站上注册的客户进行了 isProfileC
  • https登录的安全性?

    我正在编写一个 Apple iOS 应用程序 用于登录帐户并获取一些余额 它使用纯 html 链接进行登录 用户名和密码在运行时动态加载到登录链接 我使用 Wireshark 嗅探了流量 但在发送的任何包中都找不到用户名或密码 我猜 htt
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • nginx/mono 2.8 上的 ASP.Net MVC 2

    我正在尝试在 Linux 环境上设置 ASP Net MVC 2 应用程序 我在 VirtualBox 上安装了 Ubuntu 10 10 然后从源安装了 Mono 2 8 之后我安装了 nginx 并按照建议进行配置here http w
  • JWT(Json Web 令牌)与自定义令牌

    我仔细查看了问题 但没有找到任何可以解决我的疑问的内容 我找到了有关 JWT 的大量信息 但在比较 JWT 相对于针对 REST 服务生成自定义令牌来对身份验证请求提供的优势时 发现的信息并不多 与生成自定义生成令牌相比 使用 JWT Js
  • Java Web Start 的证书已过期

    JWS 对代码签名证书过期有何反应 根据我的观察 它似乎忽略了 CA 签名证书的到期日期 但我想找到一些确凿的证据 例如官方文档 来证实这一点 如果签名的 jar 被赋予时间戳 来自时间戳权威 那么即使在证书过期之后签名仍然有效 假设时间戳
  • 对于较大的请求正文,Nginx proxy_cache_key $request_body 将被忽略

    我使用 nginx 作为反向代理 我希望它能够缓存 POST 请求 我的后端已正确配置为为 POST 请求返回适当的缓存控制标头 在 nginx 中我配置了 proxy cache methods POST proxy cache key
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • 在 Nginx 中使用查询参数绕过基本身份验证

    在我的 nginx 配置中 我打开了基本身份验证来限制对站点的访问 如下所示 auth basic Restricted Area auth basic user file path to htpasswd 这适用于用户 但我们使用的一些工
  • 为什么我在 Firefox 中突然遇到“阻止加载混合活动内容”问题?

    今天早上 在将我的 Firefox 浏览器升级到最新版本 从 22 到 23 后 我的后台 网站 的一些关键功能停止工作 查看Firebug日志 报告了以下错误 Blocked loading mixed active content ht
  • 限制 Django 中的暴力登录攻击 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有普遍接受的策略来保护 Django 应用程序免受此类攻击 有很多可用的库 例如Django 斧头 Django 防御者 Djan
  • 登录代码示例已通过 SQL 注入被黑客攻击,尽管 mysql_real_escape_string...

    我使用 CodeIgniter 但在黑客攻击方面遇到了麻烦 是否可以对以下登录代码进行 SQL 注入 function process login username mysql real escape string this gt inpu
  • 如果我使用带有表单身份验证的 WCF,php 或 java 客户端将如何进行身份验证?

    我有一个通用的概念验证 WCF 服务 它使用表单身份验证来保护访问 当我的客户端是 NET 时 一切都很好 vb 代码如下 Dim client As SupplierServiceClient New SupplierServiceCli
  • 为什么对参数哈希进行切片会在批量分配时带来安全问题?

    通过批量分配来预防安全风险的官方方法是使用属性可访问 http api rubyonrails org classes ActiveModel MassAssignmentSecurity ClassMethods html 然而 一些程序

随机推荐

  • X11 在 Mac OSX 10.11.6 上的 XCode 中使用 CImg 标头时出现问题

    我将 X11 添加到我的标头搜索路径 库搜索路径中 并且在 XCode 的构建设置和构建阶段中将二进制文件链接到 X11 库 但是我仍然收到下图所示的错误 我 99 999 确定问题是 X11 因为当我禁用显示功能时 警告不存在 关于我下一
  • 使用 selenium(webdriver) 的 Python 程序不能作为单个且无控制台的 exe 文件运行 (pyinstaller)

    以下是我的Python代码 t py from tkinter import messagebox from tkinter import from selenium import webdriver def clicked iedrive
  • System V amd64 如何处理很长的返回值?

    我正在简要研究 amd64 x86 64 架构的 System V ABI 并且很好奇它如何处理超过 128 位的返回值 其中rax and rdx还不够 我在 Ubuntu 18 04 64 位 更一般地说 任何 amd64 POSIX
  • 为 CUDA 实现 32 位 memset 的“正确”方法是什么?

    CUDA有API调用 cudaError t cudaMemset void devPtr int value size t count 它用单字节值填充缓冲区 我想用多字节值填充它 假设 为了简单起见 我想填充devPtr具有 32 位
  • Reactjs:将相同的道具传递给多个组件

    我对 ReactJS 有点陌生 我正在尝试做一些清理工作 我想知道如何使用新 context api 提供的 props 的扩展属性
  • 使用 GNU Parallel 组合两个命令用于 OCR 项目

    我想编写一个运行命令的脚本OCRpdfs 在写入文本文件后删除生成的图像 我想要组合的两个命令如下 该命令创建文件夹 解压pgm从每个PDF并将它们添加到每个文件夹中 time find name pdf parallel j 4 prog
  • 多字节字符串上的 str_replace() 危险吗? [复制]

    这个问题在这里已经有答案了 给定某些多字节字符集 我假设以下内容没有达到预期目的是否正确 string str replace string 特别是 如果输入的字符集中可能包含 0xbf5c 等有效字符 则攻击者可以注入 0xbf22 来获
  • 如何读取jar内的属性文件?

    我在 com abc properties 包下有一个 config properties 文件 我需要从 com abc util 中存在的 java 类之一读取属性文件 这两个文件都存在于 jar 中 我尝试过使用 fs new Fil
  • 可变参数函数和常量

    可变参数函数到底如何处理数字常量 例如考虑以下代码 myfunc 5 0 1 2 3 4 该函数如下所示 void myfunc int count 现在 为了迭代单个参数va arg 我需要知道它们的大小 例如int short char
  • MuPDF Android Pdf 适合屏幕

    我成功为我的 Android 应用程序之一安装 MuPDF 但问题是 渲染时我无法将 PDF 适配到屏幕上 任何人都可以建议我如何实现这一目标 谢谢 编辑ReaderView java中的measureView方法成为 private vo
  • Range.Cells 属性语法

    我对 Range Cells 属性感到困惑 根据 MSN 文档 Range Cells 属性 Excel 语法应该是expression Cells 然而 在下面的示例中 代码并未遵循此语法 但似乎使用Cells作为一个函数 Workshe
  • 如何在 Android 中动态调整补间动画的持续时间/速度

    假设我有一个 Android 应用程序 在该应用程序中我想为 L 形状的球图形制作动画 这需要我定义一个补间动画 在其中创建一个动画 xml 文件 如下所示 并将其应用到其中包含球图形的视图
  • 使用什么方法来保护这个 Android APK:反射?加密?我如何对其进行逆向工程并分析?

    我了解 java 编程的基础知识 但我对逆向工程 APK 很陌生 所以解释会很好 我有一个 APK 文件 但没有 Java 源代码 在线反编译APK后 大部分应用程序隐藏在 资产 gt classes dex dat 我发现的唯一的java
  • JVM 如何处理 RuntimeException(s)

    在创建自定义异常时 如果我们想创建一个checkedException 我们扩展了 Exception 类并为未经检查的异常我们扩展了 RuntimeException 类 我的问题是 当 RuntimeException 和 Except
  • 计算 MySQL 数据库中时间戳在 X 间隔内的行数

    我正在尝试计算数据库表中 X 小时或 X 天内插入的行数 我已经多次尝试 但我不断收到空集响应 我的表中的 start stamp 列的格式如下 2013 08 07 18 18 37 我尝试过很多变体 select from mytabl
  • Bitly 的 Nuget 包以缩短链接

    我需要在 C 中使用 bitly 来缩短链接 有没有这个的 nuget 包 有人可以为我提供代码以便我可以使用它吗 查看https www nuget org packages BitlyAPI 或者您自己调用 bit ly api 该 A
  • ijg 支持 JPEG - 出现访问冲突

    我最近正在尝试更新my game以压缩格式 JPEG 和 PNG 存储图形 虽然我最终选择了另一个图书馆 但我最初的尝试是合并ijg进行JPEG解压缩 然而 我什至无法让最简单的控制台应用程序工作 并且想知道是否有人能够阐明其原因 这是我的
  • 使用 MediaRecorder 在 Android 中录制语音通话

    我在通话录音时遇到问题 我已拨打服务并致电BroadcastReceiver获取通话状态 在TelephonyManager EXTRA STATE OFFHOOK当接到电话时 我正在使用以下代码来记录通话 recorder setAudi
  • 带有子标题的动态表头

    当标题单元格应该有一些不等于标题单元格的子标题单元格时 如何创建 使用角度 动态表标题 我的桌子是 var table header a subheaders a1 a2 header b subheaders b1 b2 b3 我尝试创建
  • 如何防止有人劫持rtmp流源而不限制一个IP

    长期倾听者 第一次来电 我想知道是否有一种方法可以防止有人劫持我们的 rtmp 流 而不将传入源限制为特定的 IP 地址 这就是我们目前正在做的 原因是我们的 ISP 可能会随时更改我们的源 IP 除非我们为静态 IP 支付更多费用 如果没