防火墙在确保网络安全和保护敏感信息方面的广泛应用,促使人们开发出各种绕过防火墙的工具和技术。Coturn 服务器就是这样一种工具,它因具有穿透防火墙的能力而广受欢迎。在本文中,我们将解读 Coturn 服务器的功能,并研究其绕过防火墙的效率。
Coturn 服务器是一种开源 TURN 和 STUN 服务器,可让防火墙后的客户端访问基于 IP 的多媒体通信。它可以绕过防火墙,将网络流量从客户端转发到服务器,反之亦然,使通信看起来像是来自服务器。
不过,需要注意的是,虽然 Coturn 服务器可以有效绕过防火墙,但使用时仍需谨慎。该工具是为合法目的而设计的,例如为防火墙后的客户端提供访问多媒体通信的途径,严禁将其用于恶意目的。
如前所述,CoTURN 是最开源的产品之一,由于其在类似 GitHub 的平台上进行了最先进的开发,因此获得了广泛的欢迎和推荐。让我们来分析一下它的底层技术及其与防火墙的交互方式。
STUN 与 TURN 协议的区别
STUN(Session Traversal Utilities for NAT)和 TURN(Traversal Using Relays around NAT)都是用于协助穿越网络地址转换(NAT)设备的协议,以便为语音和视频会议等实时通信应用建立点对点连接。
两者的主要区别在于,STUN 用于发现 NAT 后面设备的公共 IP 地址,而 TURN 则在 NAT 后面的两个设备无法直接连接时用作中继服务器。
简单地说,STUN 用于发现设备的公共 IP 地址,并在 NAT 后面的两个设备之间建立直接连接。而 TURN 则是在无法建立直接连接时的备用选项,它充当中间人,在两个设备之间转发数据。
因此,从技术上讲,WebRTC 通信的可靠性只取决于 TURN 协议。
让我们来了解一下 TURN 的基本知识:
使用中继穿越 NAT(TURN)[RFC5766] 是一种协议,通常用于改善点对点 (P2P) 应用程序的连接性(定义见 [RFC5128] 第 2.7 节)。
TURN 允许在一方或双方无法建立直接点对点连接时建立连接。TURN 服务器也是一个构件,可使用网络实时通信(WebRTC)框架支持两个对等网络浏览器之间使用音频、视频、协作、游戏等进行交互式实时通信。
Web 实时通信(WebRTC)框架[I-D.ietf-rtcweb-overview]提供协议构件,支持对等网络浏览器之间使用音频、视频、协作、游戏等进行直接、交互式实时通信。对于点对点通信,WebRTC 使用交互式连接建立(ICE)协议 [RFC5245] 收集候选地址并进行连接检查。
企业级防火墙策略
了解企业如何建立防火墙非常重要。请花一些时间阅读下面的段落,消化其中的知识点;
企业通常有一个允许外部应用程序/网站的白名单,并可通过各种形式的检测(DNS 查询、ALPN、HTTP URL 过滤、至少在 TLS 交换中对 SNI 执行 HTTPS 检查并验证 SSL 记录的 DPI 代理、HTTP(S) 代理等)将 HTTP(S) 连接列入黑名单。
这种配置下的防火墙将阻止与互联网上的外部对等设备和任意 TURN 服务器的 TCP/UDP 连接。例如,防火墙会阻止与外部对等设备使用 STUN,并强制客户使用企业提供的 TURN 服务器进行所有外部 WebRTC 媒体通信。
为什么企业会简单地阻止 UDP?
由于大多数协议都使用 TCP,因此许多企业防火墙都被配置为简单地阻止 UDP。
企业网络的安全策略通常要求过滤传入的未经请求的流量,阻止某些协议,并对垃圾邮件、恶意软件和知识产权进行应用级过滤和扫描。这些协议大多通过 TCP 运行,并得到防火墙和特定应用代理功能的良好支持。
使用 TURN 服务器穿越企业级防火墙:
企业级防火墙的配置允许 UDP 和 TCP 流量进入知名的 TURN 服务器,从而允许 WebRTC 媒体流和数据通道。
企业 TURN 服务器可使用第三方授权 http://tools.ietf.org/html/draft-ietf-tram-turn-third-party-authz-04 来区分业务呼叫和社交呼叫。
企业提供的 TURN 服务器必须同时支持第一和第三方授权。这样,客户端就可以对与企业网络有业务关系的 WebRTC 服务器使用第三方授权,而对与业务无关的呼叫使用第一方认证。
使用 Bash 脚本执行 ICE 候选测试:
在本节中,我们将讨论一个 bash 脚本,创建该脚本是为了执行滴入 ICE 候选人的任务,并测试有关 coturn 的参数。该脚本利用 trickle-ice 工具来执行这项任务,这是实现语音和视频会议等实时通信应用的重要组成部分。通过该脚本,我们可以测试依赖于 TURN 协议的 WebRTC 通信的可靠性。下面是一个基本的 bash 脚本,用于测试 ICE 候选者并测试上述描述中讨论的参数;
#!/bin/bash
# Define the STUN and TURN servers
STUN_SERVER="stun.l.google.com:19302"
TURN_SERVER="turn:your-turn-server.com:3478"
# Start trickle ICE candidates
./trickle-ice -u $STUN_SERVER -t $TURN_SERVER
# Check if direct connection is possible with STUN
if [ $? -eq 0 ]; then
echo "Direct connection established with STUN."
else
echo "Direct connection not possible. Using TURN as fallback."
fi
# Check enterprise firewall policy
if [ -n "$(grep "Enterprise firewall blocks UDP" /etc/firewall.conf)" ]; then
echo "Enterprise firewall blocks UDP. Using TURN for WebRTC media communication."
else
echo "Enterprise firewall allows UDP. Using STUN for WebRTC media communication."
fi
# Check if TURN server supports third-party authorization
if [ -n "$(grep "TURN server supports third-party auth" /etc/turn.conf)" ]; then
echo "TURN server supports third-party authorization. Using third-party auth for business calls."
else
echo "TURN server does not support third-party authorization. Using first-party auth for all calls."
fi
该脚本假定有 trickle-ice 工具,并且存在 /etc/firewall.conf 和 /etc/turn.conf 配置文件。脚本还假定 TURN 服务器地址和端口已在 TURN_SERVER 变量中指定。
可以根据设置的具体要求调整或扩展该脚本。
要安装 trickle-ice 工具并运行脚本,请按照以下步骤操作:
使用以下命令安装 trickle-ice:
sudo apt-get install trickle-ice
- 创建一个带有
.sh
扩展名的新文件并将脚本内容粘贴到其中。 - 使用以下命令使文件可执行:
chmod +x validate_ice_servers.sh
- 使用以下命令运行脚本:
./validate_ice_servers.sh
该代码是一个 shell 脚本,用于测试 WebRTC 媒体通信所需的各种组件。它首先定义用于此通信的 STUN 和 TURN 服务器,然后运行“ trickle-ice ”命令来检查是否可以与 STUN 服务器建立直接连接。如果无法直接连接,则会使用 TURN 作为后备。
接下来,它通过在“/etc/firewall.conf”文件中搜索特定字符串来检查企业防火墙策略。如果找到该字符串,则意味着企业防火墙阻止了 UDP 流量,WebRTC 媒体通信必须使用 TURN。如果未找到该字符串,则表示防火墙允许 UDP 流量,并且可以使用 STUN 进行此通信。
最后,代码通过在“/etc/turn.conf”文件中搜索特定字符串来检查 TURN 服务器是否支持第三方授权。如果找到该字符串,则说明TURN服务器支持第三方授权,将用于业务调用。如果未找到该字符串,则TURN服务器不支持第三方授权,所有调用都将使用第一方授权。
小结
企业防火墙是用于保护公司网络和数据的安全系统。尽管这些防火墙通常会阻止使用用户数据报协议(UDP)的数据传输,但对于向著名的 TURN(使用 NAT 附近的中继进行穿越)服务器传输 UDP 和传输控制协议(TCP)流量,这些防火墙却可以例外。
这样就可以使用 WebRTC(网络实时通信)技术,实现网络浏览器之间的实时媒体流和数据传输。为确保通信的安全性和可控性,被称为 Coturn 的 TURN 服务器软件实现了第一方和第三方授权。这种区分业务通信和社交通信的做法有助于确保每种通信都能保持正确的安全级别。
作者:Muhammad Usman Bashir
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/29274.html