首页 > 基础设施 > 正文

VPN实战:构建SSL VPN

2012-09-29 16:05:06  来源:TechTarget中国

摘要:本文介绍了如何使用OpenVPN构建SSL VPN安全通信。
关键词: VPN SSL

    OpenVPN 是一个强大、高度可配置、基于SSL的 VPN (Virtual Private Network)Open Source 软件。它具有多种的验证方式以及许多强大的功能。OpenVPN使用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加密保证数据传输的安全。


    通过数据的压缩,提高数据传输的速度。


    安装OpenVPN


    企业级Linux版本的的安装光盘中已经自带了OpenVPN的安装程序,在系统安装的时候,用户可以选择进行安装。如果系统安装时没有安装,用户也可以随时使用安装盘进行安装。为了确认系统是否已经安装该软件,可以使用如下命令进行查看:


    #rpm –qa | grep openvpn


    制作证书


    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,在前面加个#号即可


    修改证书默认值(如图1中白色区域所示)
 

\
 

    图1 修改vars文件中的相应区域


    3.初始化证书库


    主要包括初始化变量库和清空变量库两个步骤,如下所示的命令:


    //初始化变量库


    #./vars


    //清空证书库


    #./clean-all


    4.证书验证机制


    执行如下命令,如图2所示,在执行过程中,输入对应的信息,完成后在keys目录下,会生成ca.crt和ca.key这两个文件:
 

\
 

    图2  完成证书验证机制

[page]
    5.生成服务器证书


    执行。/build-key-server server命令,执行完成后在keys目录下,会生成server.crt、server.csr和server.key这三个文件,如图3所示:
 

\
 

    图3  生成服务器证书


    6.生成客户端证书


    在openvpn中,这种配置方法是每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接(如果有两个机器安装相同证书,同时拨服务器,都能拨上,但是只有第一个拨上的才能连通网络)。所以需要建立许多份证书。执行。/build-key vpn_client1命令将执行完成后在keys目录下,会生成vpn_client1.crt、vpn_client1.csr和vpn_client1.key这三个文件,如图4所示:
 

\
 

    图4 为客户端vpn_client1生成客户端证书


    一个服务器端可以配多个客户端证书,但是每个客户端都不能一样,主要体现在Common Name这里,每一个客户端的Common Name都必须不一样,用户可以再继续建出多个客户端证书,如下所示:


    #./build-key vpn_client2


    #./build-key vpn_client3


    7.编译证书


    采用。/build-dh命令将刚刚生成出来的证书和钥匙等等进行了一次加密算法,然后证书和钥匙都准备好了,此时在keys目录下,会生成dh1024.pem文件。如图5所示:
 

\
 

    图5  编译证书


    配置服务端


    如果上面所述的七步都运行正常的情况下,用户就开始配置服务端了,如果中间过程有出现什么问题,建议清空证书库,重新来过,执行。/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服务(如图6所示),并选中服务确认即可,下次系统启动的时候会自动加载openvpn服务:


    #ntsysv
 

\
 

    图6  设置OpenVPN开机启动


    (6)设置防火墙,使得VPN流量能够正常通过。在系统管理中,打开防火墙配置,开启OpenVPN和SSH(前面打沟即可),如图7所示:
 

\
 

    图7 设置防火墙

[page]
    配置客户端


    配置客户端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进行安全通信了。


    安装Ipsec-tools


    实现IPSec要求主机安装上ipsec-tools RPM 软件包,Red Hat Enterprise Linux  5一般默认安装。执行下述命令可以看到它的版本号为ipsec-tools-0.6.5-13.el5_3.1:


    # rpm -qa | grep ipsec


    ipsec-tools-0.6.5-13.el5_3.1


    配置IPSec VPn


    下面以一个实际的例子来讲述如何配置IPSec VPN.假设网络A和网络B想通过 IPsec 隧道来彼此连接。网络A的网络地址在172.1610.1.0/24 范围内,网络B使用 172.1610.2.0/24 范围。网络A的网关 IP 地址是 172.1610.1.1,网络B的网关地址是172.1610.2.1.每个网络间的 IPsec 连接使用一个值为sharekey的预共享钥匙,网络A和网络B都同意让 racoon 自动生成和共享每个 IPsec 路由器之间的验证钥匙。网络A把 IPsec 连接命名为 ipsec0,而网络B把 IPsec 连接命名为 ipsec1.


    上述配置可以在Red Hat Enterprise Linux 5系统中使用图形用户界面进行方便地配置,主要步骤如下:


    (1)进入IPSec VPN的主界面,具体路径为[系统]--〉[管理]--〉[网络]则弹出如图1所示的对话框;
 

\
 

    图1  进入IPSec VPN配置主界面


    (2)选择新建一个IPSec,并输入该隧道的描述名为securecomm,如图2所示;


    (3)选择IPSec VPN的连接类型,主机对主机加密或者是网络对网络的加密。后一种应用最为广泛,如图3所示,此处选择后一种方式;


    (4)选择IPSec VPN的加密模式,即使用何种密钥,此处选择常用的IKA模式,如图4所示;


    (5)设定IPSec VPN本地网络端的相关配置,如图5所示;


    (6)设定IPSec VPN远程网络端的相关配置,如图6所示;


    (7)设定IPSec共享key的名称,如图7所示;


    (8)完成上述步骤后,IPSec VPN已经设置完成,如图8所示,将显示设置的具体信息,以供用户核对;


    (9)如图9所示,IPSec VPN成功设置完成。
 

\
 

    图2  输入IPSec VPN描述名称
 

\
 

    图3  选择连接类型
 

\
 

    图4 选择采用IKA的自动加密模式
 

\
 

    图5 设定本地网络配置
 

\
 

    图6  设定远程网络配置
 

\
 

    图7  设定IPSec共享key的名称
 

\
 

    图8 设置完成,显示设置信息
 

\
 

    图9 设置好的IPSec VPN

[page]
    以下是网络A的 IPsec 连接的 ifcfg 文件。在这个例子中用来识别该连接的独特名称是 ipsec0,因此其结果文件被命名为 /etc/sysconfig/network-scripts/ifcfg-ipsec0.


    TYPE=IPSEC


    ONBOOT=false # 引导时不激活


    IKE_METHOD=PSK # 使用预共享密钥


    SRCGW=172.1610.1.10 # 源网关


    DSTGW=172.1610.2.10 # 目标网关


    SRCNET=172.1610.1.0/24 # 源网段


    DSTNET=172.1610.2.0/24 # 目标网段


    DST=192.1610.1.20 # 网络BVPN Server的外网IP


    以下是预共享钥匙文件(叫做 /etc/sysconfig/network-scripts/keys-ipsecX,这里的 X 对网络A来说是0,对网络B来说是1),两个工作站都使用它来彼此验证。该文件的内容应该完全一致,并且只有root用户才应该有读写权。


    IKE_PSK=yoyotown.com


    改变 keys-ipsec0 文件的权限,只有root用户才有读写权。


    #chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0


    要在任何时候改变验证钥匙,编辑两个 IPsec 路由器上的 keys-ipsecX 文件。这两个钥匙必须 完全一致才能保证正确的连接性。


    以下是 IPsec 连接的 /etc/racoon/racoon.conf 配置文件。


    # Racoon IKE daemon configuration file.


    # See 'man racoon.conf' for a description of the format and entries.


    path include “/etc/racoon”;


    path pre_shared_key “/etc/racoon/psk.txt”;


    path certificate “/etc/racoon/certs”;


    sainfo anonymous


    {


    pfs_group 2;


    lifetime time 1 hour ;


    encryption_algorithm 3des, blowfish 448, rijndael ;


    authentication_algorithm hmac_sha1, hmac_md5 ;


    compression_algorithm deflate ;


    }


    include “/etc/racoon/X.X.X.X.conf” # IPSec被激活时自动生成,X.X.X.X为远程VPN Server的外网IP


    以下是连接到远程网络时生成的配置文件。该文件的名称为 X.X.X.X.conf.注意,一旦IPsec隧道被激活,该文件会被自动生成。


    remote X.X.X.X


    {


    exchange_mode aggressive, main;


    my_identifier address;


    proposal {


    encryption_algorithm 3des;


    hash_algorithm sha1;


    authentication_method pre_shared_key;


    dh_group 2 ;


    }


    }


    在完成上述操作后,在启动 IPsec 连接前,内核中应该启用IP转发。在 shell 提示符下作为root用户来启用 IP 转发:


    (1)编辑 /etc/sysctl.conf,把 net.ipv4.ip_forward 设置为 1.


    (2)执行以下命令来启用改变:


    #sysctl -p /etc/sysctl.conf


    (3)以root用户身份启动 IPsec 连接:


    #service network restart


    这样,IPSec连接就被激活了,网络A和网络B能够安全地进行通信。
 


第三十四届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:zhangyexi

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。