基于虚拟机LINUX的SSL-VPN 网关搭建 下载本文

基于虚拟机LINUX的SSL-VPN 网关搭建

1 SSL-VPN的功能简介

在可信安全无线路由器的产品研发过程中,我们研发小组想要在可信安全路由上,搭建一个SSL-VPN虚拟网关的专用网络。VPN的功能是:在公用网络上建立专用网络,进行加密通讯。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问,在企业网络中有广泛应用。

OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI,它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现,和传统 VPN 相比,它的优点是简单易用。虚拟网卡是

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

2 OpenSSL与OpenVPN的安装 2.1 Linux下OpenSSL的安装

从OpenSSL官网上下载最新版本的OpenSSL软件openssl-1.0.1t并放入到虚拟机的Linux文件中,从终端进入OpenSSL的安装目录,并依次输入以下安装命令。(通过百度搜索官网就可以找到免费的软件源代码)

$ ./config #使用$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl #可以安装到指定目录下面

$ make $ make test $ make install

输入命令$ which opensll 可以查看OpenSSL的路径,命令$ openssl version可以查看所安装的OpenSSL版本号。

2.2 Linux下OpenVPN的安装

首先,从OpenVPN官网上下载最新版本的OpenVPN软件openvpn-2.3.11并放入到虚拟机的Linux文件中,从终端进入安装目录,并依次输入以下安装命令。

$ ./configure

在configure之后会因为缺少一些数据库出现各种报错信息,根据以下报错信息进行相应操作。

1.如果你没有安装OpenSSL,则会提示:

configure: error: ssl is required but missing

解决方法是执行命令:$ sudo apt-get install libssl-dev 2. 如果你没有安装lzo,则会提示:

configure: error: lzo enabled but missing

解决方法是执行命令:$ sudo apt-get install liblzo2-dev 3. 如果你没有安装PAM,则会提示:

configure: error: libpam required but missing

解决方法是执行命令:$ sudo apt-get install libpam0g-dev

$ make $ make install

同样可以使用命令$ which opensll 可以查看OpenSSL的路径,命令$ openssl --version可以查看所安装的OpenSSL版本号。

2.3 虚拟机LINUX下OpenVPN

通过安装OpenSSL与OpenVPN我们已经完成了在Linux上搭建SSL-VPN虚拟网的准备工作,接下来我要在两安装好OpenSSL与OpenVPN的Linux上分别配置OpenVPN服务器和客户端进行连接测试。

3 OpenVPN的服务器与客户端配置 3.1 配置OpenVPN服务器

1 从安装目录下复制配置文件easy-rsa到/etc下cp -R /usr/local/openvpn/examples/easy-rsa /etc/openvpn/

2 修改var文件 :vim /etc/openvpn/easy-rsa/2.0/vars。其实也可以不修改,但是为了后续步骤能够一路enter,所以就先在这里修改下吧。主要是要修改末尾的几行。

export KEY_COUNTRY=\export KEY_PROVINCE=\export KEY_CITY=\export KEY_ORG=\

export KEY_EMAIL=\export KEY_EMAIL=mail@host.domain export KEY_CN=changeme export KEY_NAME=changeme export KEY_OU=changeme

export PKCS11_MODULE_PATH=PKCS11_MODULE_PATH=changeme

export PKCS11_PIN=1234

“=”号后边就自己填入吧,我不知道大小写有没有影响,为了以防万一,还是按照它默认的格式来写吧。编辑完之后要记得保存。

3 设置环境变量

在ROOT下面建立隐藏文件的环境变量.bash_profile

Vi /root/.bash_profile

D=/root/Scripts/openvpn-2.0.9/easy-rsa KEY_CONFIG=$D/openssl.cnf KEY_DIR=$D/keys KEY_SIZE=1024

KEY_COUNTRY=CN KEY_PROVINCE=GD KEY_CITY=DG KEY_ORG=\

KEY_EMAIL=\

export KEY_CONFIG KEY_DIR KEY_SIZE KEY_COUNTRY KEY_PROVINCE

KEY_CITY KEY_ORG KEY_EMAIL D

同时在控制台终端输入:上面的全部命令

通过 echo $D

echo $KEY_SIZE 查看环境变量是否生效

4 生产证书和密钥

在/etc/openvpn/easy-rsa/2.0目录中执行下面命令: $ ./clean-al $ ./build-ca

$ ./build-key-server server

$ ./build-key client

同时可以生产其他客户端证书

$ ./build-key client1 $ ./build-key client2 $ ./build-dh

生产ta.key

$ openvpn --genkey --secret ta.key

新产生的证书可以在/etc/openvpn/easy-rsa/2.0/keys/目录下找到,将keys中的所有文件打包下载到本地提供给客户端。 ## ta.key 可能在上级目中,也要将其一起打包

$ cp -r /etc/openvpn/easy-rsa/2.0/keys /home/gaowd/

5 创建OpenVPN服务器配置文件

[root@xxx keys]# vim /usr/local/etc/server.conf

port 2000 proto udp

dev tun server 20.10.0.0 255.255.255.0 #虚拟IP push \内网IP ifconfig-pool-persist /usr/local/etc/ipp.txt ca /usr/local/etc/keys/ca.crt

cert /usr/local/etc/keys/server.crt key /usr/local/etc/keys/server.key dh /usr/local/etc/keys/dh1024.pem tls-auth /usr/local/etc/keys/ta.key 0 keepalive 10 120 comp-lzo

status /var/log/openvpn-status.log verb 4 persist-key persist-tun

##tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表 #虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。

##cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /usr/local/etc ##gunzip server.conf.gz 得到一个server.conf 文件

7配置就绪后启动OpenVPN

[root@xxx keys]# openvpn --config /usr/local/etc/server.conf

Wed Jul 25 16:00:28 2012 us=796069 UDPv4 link local (bound): [undef]:2000 Wed Jul 25 16:00:28 2012 us=796706 UDPv4 link remote: [undef]

Wed Jul 25 16:00:28 2012 us=797411 MULTI: multi_init called, r=256 v=256 Wed Jul 25 16:00:28 2012 us=798210 IFCONFIG POOL: base=20.0.0.4 size=62 Wed Jul 25 16:00:28 2012 us=799178 IFCONFIG POOL LIST

Wed Jul 25 16:00:28 2012 us=800104 client1,20.0.0.4

Wed Jul 25 16:00:28 2012 us=801389 Initialization Sequence Completed

最后一行提示Initialization Sequence Completed表明启动成功。 8 调试结束后可以后台方式启动openvpn

openvpn --daemon --config /usr/local/etc/server.conf 并把这一句添加到/ect/rc.local 文件中 可以验证一下openvpn到底有没真正起来: [root@xxx openvpn-2.0.9]# lsof -i :2000

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME openvpn 21355 root 5u IPv4 22646 UDP *:2000 [root@xxx openvpn-2.0.9]# lsmod |grep tun tun 21441 2

3.2 Linux下配置 OpenVPN 客户端

1 在linux下配置客户端

首先将OpenVPN服务器提供的配置文件解压,并将所有文件都复制到 /etc/openvpn/中。并在其中编辑配置文件client.conf

client dev tun proto udp

remote 192.168.1.135 2000 # 服务器的实际ip

# push \ ###服务器内 resolv-retry infinite #断网自动连接 persist-key persist-tun ca ca.crt

cert client.crt key client.key

tls-auth ta.key 1 #服务器设置防御DOS等攻击时,客户端不能注释掉 ns-cert-type server comp-lzo verb 3

;redirect-gateway def1 tls-auth ta.key 1

2 连接OpenVPN服务器

在配置好.ovpn文件后,执行$ openvpn /etc/openvpn/client.ovpn

此时,终端会回显很多连接日志。如果连接不成功,则可以通过这些日志来确定出错位置。如果要断开,只需要通过Ctrl+C强制终止即可。

上面的命令在实际中并不方便,因为它要占用一个独立的终端。在测试成功后,使用以下命令即可在后台连接OpenVPN:

$ openvpn /etc/openvpn/client.ovpn > /dev/null &

值得称赞的是,openvpn非常智能,在连接异常中断、无法连接服务器、断网的情况下,它会自动重连。因此,如果希望开机即自动连接OpenVPN,或者是VPN常年在线,则可将上述命令行加入/etc/rc.local文件中。

注意:命令末尾的&符号不能省略,否则将可能阻塞系统的正常启动。