随着网络通信技术的发展和网络应用的不断涌现,越来越多的用户数据和企业信息在互联网进行传送。随之而来的是越来越多的黑客和网络威胁,他们对这些机密、敏感的数据采用各种手段进行窃取、篡改和破坏,从而达到其不可告人的目的。因此,通信数据的安全性受到前所未有的挑战。鉴于这个目的,保证数据传输安全的VPN技术应运而生。
VPN技术原理
虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。通过将数据流转移到低成本的压网络上,一个企业的虚拟专用网解决方案将大幅度地减少用户花费在城域网和远程网络连接上的费用。同时,这将简化网络的设计和管理,加速连接新的用户和网站。另外,虚拟专用网还可以保护现有的网络投资。随着用户的商业服务不断发展,企业的虚拟专用网解决方案可以使用户将精力集中到自己的生意上,而不是网络上。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。
虚拟专用网至少应能提供如下功能:
加密数据,以保证通过公网传输的信息即使被他人截获也不会泄露。
信息认证和身份认证,保证信息的完整性、合法性,并能鉴别用户的身份。
提供访问控制,不同的用户有不同的访问权限。
VPN具有以下优点:
(1)降低成本:企业不必租用长途专线建设专网,不必大量的网络维护人员和设备投资。利用现有的公用网组建的Intranet,要比租用专线或铺设专线要节省开支,而且当距离越远时节省的越多。如:某企业的北京与纽约分部之间的连接,不太可能自铺专线;当一个远程用户在纽约想要连到北京的Intranet,用拨号访问时,花的是国际长途话费;而用VPN技术时,只需在纽约和北京分别连接到当地的Internet就实现了互联,双方花的都是市话费。
(2)容易扩展:网络路由设备配置简单,无需增加太多的设备,省时省钱。对于发展很快的企业来说,VPN就更是不可不用了。如果企业组建自己的专用网,在扩展网络分支时,要考虑到网络的容量,架设新链路,增加互联设备,升级设备等;而实现了VPN就方便多了,只需连接到公用网上,对新加入的网络终端在逻辑上进行设置,也不需要考虑公用网的容量问题、设备问题等。
(3)完全控制主动权:VPN上的设施和服务完全掌握在企业手中。例如,企业可以把拨号访问交给NSP去做,由自己负责用户的查验、访问权、网络地址、安全性和网络变化管理等重要工作。
二、 VPN的分类
VPN的分类方式比较混乱。不同的生产厂家在销售它们的VPN产品时使用了不同的分类方式,它们主要是产品的角度来划分的。不同的ISP在开展VPN业务时也推出了不同的分类方式,他们主要是从业务开展的角度来划分的。而用户往往也有自己的划分方法,主要是根据自己的需求来进行的。下面简单介绍从不同的角度对VPN的分类。
1.按接入方式划分
这是用户和运营商最关心的VPN划分方式。一般情况下,用户可能是专线上(因特)网的,也可能是拨号上网的,这要根据拥护的具体情况而定。建立在IP网上的VPN也就对应的有两种接入方式:专线接入方式和拨号接入方式。
(1)专线VPN:它是为已经通过专线接入ISP边缘路由器的用户提供的VPN解决方案。这是一种“永远在线”的VPN,可以节省传统的长途专线费用。
(2)拨号VPN(又称VPDN):它是向利用拨号PSTN或ISDN接入ISP的用户提供的VPN业务。这是一种“按需连接”的VPN,可以节省用户的长途电话费用。需要指出的是,因为用户一般是漫游用户,是“按需连接的,因此VPDN通常需要做身份认证(比如利用CHAP和RADIUS)
2.按协议实现类型划
这是VPN厂商和ISP最为关心的划分方式。根据分层模型,VPN可以在第二层建立,也可以在第三层建立(甚至有人把在更高层的一些安全协议也归入VPN协议。)
(1)第二层隧道协议:这包括点到点隧道协议(PPTP)、第二层转发协议(L2F),第二层隧道协议(L2TP)、多协议标记交换(MPLS)等。
(2)第三层隧道协议:这包括通用路由封装协议(GRE)、IP安全(IPSec),这是目前最流行的两种三层协议。
第二层和第三层隧道协议的区别主要在于用户数据在网络协议栈的第几层被封装,其中GRE、IPSec和MPLS主要用于实现专线VPN业务,L2TP主要用于实现拨号VPN业务(但也可以用于实现专线VPN业务),当然这些协议之间本身不是冲突的,而是可以结合使用的。
3.按VPN的发起方式划分
这是客户和IPS最为关心的VPN分类。VPN业务可以是客户独立自主实现的,也可以是由ISP提供的。
(1)发起(也称基于客户的):VPN服务提供的其始点和终止点是面向客户的,其内部技术构成、实施和管理对VPN客户可见。需要客户和隧道服务器(或网关)方安装隧道软件。客户方的软件发起隧道,在公司隧道服务器处终止隧道。此时ISP不需要做支持建立隧道的任何工作。经过对用户身份符(ID)和口令的验证,客户方和隧道服务器极易建立隧道。双方也可以用加密的方式通信。隧道一经建立,用户就会感觉到ISP不在参与通信。
(2)服务器发起(也称客户透明方式或基于网络的):在公司中心部门或ISP处(POP、Point of presence)安装VPN软件,客户无须安装任何特殊软件。主要为ISP提供全面管理的VPN服务,服务提供的起始点和终止点是ISP的POP,其内部构成、实施和管理对VPN客户完全透明。
在上面介绍的隧道协议中,目前MPLS只能用于服务器发起的VPN方式。
4.按VPN的服务类型划分
根据服务类型,VPN业务大致分为三类:接入VPN(Access VPN)、内联网VPN(Intranet VPN)和外联网VPN(Extranet VPN)。通常情况下内联网VPN是专线VPN。
(1)接入VPN:这是企业员工或企业的小分支机构通过公网远程访问企业内部网络的VPN方式。远程用户一般是一台计算机,而不是网络,因此组成的VPN是一种主机到网络的拓扑模型。需要指出的是接入VPN不同于前面的拨号VPN,这是一个容易发生混淆的地方,因为远程接入可以是专线方式接入的,也可以是拨号方式接入的。
(2)内联网VPN:这是企业的总部与分支机构之间通过公网构筑的虚拟网,这是一种网络到网络以对等的方式连接起来所组成的VPN.
(3)外联网VPN:这是企业在发生收购、兼并或企业间建立战略联盟后,使不同企业间通过公网来构筑的虚拟网。这是一种网络到网络以不对等的方式连接起来所组成的VPN(主要在安全策略上有所不同)。
5.按承载主体划分
营运VPN业务的企业;既可以自行建设他们的VPN网络,也可以把此业务外包给VPN商。这是客户和ISP最关心的问题。
(1)自建VPN:这是一种客户发起的VPN.企业在驻地安装VPN的客户端软件,在企业网边缘安装VPN网关软件,完全独立于营运商建设自己的VPN网络,运营商不需要做任何对VPN的支持工作。企业自建VPN的好处是它可以直接控制VPN网络,与运营商独立,并且VPN接入设备也是独立的。但缺点是VPN技术非常复杂,这样组建的VPN成本很高,QoS也很难保证。
(2)外包VPN:企业把VPN服务外包给运营商,运营商根据企业的要求规划、设计、实施和运维客户的VPN业务。企业可以因此降低组建和运维VPN的费用,而运营商也可以因此开拓新的IP业务增值服务市场,获得更高的收益,并提高客户的保持力和忠诚度。笔者将目前的外包VPN划分为两种:基于网络的VPN和基于CE(用户边缘设备)的管理型VPN(Managed VPN)。基于网络的VPN通常在运营商网络的呈现点(POP)安装电信级VPN交换设备。基于CE的管理型VPN业务是一种受信的第三方负责设计企业所希望的VPN解决方案,并代表企业进行管理,所使用的安全网关(防火墙、路由器等)位于用户一侧。
6.按VPN业务层次模型划分
这是根据ISP向用户提供的VPN服务工作在第几层来划分的(注意不是根据隧道协议工作在哪一层划分的)。
(1)拨号VPN业务(VPDN):这是第一种划分方式中的VPDN(事实上是按接入方式划分的,因为很难明确VPDN究竟属于哪一层)。
(2)虚拟租用线(VLL):这是对传统的租用线业务的仿真,用IP网络对租用线进行模拟,而从两端的用户看来这样一条虚拟租用线等价于过去的租用线。
(3)虚拟专用路由网(VPRN)业务:这是对第三层IP路由网络的一种仿真。可以把VPRN理解成第三层VPN技术。
(4)虚拟专用局域网段(VPLS):这是在IP广域网上仿真LAN的技术。可以把VPLS理解成一种第二层VPN技术。三、 使用OpenVPN
OpenVPN 是一个强大、高度可配置、基于ssl的 VPN (Virtual Private Network)Open Source 软件。它具有多种的验证方式以及许多强大的功能。OpenVPN工作在OSI模型的第2或第3层,使用SSL/TLS协议进行网络传输。支持多种客户认证方法,如证书、smart cards,加上用户名密码的证书认证等。除此以外,还有强大的ACL功能限制客户的信息交换。
OpenVPN可以运行在多种操作系统中,包括:Linux, Windows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris。通过使用OpenVPN,可以实现:
使用特定udp或tcp端口实现两台主机的之间的VPN连接。
实现C/S结构,实现多台client通过server服务器互连互通。
通过TLS/SSL加密保证数据传输的安全。
通过数据的压缩,提高数据传输的速度。
主流Linux的安装光盘中已经自带了OpenVPN的安装程序,在系统安装的时候,用户可以选择进行安装。如果系统安装时没有安装,用户也可以随时使用安装盘进行安装。为了确认系统是否已经安装该软件,可以使用如图 1的命令,进行查看,图中显示结果表明系统已经安装了该软件:
图 1 查询OpenVPN的安装情况
(1)制作证书
1.制作证书前的准备
复制openVPN证书工具包,在安装完openVPN后,系统会在/etc下建一个openVPN的目录,这样我们可以把openVPN证书工具包拷贝到/etc/openVPN目录下,需要注意如下几个主要的存放位置:
证书工具包默认位置:/usr/share/openVPN/easy-rsa
准备配置证书位置:/etc/openVPN/
证书生成位置:/etc/openVPN/easy-rsa/2.0/keys
使用命令如下所示:
# cp -r /usr/share/openVPN/easy-rsa /etc/openVPN/
# mkdir /etc/openVPN/easy-rsa/2.0/keys
2.修改vars变量初始化配置文件
编辑easy-rsa/2.0/vars文件,需要进行如下几个操作:
注释掉export CA_EXPIRE=3650,在前面加个#号即可
注释掉export KEY_EXPIRE=3650,在前面加个#号即可
修改证书默认值(如图 2中白色区域所示)
图 2 修改vars文件中的相应区域
3.初始化证书库
主要包括初始化变量库和清空变量库两个步骤,如下所示的命令(参见图 3):
//初始化变量库
#./vars
//清空证书库
#./clean-all
图 3 初始化证书库
4.证书验证机制
执行如下命令,如图 4所示,在执行过程中,输入对应的信息,完成后在keys目录下,会生成ca.crt和ca.key这两个文件:
图 4 完成证书验证机制
5.生成服务器证书
执行./build-key-server server命令,执行完成后在keys目录下,会生成server.crt、server.csr和server.key这三个文件,如图 5所示:
图 5 生成服务器证书
6.生成客户端证书
在openVPN中,这种配置方法是每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络)。所以需要建立许多份证书。执行./build-key VPN_client1命令将执行完成后在keys目录下,会生成VPN_client1.crt、VPN_client1.csr和VPN_client1.key这三个文件,如图 6所示:
图 6 为客户端VPN_client1生成客户端证书
一个服务器端可以配多个客户端证书,但是每个客户端都不能一样,主要体现在Common Name这里,每一个客户端的Common Name都必须不一样,用户可以再继续建出多个客户端证书,如下所示:
#./build-key VPN_client2
#./build-key VPN_client3
7.编译证书
采用./build-dh命令将刚刚生成出来的证书和钥匙等等进行了一次加密算法,然后证书和钥匙都准备好了,此时在keys目录下,会生成dh1024.pem文件。如图 7所示:
图 7 编译证书(2)配置服务端
如果以上所述的七步都运行正常的情况下,用户就开始配置服务端了,如果中间过程有出现什么问题,建议清空证书库,重新来过,执行./clean-all来清空库即可。
配置客户端需要执行如下几个步骤:
(1)首先把几个证书、钥匙和验证机制都拷贝到/etc/openVPN目录下,如下命令所示:
# cp /etc/openVPN/easy-rsa/2.0/keys/ca.crt /etc/openVPN/
# cp /etc/openVPN/easy-rsa/2.0/keys/dh1024.pem /etc/openVPN/
# cp /etc/openVPN/easy-rsa/2.0/keys/server.crt /etc/openVPN/
# cp /etc/openVPN/easy-rsa/2.0/keys/server.key /etc/openVPN/
(2)然后把服务器的配置文件拷贝到/etc/openVPN目录下,如下所示:
# cp /usr/share/doc/openVPN-2.1/sample-config-files/server.conf /etc/openVPN/
(3)编辑/etc/openVPN/server.conf配置文件,去掉下述选项前面的;分号,以使其生效:
;user nobody
;group nobody
(4)启动openVPN,查看一下端口1194是否已开放,如果1194已开放那就表明openVPN服务端已经配置成功了,如下所示:
#/etc/init.d/openVPN start
(5)设置开机自启动openVPN,使用如下命令,找到openVPN服务(如图 8所示),并选中服务确认即可,下次系统启动的时候会自动加载openVPN服务:
#ntsysv
图 8 设置OpenVPN开机启动
(6)设置防火墙,使得VPN流量能够正常通过。在系统管理中,打开防火墙配置,开启OpenVPN和SSH(前面打沟即可),如图 9所示:
图 9 设置防火墙
(3) 配置客户端
配置客户端VPN_client1需要使用源代码包目录sample-config-files里的client.conf 修改即可,如下片段所示:
client
dev tun
proto tcp
remote IP_address port
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert VPN_client1.crt。
key VPN_client1.key
#comp-lzo
其中,主要考虑如下几个参数的设定:
proto tcp或proto udp:和server.conf 一致即可
remote IP_address port:指定VPN server 的IP 地址和端口
cert VPN_client1.crt和key VPN_client1.key:这2 行填给VPN_client1生成的密钥文件
通过如上配置后,就可以使用OpenVPN进行安全通信了。 (4)一个具体的配置实例
假设要搭建一个VPN服务,VPN服务端是有两个IP地址,其中eth0(172.16.6.79)提供VPN服务,由外部通过172.31.16.0/24通过1194端口拨入,然后通过eth1(192.168.253.79)访问192.168.253.0/24去维护服务器。
具体的配置如下:
1.服务器端配置
VPN server 的目录/etc/openVPN 下有文件ca.crt,ca.key,dh1024.pem,server.crt,server.key和server.conf 以及子目录ccd。/etc/openVPN/ccd 目录下有文件client1,client2 和client3。
(1)/etc/openVPN/server.conf 内容如下:
;local a.b.c.d
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openVPN-status.log
verb 3
client-config-dir ccd
#使VPN clients 能访问VPN server 内部网段计算机
push "route 172.16.6.0 255.255.255.0"
route 172.31.13.0 255.255.255.0
(2)/etc/openVPN/ccd/client1 内容如下:
ifconfig-push 10.8.0.5 10.8.0.6
iroute 172.31.13.0 255.255.255.0
2.客户机端配置
VPN client1 的目录/etc/openVPN 下有文件ca.crt,ca.key client1.crt,client1.key 和client1.conf。
/etc/openVPN/client1.conf 内容如下:
Client
dev tun
proto udp
remote 172.16.6.79 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
keepalive 10 120