长期倾听者,第一次来电。
我想知道是否有一种方法可以防止有人劫持我们的 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,则流会通过。有什么想法吗?我缺少什么?