【365bet体育在线官网】Linux平台VPN技巧概论,优劣

声明:

1.对于IPSec,不谈其Tunnel以及Transport模式
2.对于OpenVPN,不剖析代码
3.不涉及Linux内核源码剖析
4.不深入谈PPTP以及L2TP
5.本文不是HOWTO也不是技术文档
6.本文的性质是科普

姓名:刘登贤

第一部分.VPN要解决的问题以及方案

 

学号:14310116024

一.问题及方案

基于主机的第三层vpn的要旨就是“透明/安全的接入”,其中透明的含义就是配置要简单,尽量让用户感觉不到vpn的存在,因此这种vpn的实现其实只要解决两个问题即可:
1.如何拿到第N层数据,然后放回第M层;
2.加密/解密第三层ip数据报;

针对第一个问题,实际上我们依赖的是这样一个事实,即OSI的分层网络模型,这样才可以使第M层将第N层的PDU当成有效载荷,解析时只需要根据下层的协议号就可以定位上一层的协议类型。以封装第三层数据的VPN为例,上述第一个问题在linux上有三种方案:

转载自:            

1.使用netfilter

使用netfilter无疑是最直接的方式,对于接收的包,需要在prerouting上挂载一个钩子,对于本地发出的包,则需要在output上挂载一个钩子,这样就可以在钩子函数中进行加密/解密处理了,处理完毕之后再根据策略封装成一个新的ip数据报,重新路由并且发送出去或者接收。
365bet体育在线官网 1

                            

2.使用虚拟网卡

这是一种不直接但是很自然的方式,因为,我们知道从网卡出来的包一个包含一个IP数据报(暂不考虑其它三层协议,比如ipx)。实现一个虚拟网卡,在其xmit发送函数中处理加密,然后重新封装,重新路由。这里暂时先不考虑在哪里解密,因为网卡发送和接收的逻辑是不一样的,我们可以实现一个虚拟网卡,然而却不能修改ip协议栈,除非使用netfilter。
365bet体育在线官网 2

                            

3.将IP数据报导出到用户态,比如使用packet套结字以及替换send/recv

这是最灵活的方案,然而如果使用packet的话却不行。因为packet无法截获数据报。因此需要在socket层次替换send/recv函数,实现加密/封装以及解密/解封装。这里暂时不考虑send处理,因为对于一般的应用数据,是很难替换send的(Linux没有windows的LSP机制),这种方式,控制接收较方便,而控制发送则很难,和使用虚拟网卡的情形正好相反。
365bet体育在线官网 3
我们发现,2和3是互补的,虚拟网卡很容易拿到发出的未封装的原始IP数据报-通过路由即可,但是拿不到接收的封装过的IP数据报,而替换socket的send/recv则很容易拿到接收的封装过的IP数据报但是拿不到发送的未封装的IP数据报。因此将2和3结合一下,就出现了第四种方式。接下来我们来讨论vpn整体的设计。在架设vpn的时候,首先要明白三件事:
1.确定不安全通路的两个端点。我们就在这两个端点之间建立vpn通路;
2.要考虑到对forward数据包的支持,否则就没有必要使用三层vpn了,使用应用层vpn即可。
3.隧道的概念。隧道其实就是vpn链路两个端点之间的加密通路,其中封装着加密后的原始IP数据报。

确定了vpn链路的端点以后,就可以根据上述的3种方式进行加密/封装,解密/解封装的操作了,也就是说,修建一条隧道。具体的方案如下:

                            

方案1:采用netfilter的方式

这种方案部署起来比较简单,因为端点的两台设备是对称的,netfilter钩子会处理IPSec协议逻辑。成型的项目有Freeswan等,具体细节参见《FreeSWAN 结构框架》。

                            

方案2:虚拟网卡+udp

这种方案在端点两端的加密/封装,解密/解封装是不对称的,其中加密/封装这步操作在虚拟网卡完成,解密在recv逻辑中完成,解封装在send逻辑中完成。成型的项目如cipe等。数据通路实际上就是虚拟网卡的方式和导出到用户态方式的结合
365bet体育在线官网 4

设计要点:
1.VPN隧道终点使用UDP端口区分了不同的IP安全通道,而不需要采用IPSec的方式;
2.为何不用TCP呢?因为会引起重传叠加导致网络不可用,详见CIPE的作者所做:《Why TCP Over TCP Is A Bad Idea》。同样的规则在后续的OpenVPN中依然如此,详见OpenVPN的man手册中的--proto选项。
3.加密在内核态,解密在用户态-使用UDP,之所以这样的不对称法是因为UDP端口是可以从客户端“连接(访问的含义)”的,不同的UDP端口就可以区分出来自不同地点的IP安全通道。这种方案依赖于,安全隧道总是由外部(位置不确定的互联网的任意一处)先发起建立请求。后面的OpenVPN的C/S模型也有赖于这个事实。

365bet体育在线官网 5

【嵌牛导读】:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

【嵌牛鼻子】:关于vpn的不同连接方式和协议

【嵌牛提问】:vpn有各种各样的实现方式和协议,它们的区别和优缺点有哪些?

【嵌牛正文】:

                    VPN是企业通信的常用技术,可以对网络加密,使得其安全性能提升。常用的VPN协议有PPTP、L2TP、OpenVPN,那这三种VPN有什么优势呢?

  一、PPTP、L2TP、OpenVPN三种隧道协议的概念

  1、PPTP(Point to Point Tunneling Protocol,点对点隧道协议)默认端口号:1723

  PPTP,即PPTF协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码身份验证协议(PAP)、可扩展身份验证协议(EAP)等方法增强安全性。可以使远程用户通过拨入ISP、通过直接连接Internet或其他网络安全地访问企业网。

  点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,它工作在第二层。通过该协议,远程用户能够通过 Microsoft Windows NT工作站、Windows xp 、Windows 2000 和windows2003、windows7操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过Internet 安全链接到公司网络。

  PPTP协议是点对点隧道协议,其将控制包与数据包分开,控制包采用TCP控制。PPTP使用TCP协议,适合在没有防火墙限制的网络中使用。

  2、L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)

  L2TP是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。

  L2TP是一个数据链路层协议,基于UDP。其报文分为数据消息和控制消息两类。数据消息用投递 PPP 帧,该帧作为L2TP报文的数据区。L2TP不保证数据消息的可靠投递,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。控制消息用以建立、维护和终止控制连接及会话,L2TP确保其可靠投递,并支持对控制消息的流量控制和拥塞控制。

L2TP是国际标准隧道协议,它结合了PPTP协议以及第二层转发L2F协议的优点,能以隧道方式使PPP包通过各种网络协议,包括ATM、SONET和帧中继。但是L2TP没有任何加密措施,更多是和IPSec协议结合使用,提供隧道验证。

  L2TP使用UDP协议,一般可以穿透防火墙,适合在有防火墙限制、局域网用户,如公司、网吧、学校等场合使用。

  PPTP和L2TP二个连接类型在性能上差别不大,如果使用PPTP不正常,那就更换为L2TP。

  3、OpenVPN

  OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现。

  虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。

  OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

  OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。

  在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

  OpenVPN是一个基于SSL加密的纯应用层VPN协议,是SSL VPN的一种,支持UDP与TCP两种方式(说明:UDP和TCP是2种通讯协议,这里通常UDP的效率会比较高,速度也相对较快。所以尽量使用UDP连接方式,实在UDP没法使用的时候,再使用TCP连接方式)。

  由于其运行在纯应用层,避免了PPTP和L2TP在某些NAT设备后面不被支持的情况,并且可以绕过一些网络的封锁(通俗点讲,基本上能上网的地方就能用OpenVPN)。

  OpenVPN客户端软件可以很方便地配合路由表,实现不同线路(如国内和国外)的路由选择,实现一部分IP走VPN,另一部分IP走原网络。

  二、PPTP、L2TP、OpenVPN三种隧道协议的优缺点对比

  易用性: PPTP > L2TP > OpenVPN

  速度: PPTP > OpenVPN UDP > L2TP > OpenVPN TCP

  安全性: OpenVPN > L2TP > PPTP

  稳定性: OpenVPN > L2TP > PPTP

  网络适用性:OpenVPN > PPTP > L2TP

  三、VPN协议的选择

  电脑上优先使用PPTP,无法使用可以尝试L2TP,对安全性要求高的优先使用OpenVPN。手持设备推荐使用L2TP。

  PPTP: 最常用,设置最简单,大多数设备都支持;

  L2TP: 支持PPTP的设备基本都支持此种方式,设置略复杂,需要选择L2TP/IPSec PSK方式,且设置预共享密钥PSK;

  OpenVPN:最稳定,适用于各种网络环境,但需要安装第三方软件和配置文件,较复杂。

  但如今有了更加优秀的选择 IKEv2,更加轻便、快速,也是windows phone中唯一支持的VPN协议(好像最近支持了L2TP)

四、关于加密的方式

            PPTP使用MPPE进行加密,L2TP/IPSec和IPSec隧道模式使用IPSec。

                            选择远程访问VPN协议

            PPTP和L2TP/IPSec的区别主要有:

PPTP使用MPPE进行加密,L2TP/IPSec和IPSec隧道模式使用IPSec ESP进行加密。

PPTP加密在PPP身份验证通过后处理连接时开始,因此,身份验证过程没有被MPPE加密。L2TP/IPSec会先进行安全协商再进行身份验证,并对PPP身份验证数据包进行加密,因此L2TP/IPSec比PPTP提供了更高的安全性。

PPTP使用MMPE和RC4,而L2TP/IPSec使用DES或3DES;

PPTP和L2TP/IPSec均要求用户使用基于PPP的身份验证协议进行身份验证;

L2TP/IPSec还要求使用计算机证书进行计算机验证。因此,L2TP/IPSec提供了更强壮的身份验证过程。但是,带来的不便之处是L2TP/IPSec需要公共密钥基础服务(PKI)或预共享的连接密钥,而PPTP则无需PKI。

IPSec ESP要求基于数据包的数据源验证和数据完整性验证,另外,IPSec ESP提供了中继保护,这防止了数据包的重现攻击;而PPTP没有提供这些保护。

IPSec ESP和PPTP(通过使用MPPE)提供了基于每个数据包的加密。

你可以将基于PPTP的VPN服务器部署在NAT网关后,但是不建议将基于L2TP/IPSec、IPSec的VPN服务器部署在NAT网关后。

L2TP/IPSec比PPTP更耗费CPU性能。

        IPSec的优点:

如果在路由器或防火墙上执行了IPSec,它就会为周边的通信提供强有力的安全保障。一个公司或工作组内部的通信将不涉及与安全相关的费用。下文叙 述了IPSec的一些优点:

IPSec在传输层之下,对于应用程序来说是透明的。当在路由器或防火墙上安装IPSec时,无需更改用户或服务器系统中的软件设置。即使在终端系 统中执行IPSec,应用程序一类的上层软件也不会被影响。

IPSec对终端用户来说是透明的,因此不必对用户进行安全机制的培训。

如果需要的话,IPSec可以为个体用户提供安全保障,这样做就可以保护企业内部的敏感信息。

IPSec正向Internet靠拢。已经有一些机构部分或全部执行了IPSec。IAB的前任总裁Christian Huitema认为,关于如何保证Internet安全的讨论是他所见过的最激烈的讨论之一。讨论的话题之一就是安全是否在恰当的协议层上被使用。想要提 供IP级的安全,IPSec必须成为配置在所有相关平台(包括Windows NT,Unix和Macintosh系统)的网络代码中的一部分。

实际上,现在发行的许多Internet应用软件中已包含了安全特征。例如,Netscape Navigator和Microsoft Internet Explorer支持保护互联网通信的安全套层协议(SSL),还有一部分产品支持保护Internet上信用卡交易的安全电子交易协议(SET)。然 而,VPN需要的是网络级的功能,这也正是IPSec所提供的。

        在选择VPN协议时,你应考虑以下几点:

是否存在公共密钥基础服务(PKI),如果不存在则选择PPTP;强烈建议不要在商用网络中通过预共享的连接密钥来使用L2TP,这样会极大的降低L2TP的安全性;

如果要求最高的安全级别,选择L2TP/IPSec;

只有在特别需要时才使用IPSec隧道模式;

如果企业安全策略要求DES或3DES,则使用L2TP/IPSec;

如果使用IPSec导致CPU负荷过重,使用PPTP;

如果VPN服务器部署在NAT网关后,选择PPTP;

部署PPTP比部署IPSec更为简单。

五、关于安全性

PPTP, IPSec/LT2P, SSTP 还有OPENVPN TCP UDP,PPTP, IPSec/LT2P, SSTP这3种VPN协议哪个最安全?

如果只是针对PPTP, IPSec/LT2P, SSTP和OpenVPN这几种协议来说,这几种协议都是有加密的,只不过加密位数略有区别,相对而言,用你理解的安全来说,pptp最弱,其他都是256位,见下图。但是实际上,对于破解此加密的风险,几乎可以忽略不计。

365bet体育在线官网 6

总的来说,IPsec是最安全的选择,因为当正确实施时它能够为你的网络通讯提供保密性、完整性和身份识别服务。微软的Windows本地不支持直接的IPsec协议,因此,设置VPN支持Windows客户软件的管理员经常提供IPsec over L2TP连接。

本文由365bet体育在线官网发布于365bet,转载请注明出处:【365bet体育在线官网】Linux平台VPN技巧概论,优劣

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。