查看原文
其他

VPN 基本概念

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488


微信公众号:计算机与网络安全

ID:Computer-network

一、VPN概述


虚拟专用网络(Virtual Private Network,VPN)在VPN客户机与VPN网关之间创建一个加密的、虚拟的点对点连接,保障数据在经过互联网时的安全。例如,公司人员出差到外地或在家中,需要访问公司企业网资源。如果直接拨入的话,未加密的数据包很容易被人监听或拦截。因此,企业内部信息资源也开始广泛使用互联网络协议时,VPN也就越来越重要了。


对于构建VPN来说,网络隧道(Tunnelling)技术是个关键技术。网络隧道技术指的是利用一种网络协议来传输另一种网络协议,它主要利用网络隧道协议来实现这种功能。目前,常用的有三种网络隧道协议,一种是二层隧道协议,用于传输二层网络协议,它主要应用于构建远程访问虚拟专网(Access VPN);三层隧道协议则用于传输三层网络协议,它主要应用于构建企业内部虚拟专网(Intranet VPN)和扩展的企业内部虚拟专网(Extranet VPN)。第2层隧道协议对应数据链路层,使用帧作为数据交换单位。PPTP、L2TP和L2F(第2层转发)都属于第2层隧道协议,都是将数据封装在点对点协议(PPP)帧中通过互联网络发送。第3层隧道协议对应于网络层,使用包作为数据交换单位。IP over IP以及IPSEC隧道模式都属于第3层隧道协议,都是将IP包封装在附加的IP包头中通过IP网络传送。为创建隧道,隧道的客户机和服务器双方必须使用相同的隧道协议。此外,建立在 TCP/UDP 之上的网络隧道技术近几年来也有了较快的发展,通过采用 TCP/UDP 协议,避免了网络运营商的过滤,使得真正能够通过公网来建立加密隧道。这方面比较常见的如 OpenVPN 隧道以及最近出现的构建于https之上的Softether隧道技术等。


点对点隧道协议(PPTP)允许对IP、IPX或NetBEUI数据流进行加密,然后封装在IP包头中通过企业IP网络或公共互联网络发送。第2层隧道协议(L2TP)协议允许对IP、IPX或NetBEUI数据流进行加密,然后通过支持点对点数据报传递的任意网络发送,如IP、X.25、帧中继或ATM。对于像PPTP和L2TP这样的第2层隧道协议,创建隧道的过程类似于在双方之间建立会话;隧道的两个端点必须同意创建隧道并协商隧道各种配置变量,如地址分配、加密或压缩等参数。绝大多数情况下,通过隧道传输的数据都使用基于数据报的协议发送。隧道维护协议被用来作为管理隧道的机制。


安全IP(IPSEC)隧道模式即IPSEC隧道模式允许对IP负载数据进行加密,然后封装在IP包头中通过企业IP网络或公共IP互联网络如Internet发送。第3层隧道技术通常假定所有配置问题已经通过手工过程完成,这些协议不对隧道进行维护。这与第2层隧道协议不同,第2层隧道协议(PPTP和L2TP)必须包括对隧道的创建,维护和终止。为实现在专用或公共IP网络上的安全传输,IPSEC隧道模式使用的安全方式封装和加密整个IP包。然后对加密的负载再次封装在明文 IP包头内通过网络发送到隧道服务器端。隧道服务器对收到的数据报进行处理,在去除明文IP包头,对内容进行解密之后,获得最初的负载IP包。负载IP包在经过正常处理之后被路由到位于目标网络的目的地。


IPSEC 隧道模式具有以下功能和局限:(1)只能支持 IP 数据流;(2)工作在 IP 栈(IPstack)的底层,因此,应用程序和高层协议可以继承 IPSEC 的行为;(3)由一个安全策略(一整套过滤机制)进行控制。安全策略按照优先级的先后顺序创建可供使用的加密和隧道机制以及验证方式。当需要建立通信时,双方机器执行相互验证,然后协商使用何种加密方式。此后的所有数据流都将使用双方协商的加密机制进行加密,然后封装在隧道包头内。


隧道一旦建立,数据就可以通过隧道发送。隧道客户端和服务器使用隧道数据传输协议准备传输数据。例如,当隧道客户端向服务器端发送数据时,客户端首先给负载数据加上一个隧道数据传送协议包头,然后把封装的数据通过互联网络发送,并由互联网络将数据路由到隧道的服务器端。隧道服务器端收到数据包之后,去除隧道数据传输协议包头,然后将负载数据转发到目标网络。


(1)自愿隧道(Voluntary Tunnel)。用户或客户端计算机可以通过发送VPN请求配置和创建一条自愿隧道。此时,用户端计算机作为隧道客户方成为隧道的一个端点。当一台工作站或路由器使用隧道客户软件创建到目标隧道服务器的虚拟连接时建立自愿隧道。为实现这一目的,客户端计算机必须安装适当的隧道协议。自愿隧道需要有一条IP连接(通过局域网或拨号线路)。使用拨号方式时,客户端必须在建立隧道之前创建与公共互联网络的拨号连接。一个最典型的例子是Internet拨号用户必须在创建Internet隧道之前拨通本地ISP取得与Internet的连接。对企业内部网络来说,客户机已经具有同企业网络的连接,由企业网络为封装负载数据提供到目标隧道服务器路由。自愿隧道技术为每个客户创建独立的隧道。FEP和隧道服务器之间建立的隧道可以被多个拨号客户共享,而不必为每个客户建立一条新的隧道。因此,一条隧道中可能会传递多个客户的数据信息,只有在最后一个隧道用户断开连接之后才终止整条隧道。


(2)强制隧道(Compulsory Tunnel)。由支持VPN的拨号接入服务器配置和创建一条强制隧道。此时,用户端的计算机不作为隧道端点,而是由位于客户计算机和隧道服务器之间的远程接入服务器作为隧道客户端,成为隧道的一个端点。目前,一些商家提供能够代替拨号客户创建隧道的拨号接入服务器。这些能够为客户端计算机提供隧道的计算机或网络设备包括支持PPTP协议的前端处理器(FEP)、支持L2TP协议的L2TP接入集线器(LAC)或支持IPSEC的安全IP网关。本文将主要以FEP为例进行说明。为正常地发挥功能,FEP必须安装适当的隧道协议,同时必须能够当客户计算机建立起连接时创建隧道。以 Internet 为例,客户机向位于本地ISP的能够提供隧道技术的NAS发出拨号呼叫。例如,企业可以与某个ISP签定协议,由ISP为企业在全国范围内设置一套FEP。这些FEP可以通过Internet创建一条到隧道服务器的隧道,隧道服务器与企业的专用网络相连。这样,就可以将不同地方合并成企业网络端的一条单一的Internet连接。因为客户只能使用由FEP创建的隧道,所以称为强制隧道。一旦最初的连接成功,所有客户端的数据流将自动地通过隧道发送。使用强制隧道,客户端计算机建立单一的 PPP连接,当客户拨入 NAS时,一条隧道将被创建,所有的数据流自动通过该隧道路由。可以配置FEP为所有的拨号客户创建到指定隧道服务器的隧道,也可以配置FEP基于不同的用户名或目的地创建不同的隧道。

二、点对点协议(PPP)


因为第2层隧道协议在很大程度上依靠PPP协议的各种特性,因此有必要对PPP协议进行深入的探讨。PPP协议主要是设计用来通过拨号或专线方式建立点对点连接发送数据。PPP协议将IP、IPX和NETBEUI包封装在PPP帧内通过点对点的链路发送。PPP协议主要应用于连接拨号用户和NAS。PPP拨号会话过程可以分成4个不同的阶段。分别如下:


阶段1:创建PPP链路。PPP使用链路控制协议(LCP)创建,维护或终止一次物理连接。在LCP阶段的初期,将对基本的通信方式进行选择。应当注意在链路创建阶段,只是对验证协议进行选择,用户验证将在第2阶段实现。同样,在LCP阶段还将确定链路对等双方是否要对使用数据压缩或加密进行协商。实际对数据压缩/加密算法和其他细节的选择将在第4阶段实现。


阶段2:用户验证。在第2阶段,客户端PC将用户的身份证明发给远端的接入服务器。该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。大多数的 PPP 方案只提供了有限的验证方式,包括口令验证协议(PAP)、挑战握手验证协议(CHAP)和微软挑战握手验证协议(MSCHAP)。


(1)口令验证协议(PAP)。PAP是一种简单的明文验证方式。NAS要求用户提供用户名和口令,PAP以明文方式返回用户信息。很明显,这种验证方式的安全性较差,第三方可以很容易地获取被传送的用户名和口令,并利用这些信息与NAS建立连接获取NAS提供的所有资源。所以,一旦用户密码被第三方窃取,PAP无法提供避免受到第三方攻击的保障措施。


(2)挑战—握手验证协议(CHAP)。CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令,其中包括会话ID和一个任意生成的挑战字串。远程客户必须使用 MD5 单向哈西算法返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈西方式发送。


CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈西算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。CHAP为每一次验证任意生成一个挑战字串来防止受到重放攻击。在整个连接过程中,CHAP将不定时地向客户端重复发送挑战口令,从而避免第3方冒充远程客户进行攻击。


(3)微软挑战—握手验证协议(MS-CHAP)。与CHAP相类似,MS-CHAP也是一种加密验证机制。同 CHAP一样,使用MS-CHAP时,NAS会向远程客户发送一个含有会话ID和任意生成的挑战字串的挑战口令。远程客户必须返回用户名以及经过 MD4 哈西算法加密的挑战字串,会话ID和用户口令的MD4哈西值。采用这种方式服务器端将只存储经过哈西算法加密的用户口令而不是明文口令,这样就能够提供进一步的安全保障。此外,MS-CHAP同样支持附加的错误编码,包括口令过期编码以及允许用户自己修改口令的加密的客户-服务器附加信息。使用MS-CHAP,客户端和NAS双方各自生成一个用于随后数据加密的起始密钥。MS-CHAP使用基于MPPE 的数据加密,这一点非常重要,可以解释为什么启用基于MPPE的数据加密时必须进行MS-CHAP验证。


EAP是由IETF提出的PPP协议的扩展,允许连接使用任意方式对一条PPP连接的有效性进行验证。EAP支持在一条连接的客户和服务器两端动态加入验证插件模块。


交易层安全协议(EAP-TLS)已经作为提议草案提交给IETF,用于建立基于公用密钥证书的强大的验证方式。使用EAP-TLS,客户向拨入服务器发送一份用户方证书,同时,服务器把服务器证书发送给客户。用户证书向服务器提供了强大的用户识别信息;服务器证书保证用户已经连接到预期的服务器。用户方证书可以被存放在拨号客户 PC 中,或存放在外部智能卡中。无论哪种方式,如果用户不能提供没有一定形式的用户识别信息(PIN 号或用户名和口令),就无法访问证书。


在第2阶段PPP链路配置阶段,NAS收集验证数据然后对照自己的数据库或中央验证数据库服务器(位于NT主域控制器或远程验证用户拨入服务器)验证数据的有效性。


阶段3:PPP回叫控制。微软设计的PPP包括一个可选的回叫控制阶段。该阶段在完成验证之后使用回叫控制协议(CBCP)如果配置使用回叫,那么在验证之后远程客户和 NAS之间的连接将会被断开。然后由NAS使用特定的电话号码回叫远程客户。这样可以进一步保证拨号网络的安全性。NAS只支持对位于特定电话号码处的远程客户进行回叫。


阶段4:调用网络层协议。在以上各阶段完成之后,PPP将调用在链路创建阶段(阶段1)选定的各种网络控制协议(NCP)。例如,在该阶段IP控制协议(IPCP)可以向拨入用户分配动态地址。在微软的PPP方案中,考虑到数据压缩和数据加密实现过程相同,所以共同使用压缩控制协议协商数据压缩(使用MPPC)和数据加密(使用MPPE)。


一旦完成上述4阶段的协商,PPP就开始在连接对等双方之间转发数据。每个被传送的数据报都被封装在PPP包头内,该包头将会在到达接收方之后被去除。如果在阶段1选择使用数据压缩并且在阶段4完成了协商,数据将会在被传送之前进行压缩。类似的,如果如果已经选择使用数据加密并完成了协商,数据(或被压缩数据)将会在传送之前进行加密。


三、常见的隧道协议


1、点对点隧道协议(PPTP)


PPTP是一个第2层的协议,将PPP数据帧封装在IP数据报内通过IP网络,如Internet传送。PPTP还可用于专用局域网络之间的连接。RFC草案“点对点隧道协议”对PPTP协议进行了说明和介绍。该草案由 PPTP论坛的成员公司,包括微软、Ascend、3Com和ECI 等公司在1996年6月提交至IETF。PPTP使用一个TCP连接对隧道进行维护,使用通用路由封装(GRE)技术把数据封装成PPP数据帧通过隧道传送。可以对封装PPP帧中的负载数据进行加密或压缩。


2、第2层转发(L2F)


L2F是Cisco公司提出隧道技术,作为一种传输协议L2F支持拨号接入服务器,将拨号数据流封装在PPP帧内通过广域网链路传送到 L2F服务器(路由器)。L2F服务器把数据包解包之重新注入(Inject)网络。与PPTP和L2TP不同,L2F没有确定的客户方。应当注意L2F只在强制隧道中有效。


3、第2层隧道协议(L2TP)


L2TP结合了PPTP和L2F协议。设计者希望L2TP能够综合PPTP和L2F的优势。L2TP是一种网络层协议,支持封装的PPP帧在IP、X.25、帧中继或ATM等的网络上进行传送。当使用IP作为L2TP的数据报传输协议时,可以使用 L2TP作为Internet上的隧道协议。L2TP还可以直接在各种 WAN媒介上使用而不需要使用IP传输层。RFC“第2层隧道协议”对 L2TP 进行了说明和介绍。该文档于 1998年1月被提交至 IETF。


IP网上的L2TP使用UDP和一系列的L2TP消息对隧道进行维护。L2TP同样使用UDP将L2TP协议封装的PPP帧通过隧道发送。可以对封装在PPP帧中的负载数据进行加密或压缩。


PPTP 和 L2TP 都使用 PPP 协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。尽管两个协议非常相似,但是仍存在以下几方面的不同:


PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接。L2TP可以在IP(使用UDP)、帧中继永久虚拟电路(PVC)、X.25虚拟电路(VC)或ATM VC网络上使用。


PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道。使用L2TP,用户可以针对不同的服务质量创建不同的隧道。


L2TP可以提供包头压缩。当压缩包头时,系统开销(overhead)占用4字节,而PPTP协议下要占用6字节。


L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道。


因为第2层隧道协议(PPTP和L2TP)以完善的PPP协议为基础,因此继承了一整套的特性。


用户验证。


令牌卡(Token Card)支持。通过使用扩展验证协议(EAP),第2层隧道协议能够支持多种验证方法,包括一次性口令(One-Time Password)、加密计算器(Cryptographic Calculator)和智能卡等。


动态地址分配。第2层隧道协议支持在网络控制协议(NCP)协商机制的基础上动态分配客户地址。第 3 层隧道协议通常假定隧道建立之前已经进行了地址分配。目前IPSEC隧道模式下的地址分配方案仍在开发之中。


数据压缩。第 2层隧道协议支持基于 PPP的数据压缩方式。例如,微软的 PPTP和L2TP方案使用微软点对点加密协议(MPPE)。IETP正在开发应用于第3层隧道协议的类似数据压缩机制。


数据加密。第2层隧道协议支持基于PPP的数据加密机制。微软的PPTP方案支持在RSA/RC4算法的基础上选择使用MPPE。


密钥管理。作为第2层协议的MPPE依靠验证用户时生成的密钥,定期对其更新。


多协议支持。第2层隧道协议支持多种负载数据协议,从而使隧道客户能够访问使用IP、IPX,或NetBEUI等多种协议企业网络。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存