您好,欢迎访问三七文档
STUN原理及过程STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。STUN的探测过程需要有一个公网IP的STUNserver,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网IP,PORT等等。UAC通过是否得到这个UDP包和包中的数据判断自己的NAT类型。假设有如下UAC(B),NAT(A),SERVER(C),UAC的IP为IPB,NAT的IP为IPA,SERVER的IP为IPC1、IPC2。请注意,服务器C有两个IP,后面你会理解为什么需要两个IP。(1)NAT的探测过程:STEP1:B向C的IP1的pot1端口发送一个UDP包。C收到这个包后,会把它收到包的源IP和port写到UDP包中,然后把此包通过IP1和port1发还给B。这个IP和port也就是NAT的外网IP和port(如果你不理解,那么请你去看我的BLOG里面的NAT的原理和分类),也就是说你在STEP1中就得到了NAT的外网IP。熟悉NAT工作原理的朋友可以知道,C返回给B的这个UDP包B一定收到(如果你不知道,去读下我的其它文章)。如果在你的应用中,向一个STUN服务器发送数据包后,你没有收到STUN的任何回应包,那只有两种可能:1、STUN服务器不存在,或者你弄错了port。2、你的NAT拒绝一切UDP包从外部向内部通过(我们公司的NAT就是)。当B收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网,下步NAT将去探测防火墙类型,我不想多说。如果不一样,说明有NAT的存在,系统进行STEP2的操作。STEP2:B向C的IP1发送一个UDP包,请求C通过另外一个IP2和PORT(不同与SETP1的IP1)向B返回一个UDP数据包(现在知道为什么C要有两个IP了吧,虽然还不理解为什么,呵呵)。我们来分析一下,如果B收到了这个数据包,那说明什么?说明NAT来着不拒,不对数据包进行任何过滤,这也就是STUN标准中的fullconeNAT。遗憾的是,fullconenat太少了,这也意味着你能收到这个数据包的可能性不大。如果没收到,那么系统进行STEP3的操作。STEP3:B向C的IP2的port2发送一个数据包,C收到数据包后,把它收到包的源IP和port写到UDP包中,然后通过自己的IP2和port2把此包发还给B。和step1一样,B肯定能收到这个回应UDP包。此包中的port是我们最关心的数据,下面我们来分析:如果这个port和step1中的port一样,那么可以肯定这个NAT是个CONENAT,否则是对称NAT。道理很简单:根据对称NAT的规则,当目的地址的IP和port有任何一个改变,那么NAT都会重新分配一个port使用,而在step3中,和step1对应,我们改变了IP和port。因此,如果是对称NAT,那这两个port肯定是不同的。如果在你的应用中,到此步的时候PORT是不同的,恭喜你,你的STUN已经死了。如果不同,那么只剩下了restrictcone和portrestrictcone。系统用step4探测是是那一种。STEP4:B向C的IP2的一个端口PD发送一个数据请求包,要求C用IP2和不同于PD的port返回一个数据包给B。我们来分析结果:如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是restrictconeNAT。如果没收到,没别的好说,portrestrictNAT.(2)SIP怎么使用STUN个人认为这是个很不值得提的问题,不过有许多人问我,还是简要提一下。其实这是个很简单的问题,SIP通过STUN得到NAT的外网IP和SIP的信令监听端口的外网port,替换SIP注册包中的contact头中的IP和port,然后注册。这样就可以确保当有人呼叫你的的时候注册服务器能找到你。需要提醒你的是,NAT发现一个连接超过一段时间后没有活动,它就会关闭这个影射,因此你必须间隔一端时间发送一个数据包出去以keepalive。另外,当你要和别人建立RTP通讯的时候,不要忘记把你的SDP中的IP和PORT改成公网IP和PORT。也许文章到这里就可以完了,不过很遗憾,显然我们还有工作没有完成,那就是对称NAT。在我后面的文章中,我会对对称NAT对一些探讨,希望你关注我的BLOG,谢谢。SIP安全的分析与实现面对IP网络中的种种安全威胁,使用SIP协议怎样才能保证通话的安全性。已经成为一个亟待解决的问题。1、SIP应用介绍SIP(SessionInitiationProtocol)即会话初始协议,是由IETF(InternetEngineeringTaskForce)组织于1999年提出的一个在基于IP网络中,特别是在Internet这样一种结构的网络环境中,实现实时通信的应用层控制与信令协议。SIP协议用于控制多个参与者参加的多媒体会话的建立和终结,并能动态调整和修改会话属性(如会话带宽要求、传输的媒体类型、媒体编解码格式,以及对组播和单播的支持等)。而所谓的会话就是指用户之间的数据交换。在基于SIP的应用中,每一个会话可以是各种不同类型的内容,可以是普通的文本数据,也可以是经过数字化处理的音频、视频数据,还可以是诸如游戏等应用的数据,应用具有巨大的灵活性。今天,越来越多的运营商、CLEC(竞争本地运营商)和ITSP(Internet电话服务提供商)都在提供基于SIP的服务,如市话和长途电话技术、在线信息和即时消息、语音短信、push-to-talk(按键通话)、多媒体会议等等。独立软件供应商(ISV)正在开发新的开发工具,用来为运营商网络构建基于SIP的应用程序以及SIP软件。网络设备供应商(NEV)正在开发支持SIP信令和服务的硬件。现在,有众多IP电话、用户代理、网络代理服务器、VOIP网关、媒体服务器和应用服务器都在使用SIP协议。2、SIP面临的安全威胁由于SIP是透过IP网络传送资料,因此要如何避免网络中的病毒与恶意攻击、避免被网络窃听等,已经成为采用SIP协议产品的最大考虑。SIP的安全性问题包含两个层面的思考。第一是数据封包的安全性,主要著眼于应用程序层次方面;第二是IP网络的安全性,主要著眼于网络实体层与传送层的问题。就网络架构来看,因为SIP不仅应用于企业内部的安全区域内,它的数据封包也会经过充满威胁与攻击的公网,所以,可以将SIP网络的威胁来源分为两种:外部的威胁与内部的威胁。外部的威胁主要是发生在语音资料封包流经一些不安全的网络、网络设备或者代理。内部威胁则是来自SIP呼叫的呼叫方或是被叫方。一般的企业会将防火墙内部的使用者视为是可信赖的安全使用者,一旦这些安全的使用者对SIP协议的网络具有危险性,将很难被识别追踪出来,更何况事前防范。综合SIP在应用层面与网络层面所面临的安全威胁,大致会有下列五种攻击:1.拒绝服务攻击(DenialofService;DoS)-拒绝服务攻击对网络中的SIP代理服务器或者网关,发动未被授权的数据封包炸弹,以停止服务器的正常运作。2.网络窃听(Eavesdropping)-未经授权地拦截语音数据封包或是RTP的媒体数据流,而后将所获得的数据进行解码,窃取信息。3.封包伪装(PacketSpoofing)-攻击者伪装成合法的使用者来传送资料。4.重复传递信息(Replay)-攻击者不断重复传送一个合法的伪造信息给被叫方,致使被叫方的UA重新处理这个伪造信息。5.破坏信息完整性(MessageIntegrity)-攻击者在信息数据中插入具有攻击性质的数据,破坏通信双方传送信息的完整性。3、SIP的安全策略面对IP网络中的种种安全威胁,使用SIP协议怎样才能保证通话的安全性,已经成为一个亟待解决的问题。3.1SIP协议本身的安全机制从SIP协议本身来讲,SIP消息头可能会泄露关于交流模式或其他需要保密的信息,SIP消息体也可能包含不应该透露的用户信息(媒体类型、编解码方式、地址和端口等)。因此,SIP协议主要利用消息头和消息体为多媒体会话提供点到点或者端到端的安全机制。应用在SIP协议中的安全机制可以分为两类:端到端(end-to-end)的保护和逐段转接(hop-by-hop)的保护。端到端的保护机制主要涉及呼叫者和被呼叫者的SIP用户代理,是SIP特意对安全方面所做的一些考虑,如SIP认证和SIP消息体加密等;逐段转接机制是为了保证在消息的传送路径上两个连续的SIP实体之间的通信安全。SIP并没有专门提供用于逐段转接的安全保护功能,主要还是依赖网络层(IPSec)或传输层(TLS)的安全。SIP协议中主要使用两种安全机制:认证和数据加密。(1)认证用于鉴别消息发送者的合法性,以确保一些机密信息和紧急信息在传输过程中没有被窜改,防止攻击者修改或冒名重发SIP请求或响应。SIP使用代理认证、代理授权、授权和鉴别头信息域等,以数字签名的方式进行终端的认证。而逐段转接认证可以利用传输层或网络层的安全协议(如TLS或IPSec)来进行。(2)数据加密用于保证SIP消息的机密性,只有经过授权的接收者才可以解密和浏览数据。数据加密一般需要通过使用加密算法如DES(DataEncryptionStandard数据加密标准)或AES(AdvancedEncryptionStandard高级加密标准)来实现。SIP重用了HTTP和SMTP的安全模型。当然,信息的完全加密将为信令的机密性提供最好的保护,同时还可以保证信息不会被恶意中间媒介修改。但是,SIP请求和响应不能在端到端的用户之间完全加密,因为在大多数网络体系结构中,信息头域如Request-URI,Route,和Via对服务器来说必须是可见的,只有这样,SIP请求才能够正确地发送。同时,代理服务器需要修改消息的某些参数(如增加Via头域值)。因此,SIPUAs(UserAgents)必须信任代理服务器。另外,SIP的实体还需要彼此之间相互鉴别。因此,SIP支持两种形式的数据加密:端到端加密和逐段转接加密。前者提供所有不需要中间代理服务器处理的信息(一些SIP协议头字段和消息体)的安全性保障,可以通过S/MIME(安全/多用途Internet邮件扩展,Secure/MultipurposeInternetMailExtensions)机制实现对信息的安全保证。相反,逐段转接加密是为了保护需要中间实体访问的SIP消息(如From,To和Via字段)的安全性,以避免恶意攻击者了解到呼叫的双方或访问的路由信息。这种加密可以通过SIP外部的安全机制(如IPSec或TLS)来实现。在这里有必要讨论一下上面提到的IPsec和TLS。IPsec向来就是IP网络的主要安全机制,可以直接在IP层引入安全。通常IPsec根据网络节点标识来提供安全服务,而且这可以由SIP体系独立完成。正因如此,IPsec主要用于SIP实体之间,这些SIP实体可以拥有预先配置而且相当静态的安全联系,如同一个IP电话提供商的服务器。TLS通过TCP来提供传输层的安全,它适于在有动态联系的主机间需要逐段转接安全的体系。图1点到点与端到端的安全如图1所示,在路径D中需要实现端到端的安全性,可以由S/MIME机制保证。而在路径A,B,C中要实现每一跳的点到点的安全。在A段和C段,使用HTTPDigestAuthentication。B段的安全性可以由IPsec和TLS来完成。3.2现有网络安全架构对SIP通信的保障以上介绍的是SIP协议本身基于网络安全的考虑。在实际操作中,网络管理员也可以通过服务器的设定,来防范拒绝服务攻击(DoS),或安装防火墙等来过滤不正常的数据封包;对传送的数据封包进行加密,例如使用SecureRTP通信协议,来避免网络窃听;在各个合法的使用者之间,采用地址认证策略,来
本文标题:STun原理及过程
链接地址:https://www.777doc.com/doc-2861074 .html