- 浏览: 498931 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (258)
- 0-中医 (83)
- 1-工作 (4)
- 2-生活 (17)
- 3-其他 (3)
- oracle_dev (5)
- oracle_dba (35)
- ebs_gl (1)
- ebs_ap (0)
- ebs_po (0)
- ebs_hr_people (0)
- ebs_hr_payroll (0)
- java (12)
- javaScript (7)
- JSP2.0 (4)
- springMVC (3)
- spring (4)
- iBatis (5)
- Hibernate (3)
- tomcat (2)
- linux (13)
- 网络 (3)
- python (25)
- Django (11)
- z-技术 (13)
- PHPCMS (0)
最新评论
-
bo521dai:
Bravo. contains everything.
Oracle调优总结 -
yangxiutian:
固态硬盘是什么东东,既然对硬件有约束,我想推广难啊,除非若干年 ...
未来操作系统(组图) -
showzh:
...
listener.ora 、sqlnet.ora 、tnsnames.ora的关系以及手工配置举例 -
489687009:
我特别想问一下楼主,现在有了框架后,jsp2.0还有用武之地吗 ...
JSP2.0入门 -
liuzl121:
你好 我刚学java,我想请教下这个SignonControl ...
log4j详尽配置实战(for spring)
OpenVPN Server在Linux系统安装配置HOWTO
文档版本: 修订版(200907281129)
完成时间: 2009年07月20日
修改时间: 2009年07月28日
修改次数: 7次
文档编写: 郭瑞 (china.guorui@gmail.com)
复杂问题简单化, 系统程序问题模块化. 清晰的思路是解决问题的关键!
修改内容:
2009-07-20 OpenVPN Server在CentOS5.3系统上的安装与配置
2009-07-22 OpenVPN for Linux client的配置第[5]结
2009-07-23 增加vpn原理的一些东西(从网上找的) 附B: VPN原理资料
增加 [3.8] 小节 防止恶意攻击
增加 [3.9] 小节 生成带密码的证书文件
增加 [3.10] 小节 注销证书
增加 [3.11] 小节 启用ip转发,并且配置iptable, 实现NAT功能
2009-07-27 增加 [3.12]小节 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
增加 [附C.1] 创建vpn mysql数据库用户的php 脚本
2009-07-28 增加 [ 3.12.1.4]小节 配置openvpn 服务器及客户端配置文件
增加 [附B.8]小节 tun/tap设备FAQ
OpenVPN简介
OpenVPN允许参与建立VPN的单点使用共享密钥,电子证书,用户名/密码来进行身份验证,它大量使用了OpenSSL加密码库中的
SSLv3/TLSv1协议函式库. 目前OpenVPN能在Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X与Windows 2000/XP/Vista上运行,
并包含了许多安全性的功能, 它并不是一个基于Web的VPN软件, 也不与IPsec及其它VPN软件包兼容.
OpenVPN所有的通信都能基于一个单一的IP端口, 默认且推荐使用UDP协议通讯, 同时TCP也被支持,OpenVPN连接能通过大多数的代理
服务器,并且能够在NAT的环境中很好地工作, 服务端具有向客户端”推送”某些网络配置信息的功能,这些信息包括:IP地址, 路由设置等.OpenVP
N提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据,
传送的数据可通过LZO算法压缩. IANA(Internet Assigned Numbers Authority) 指定给OpenVPN的官方端口为1194, OpenVPN2.0以后版
本每个进程可以同时管理数个并发的隧道.
OpenVPN使用通用网络协议(TCP 与UDP)的特点使它成为IPsec 等协议的理想替代,尤其是在ISP(Internet service provider)过滤
某些特定VPN 协议的情况下。
在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于
存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
以上内容来源:维基百科: OpenVPN: http://zh.wikipedia.org/wiki/OpenVPN
文档说明
此文档内容所使用的环境为CentOS5.3 64位操作系统, 服务器为: ProLiant DL360 G5, cpux2x2.0 16G内存
#为root提示符下, $为非root提示符下.
文档目录
1. 安装OpenVPN之前的准备
1.1 OpenVPN软件及相关软件下载
1.2 准备OpenVPN安装目录
2. 开始安装OpenVPN
2.1 编译安装OpenVPN
3. 配置的OpenVPN Server
3.1 建立配置环境
3.2 生成服务器CA证书及密钥
3.3 生成客户端CA证书及密钥
3.4 生成openvpn配置文件
3.5 创建openvpn的启动脚本
3.6 将openvpn添加到系统自启动
3.7 启动/停止openvpn服务
3.8 防止恶意攻击
3.9 生成带密码的证书文件
3.10 注销证书
3.11 启用ip转发,并且配置iptable, 实现NAT功能
3.12 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
3.12.1 安装mysql数据库及mysql PAM验证模块
3.12.1.1 安装mysql数据库
3.12.1.2 配置mysql数据库
3.12.1.3 配置PAM mysql认证模块
3.12.1.4 配置openvpn 服务器及客户端配置文件
4. 配置windows客户端: OpenVPN GUI
4.1 下载并安装OpenVPN GUI
4.2 配置OpenVPN GUI
4.3 启动OpenVPN GUI
5. 配置Linux客户端
5.1 安装openvpn
5.2 配置openvpn client
附A: 参考资料
附B: VPN原理资料
附B.1 IPSEC VPN基本原理(1)
附B.2 IPSEC VPN基本原理(2)
附B.3 VPN基本原理之一(MPLS VPN的工作原理)
附B. 4 VPN基本原理之二(SSL VPN的基本原理分析)
附B.5 全面认识VPN(一)
附B.6 全面认识VPN(二)
附B.7 全面认识VPN(三)
附B.8 tun/tap设备FAQ
附C: 脚本命令
附C.1 创建 vpn mysql数据库数据的php脚本
文档内容
1. 安装OpenVPN之前的准备
1.1 OpenVPN软件及相关软件下载
准备一个下载软件包目录
[root@guorui ~]#mkdir /home/src/openvpn
在安装openvpn时需要安装LZO软件包, 这个软件包是一个解压缩库文件,openvpn所使用的一个软件包, 如在configure时没有发现此
包将会出现configure错误.
Openvpn当前版本为2.0, 去官方网站下载最新的软件包
http://www.openvpn.net
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
从LZO官方网站下载LZO 软件包, LZO是一个实时无损压缩工具,当前版本2.0.3
http://www.oberhumer.com/opensource/lzo/
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
1.2 准备OpenVPN安装目录
因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn目录, 配置文件目录为/etc/openvpn目录
程序目录: /usr/local/openvpn
配置目录: /etc/openvpn
2. 开始安装OpenVPN
2.1 编译OpenVPN
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#tar zxvf lzo-2.03.tar.gz
[root@guorui openvpn]#cd lzo-2.03
[root@guorui lzo-2.03]#./configure && make && make install
编辑/etc/ld.so.conf
[root@guorui lzo-2.03]#cat >> /etc/ld.so.conf << EOF
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
EOF
编辑完后运行
[root@guorui lzo-2.03]#ldconfig
使动态连接库文件生效,接下来编译openvpn
[root@guorui openvpn]# tar zxvf openvpn-2.0.9.tar.gz
[root@guorui openvpn]# cd openvpn-2.0.9
[root@guorui openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install
[root@guorui openvpn-2.0.9]#tree /usr/local/openvpn
应该有以下输出
[root@guorui ~]# tree /usr/local/openvpn/
/usr/local/openvpn/
|-- man
| `-- man8
| `-- openvpn.8
`-- sbin
|-- key
`-- openvpn
3 directories, 3 files
3. 配置的OpenVPN Server
3.1 建立配置环境
[root@guorui ~]# mkdir -p /etc/openvpn
[root@guorui ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn
[root@guorui ~]# cd /etc/openvpn/easy-rsa/2.0/
此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
clean-all 脚本,是创建生成ca证书及密钥文件所需要的文件及目录
build-ca 脚本, 生成ca证书(交互)
build-dh 脚本, 生成Diffie-Hellman文件(交互)
build-key-server 脚本, 生成服务器端密钥(交互)
build-key 脚本, 生成客户端密钥(交互)
pkitool 脚本, 直接使用vars的环境变量设置, 直接生成证书(非交互)
3.2 生成CA证书及密钥[注意字符输入不要出错]
[root@guorui 2.0]# . ../vars
[root@guorui 2.0]# chmod +rwx *
初始化keys目录,创建生成ca证书及密钥文件所需要的文件和目录
[root@guorui 2.0]# ./clean-all
编辑vars文件,生成环境变量, vars里的参数根据自己需要改变.
export KEY_SIZE=1024 #生成密钥的位数
export KEY_COUNTRY=CN #定义所在的国家编码, 2个字符
export KEY_PROVINCE=BeiJing #定义所在的省份
export KEY_CITY=BeiJing #定义所在的城市
export KEY_ORG=”VPN Test org” #定义所在的组织
export KEY_OU=”VPN COM” #定义所在的单位
export KEY_EMAIL=”china.guorui@gmail.com” #定义你的邮件地址
修改好vars文件后就可以开始生成ca证书及密钥文件了!
[root@guorui 2.0]# source ./vars
生成Root Ca证书, 用于签发Server和Client证书
[root@guorui 2.0]#./build-ca
[root@guorui 2.0]# ls keys
可以看到已经生成了ca.crt ca.key文件
生成Diffie-Hellman文件
[root@guorui 2.0]#./build_dh
[root@guorui 2.0]#ls -l keys/dh2048.pem
可以看到生成了2048位的Diffie-Hellman文件
生成服务器使用的VPN server Ca证书
[root@guorui 2.0]#./build-key-server server
server是你为CA证书起的一个名字, 以server名字为例,生成的服务器使用的CA证书文件为: server.crt server.key
将生成的CA证书及密钥拷贝到/etc/openvpn下
[root@guorui 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/
3.3 生成客户端CA证书及密钥
生成客户端CA证书及密钥使用:build-key程序即可
[root@guorui 2.0]#./build-key guorui
将在keys目录下生成guorui.crt guorui.csr guorui.key三个客户端证书
将ca.crt ca.key guorui.crt guorui.csr guorui.key五个文件打包,以备客户端vpn使用
[root@guorui 2.0]#tar zcvf guorui.vpn.key.tar.gz keys/{ca.crt ca.key guorui.crt guorui.csr guorui.key}
3.4 生成openvpn配置文件
创建openvpn 配置文件最好的方法是先看openvpn 的样例文件,在源码目录下的sample-config-files下,本例为
/home/src/openvpn/openvpn-2.0.9/sample-config-files
服务器端配置文件名: server.conf
客户端配置文件名为: client.conf
可以根据需要修改.
本例的配置文件 为:/etc/openvpn/openvpn.conf
#########################################################################
port 1723 #openvpn默认端口为1194
proto tcp
dev tun
#########################################################################
# ca证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn目录下,与配置文件相同目录
#########################################################################
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 172.16.0.0 255.255.0.0
push "dhcp-option DNS 202.106.0.20"
push "dhcp-option DNS 168.210.2.2"
push "route 172.16.0.0 255.255.0.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
#Client 之间可以相互访问
client-to-client
#允许一个用户多次访问
duplicate-cn
log /var/log/openvpn.log
log-append /var/log/openvpn.log
#########################################################################
3.5 创建openvpn的启动脚本
openvpn的启动脚本在源码目录: sample-scripts目录下
文件名为: openvpn.init
将openvpn.ini拷贝到/etc/init.d下,并重新命名为openvpn
[root@guorui ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn
因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn的69行
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
修改为:
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn"
3.6 将openvpn添加到系统自启动
[root@guorui ~]# chkconfig –add openvpn
3.7 启动/停止openvpn服务
启动openvpn服务
[root@guorui ~]#service openvpn start
停止openvpn服务
[root@guorui ~]#service openvpn stop
3.8 防止恶意攻击
如果想让openvpn防止恶意攻击如DOS、UDP port flooding,生成一个"HMAC firewall", 这个功能可以不启用,减少麻烦。
[root@guorui keys]#/usr/local/sbin/openvpn --genkey --secret /etc/openvpn/easy-rsa/2.0/keys/ta.key
这个时候,在keys目录下,产生一个ta.key,同时也需要在openvpn.conf 文件里添加一行
openvpn.conf
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0
要启用这个功能,你还需要把 ta.key 这个文件下载到客户端,并且客户端里的配置文件也需要添加一行
tls-auth ta.key 1
3.9 生成带密码的证书文件
客户端不但需要证书,还需要密码,而且这个密码,客户端可以自己进行修改。这个倒是非常不错。
[root@guorui keys]#./build-key --pass guorui
或者
[root@guorui keys]#./pkitool –pass guorui
出现Enter PEM pass phrase:
提示你输入密码
3.10 注销证书
这是openvpn的一个bug, 如果你直接注销证书, 会出现一个报错:
Using configureation from /etc/openvpn/easy-rsa/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/easy-rsa/2.0/openssl.cnf'
所以需要编辑openssl.cnf文件, 把[pkcs11_section]及其这个选择下的内容注释掉. 就可以了。
/etc/openvpn/easy-rsa/2.0/openssl.cnf
#[pkcs11_section]
#engine_id=pkcs11
#dynamic_path=/usr/lib/engines/engine_pkcs11.so
#MODULE_PATH=$ENV::PKCS11_MODULE_PATH
#PIN=$ENV::PKCS11_PIN
#init=0
如果要注销guorui的证书, 运行以下命令.
[root@guorui keys]#./revoke-full guorui
会在keys目录下,产生一个文件叫crl.pem, 这个文件保存着注销客户端的名字,在openvpn server端的配置文件中添加以下一行,并重启
openvpn, 使用这个证书的客户再也不能连接到vpn了.
3.11 启用ip转发,并且配置iptable, 实现NAT功能
如果实现在拨到vpn 上后能够使用openvpn server上网的话, 需要配置NAT功能, 修改openvpn的管理脚本.在管理脚本的start功能里
添加以下命令(在管理脚本的119行):
#######################################
# filename: /etc/init.d/openvpn
#######################################
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT –to server_ipaddress
3.12 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
3.12.1 安装mysql数据库及mysql PAM验证模块
3.12.1.1 安装mysql数据库:
从mysql官方网站下载mysql 源码包: http://www.mysql.com, 用以下命令安装:(我用的是5.0.84版本)
[root@guorui mysql-5.0.84]# ./configure --prefix=/usr/local/mysql –with-unix-socket-\
path=/tmp/mysql.socket --with-big-tables –with-\
charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-lib-ccflags –enable-thread-\
safe-client --mandir=/usr/local/man –with-pthread && make && make install
增加mysql用户及mysql用户组
[root@guorui mysql-5.0.84] # adduser -d /dev/null -s /sbin/nologin mysql
修改mysql用户的密码
[root@guorui mysql-5.0.84]# passwd mysql
修改mysql数据库目录的权限
[root@guorui mysql-5.0.84]#chown -R mysql.mysql /usr/local/mysql/var/
初始化mysql数据库, 安装mysql必须的数据库文件
[root@guorui mysql-5.0.84]#sh /usr/local/mysql/bin/mysql_install_db –user=mysql
3.12.1.2 配置mysql数据库:
如果你想更多的优化你的mysql数据库可以参考:
http://linux.chinaunix.net/techdoc/database/2009/06/06/1116911.shtml
安全方面参考:
http://www.unixren.com/linux/bencandy.php?fid=21&id=459
Mysq l 配置文件 :
拷贝mysql数据库配置文件从源码包目录中, /home/src/mysql-5.0.84/support-files下有适用于不同环境下的
mysql配置文件: my-huge.cnf.sh my-innodb-heavy-4G.cnf.sh my-large.cnf.sh my-medium.cnf.sh my-small.cnf.sh
我选择的是my-huge.cnf.sh, 根据自己的需要选择. 拷贝到/etc/ 下并命名为my.cnf
[root@guorui support-files]# cp -f my-huge.cnf.sh /etc/my.cnf
修改mysql配置文件 /etc/my.cnf
将[client]字段换成:
port = 33066
socket = /tmp/mysql.socket
将[mysqld]字段的以下选项换成:
port = 33066
socket = /tmp/mysql.socket
bind_address = localhost
注意: 如果指定了bind_address,在配置phpmyadmin时要将: $cfg['Servers'][$i]['host']变量的值设置为: 127.0.0.1 否
则会出现:
#2002 - 服务器没有响应 (or the local MySQL server's socket is not correctly configured)
之类的错误提示.
Mysql启动脚本
将support-files目录下的mysql.server.sh拷贝到/etc/init.d目录下并重新命名为mysql,修改其属性为可执行
[root@guorui support-files]#cp -f mysql.server.sh /etc/init.d/mysql
编辑/etc/init.d/mysql
将46,47行换成你的mysql数据库安装的目录及数据库数据的目录的安装路径:
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
将59,60行换成你的mysql数据pid的路径
pid_file=/usr/local/mysql/var/mysql.pid
server_pid_file=/usr/local/mysql/var/`hotname`.pid
启动mysql数据库
[root@guorui support-files]#service mysql start
[root@guorui support-files]# netstat -nalp -t
如果有以下输出说明mysql已经正常启动
tcp 0 0 127.0.0.1:33066 0.0.0.0:* LISTEN 22023/mysqld
修改mysql 的root密码
[root@guorui support-files]#/usr/local/mysql/bin/mysqladmin -u root password “newpwd”
或
[root@guorui support-files]#/usr/local/mysql/bin/mysqladmin -u root -h localhost password “newpwd”
将mysql加入系统自启动中
[root@guorui support-files]#chkconfig –add mysql
[root@guorui support-files]#chkconfig –level 345 mysql on
创建vpn使用的数据库
创建 ppenvpn使用的数据的方法有两种, 1 种是用mysql命令方式创建, 2种是用mysql管理工具phpmyadmin创建,
因实验环境有apache+php所以用phpmyadmin创建,此方法是最直观最方便的 ^_^,
可以到phpmyadmin官方网站下载软件包
http://www.phpmyadmin.net
下载后解压到你的web发布目录中, 我的是web发布目录为/usr/local/apache/htdocs
phpmyadmin放在web发布目录的tools下,使用:
http://172.16.0.1/tools/phpmyadmin/
创建openvpn使用的数据库名为: openvpn, 数据库表为openvpnuser表,用来存放vpn登录用户名及密码
database name: openvpn
database tables: openvpnuser
数据表openvpnuser的表结构如下:
id int(11)
username char(20)
password char(128)
active int(10)
reg_date in(11)
使用命令行方式添加数据表结构如下:
mysql>use openvpn;
mysql> CREATE TABLE openvpnuser (
->id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
->username CHAR(20) NO NULL,
->password CHAR(128) NULL,
->active INT(10) NO NULL DEFAULT 1,
->reg_date INT(11) NOT NULL
->);
当active不为1时,无权使用vpn
创建openvpn数据库的用户用为openvpn,openvpn用户可以对openvpn数据库使用所有权限.(数据库及表的操作权
限), 使用phpmyadmin操作.
创建测试用户
1. 创建测试用户用一个脚本来创建最好不过了.参考[附C.1]脚本.
2. 连接mysql后使用sql语句创建测试用户,用户名test 密码test的用户.
mysql> INSERT INTO openvpnuser (username, password)
> VALUES ('test', password('test'));
3.12.1.3 配置PAM mysql认证模块:
1) 编译并安装pam_mysql认证模块
到官方网站下载pam mysql认证模块源码,编译并安装
http://pam-mysql.sourceforge.net
因在安装mysql时指定了mysql的安装目录, 所以在安装pam_mysql时要指定mysql数据的安装目录
[root@guorui pam_mysql-0.7RC1]#./configure –with-mysql=/usr/local/mysql && make
在此目录下有一个.libs的隐藏目录,
[root@guorui pam_mysql-0.7RC1]#ls .libs
pam_mysql.la pam_mysql.lai pam_mysql.o pam_mysql.so
因我的系统为64位系统, 所以将pam_mysql.so 拷贝到/lib64/security/目录下
[root@guorui pam_mysql-0.7RC1]# cp -f .libs/pam_mysql.sl /lib64/security/
2) 配置pam_mysql模块
创建/etc/pam.d/openvpn文件
[root@guorui pam_mysql-0.7RC1]#touch /etc/pam.d/openvpn
文件内容:
auth required /lib/security/pam_mysql.so user=openvpn passwd=数据库密码 host=localhost db=openvpn\
table=openvpnuser usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=2 \
verbose=1
account required /lib/security/pam_mysql.so user=openvpn passwd=数据库密码 host=localhost db=openvpn \
table=openvpnuser usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=2 \
verbose=1
#crypt = 2 时用mysql password() 函数 1为crypt
3) 测试pam_mysql是否工作正常
检查saslauthd是否安装(CentOS5.3)
[root@guorui ~]# rpm -aq | grep sasl
如果输出中包含cyrus-sasl-版本号,说明已经安装好syrus-sasl软件包.
注意: 系统自带的cyrus-sasl程序使用的mysql socket文件名为mysql.sock(程序写死的:( ),因为我自己编译的mysql
socket文件为:mysql.socket, 所以需要做一个软链: cd /tmp; ln -s mysql.socket mysql.sock
mysql.socket,
安装testsaslauthd软件
从http://cyrusimap.web.cmu.edu下载cyrus-sasl软件包,编译安装
[root@guorui cyrus-sasl-2.1.23]# ./configure –with-saslauthd=/var/run/saslauthd
[root@guorui cyrus-sasl-2.1.23]#cd saslauthd
编译testsaslauthd程序
[root@guorui cyrus-sasl-2.1.23]#make testsaslauthd
[root@guorui cyrus-sasl-2.1.23]#cp -f testsaslauthd /usr/sbin
4) 启动saslauthd进程
[root@guorui syrus-sasl-2.1.23]#service saslauthd start
5) 测试pam_mysql是否可用
[root@guorui ~]#testsaslauthd -u test -p test -s openvpn
如果出现: 0: OK “Success.”, 表示测试成功
如果出现错误可以从系统日志及安全日志里看到出错信息:
系统日志: /var/log/messages
安全日志: /var/log/secure
3.12.1.3 配置openvpn 服务器及客户端配置文件
1) 服务器端配置文件
进入openvpn源代码目录, 在plugin/auth-pam下将openvpn认证模块编译出来
目录在: /home/src/openvpn/openvpn-2.0.9/plugin/auth-pam
[root@guorui auth-pam]#make && cp -f openvpn-auth-pam.so /lib/security/
在服务器端配置文件加入: plugin /lib/security/openvpn-auth-pam.so openvpn
重新启动openvpn
[root@guorui ~]#service openvpn restart
配置文件选项说明:
plugin /lib/security/openvpn-auth-pam.so openvpn
申明openvpn使用的插件, openvpn为插件参数,和pam_mysql的service name是一样的
client-cert-not-required
不请求客户的CA证书, 使用用户名/密码验证, (本配置中没指定, 使用双重认证, 证书和密码验证)
2) 客户端配置文件
在客户端配置文件中加入: auth-user-pass
重新启动客户端连接到vpn server时就需要输入用户名和密码了.
4. 配置windows客户端: OpenVPN GUI
4.1 下载并安装OpenVPN GUI
到http://openvpn.se
下载并安装OpenVPN GUI
4.2 配置OpenVPN GUI
OpenVPN GUI的配置文件目录为: C:\Program Files\OpenVPN\config目录下,
客户端配置文件名为: client.ovpn
创建OpenVPN GUI的配置文件, 服务器端源码目录下的: /home/src/openvpn/openvpn-2.0.9/sample-config-files/client.conf文
件是创建openvpn客户端的配置文件, 用在linux下文件名是client.conf, 如果是windows, VPN客户端用的是OpenVPN GUI的话, 配
置文件请改名为client.ovpn, 要不连接vpn时会找不到配置文件,OpenVPN GUI点右键时没有connect选项. 以下是我的OpenVPN GUI
for windows 客户端配置文件:(client.ovpn)
#####################################################
# OpenVPN GUI client configure file
#####################################################
client
proto tcp
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
remote {server_ip_address} 1723
#####################################################
# 以你客户端ca认证文件及密钥文件目录为准
#####################################################
ca ca.crt
cert guorui.crt
key guorui.key
#####################################################
4.3 启动OpenVPN GUI
点击:开始->所有程序->OpenVPN->OpenVPN GUI
会在任务栏右下角有一个网络的图标,点右键->Connect即可建立与服务器之间的vpn连接
5. 配置Linux客户端
配置linux的客户端和windows的客户端是一样的, 只不过安装的软件不是openvpn gui, 还是openvpn这个软件包,配置文件和windows的
一样.具体步聚如下:
5.1 安装openvpn
安装openvpn的过程参考 第[2]节
5.2 配置openvpn client
创建openvpn配置文件目录, 将在服务器端生成好的CA证书及用户认证文件放到/etc/openvpn下.我的几个文件为:
ca.crt ca.key guorui.crt guorui.csr guorui.key
[root@guorui ~]# mkdir -p /etc/openvpn
生成client 配置文件, 文件内容如下:
#####################################################
# OpenVPN GUI client configure file
#####################################################
client
proto tcp
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
remote {server_ip_address} 1723
#####################################################
# 以你客户端ca认证文件及密钥文件目录为准
#####################################################
ca ca.crt
cert guorui.crt
key guorui.key
#####################################################
以上内容做完之后参考 第[3.5]小节和第[3.7]小节 创建openvpn的启动脚本,和启动openvpn, 即可以得到虚拟私网地址。
附A. 参考资料
OpenVPN 官方文档: http://openvpn.net/index.php/open-source/documentation.html
Linux HOWTO资料: http://www.howtoforge.com/
附B: VPN原理资料
附B.1 IPSEC VPN基本原理(1)
IPSEC是一套比较完整成体系的VPN技术,它规定了一系列的协议标准。如果不深入探究IPSEC的过于详细的内容,我们对于IPSEC大致按照
以下几个方面理解。
1. 为什么要导入IPSEC协议
导入IPSEC协议,原因有2个,一个是原来的TCP/IP体系中间,没有包括基于安全的设计,任何人,只要能够搭入线路,即可分析所有的
通讯数据。IPSEC引进了完整的安全机制,包括加密、认证和数据防篡改功能。
另外一个原因,是因为Internet迅速发展,接入越来越方便,很多客户希望能够利用这种上网的带宽,实现异地网络的的互连通。
IPSEC协议通过包封装技术,能够利用Internet可路由的地址,封装内部网络的IP地址,实现异地网络的互通。
2. 包封装协议
设想现实一种通讯方式。假定发信和收信需要有身份证(成年人才有),儿童没有身份证,不能发信收信。有2个儿童,小张和小李,他们
的老爸是老张和老李。现在小张和小李要写信互通,怎么办?
一种合理的实现方式是:小张写好一封信,封皮写上 "小张-->;小李", 然后给他爸爸,老张写一个信封,写上“老张-->;老李”, 把前面的
那封信套在里面,发给老李,老李收到信以后,打开,发现这封信是给儿子的,就转给小李了。小李回信也一样,通过他父亲的名义发回给小张。
这种通讯实现方式要依赖以下几个因素:
* 老李和老张可以收信发信
* 小张发信,把信件交给老张。
* 老张收到儿子的来信以后,能够正确的处理(写好另外一个信封),并且重新包装过的信封能够正确送出去。
* 另外一端,老李收到信拆开以后,能够正确地交割小李。
* 反过来的流程一样。
把信封的收发人改成Internet上的IP地址,把信件的内容改成IP的数据,这个模型就是IPsec的包封装模型。小张小李就是内部私网的IP
主机, 他们的老爸就是VPN网关,本来不能通讯的两个异地的局域网,通过出口处的IP地址封装,就可以实现局域网对局域网的通讯。
引进这种包封装协议,实在是有点不得已。理想的组网方式,当然是全路由方式。任意节点之间可达(就像理想的现实通讯方式是任何人之
间都可以直接写信互通一样)。
Internet协议最初设计的时候,IP地址是32位,当时是很足够了,没有人能够预料到将来Internet能够发展到现在的规模(相同的例子发
生在 电信短消息上面,由于160字节的限制,很大地制约了短消息的发展)。按照2的32次方计算,理论上最多能够容纳40亿个左右IP地址。
这些IP地址的利 用是很不充分的,另外大约有70%左右的IP地址被美国分配掉了(谁让人家发明并且管理Internet呢?)所以对于中国来说,
可供分配的IP地址资源 非常有限。
既然IP地址有限,又要实现异地lan-lan通讯,包封包,自然是最好的方式了。
3.安全协议(加密)
依然参照上述的通讯模型。
假定老张给老李的信件要通过邮政系统传递,而中间途径有很多好事之徒,很想偷看小张和小李(小张小李作生意,通的是买卖信息)通讯,
或者破坏其好事。
解决这个问题,就要引进安全措施。安全可以让小李和小张自己来完成,文字用暗号来表示,也可以让他们的老爸代劳完成,写好信,交给
老爸,告诉他传出去之前重新用暗号写一下。
IPSEC协议的加密技术和这个方式是一样的,既然能够把数据封装,自然也可以把数据变换,只要到达目的地的时候,能够把数据恢复成原
来的样子就可以了。这个加密工作在Internet出口的VPN网关上完成。
4.安全协议(数据认证)
还是以上述通讯模型为例,仅仅有加密是不够的。
把数据加密,对应这个模型中间,是把信件的文字用暗号表示。
好事之徒无法破解信件,但是可以伪造一封信,或者胡乱把信件改一通。这样,信件到达目的地以后,内容就面目全非了,而且收信一方不
知道这封信是被修改过的。
为了防止这种结果,就要引入数据防篡改机制。万一数据被非法修改,能够很快识别出来。这在现实通讯中间可以采用类似这样的算法,计
算信件特征(比如统计这 封信件的笔划、有多少字),然后把这些特征用暗号标识在信件后面。收信人会检验这个信件特征,由于信件改变,特
征也会变。所以,如果修改人没有暗号,改了 以后,数据特征值就不匹配了。收信人可以看出来。
实际的IPSEC通讯的数据认证也是这样的,使用md5算法计算包文特征,报文还原以后,就会检查这个特征码,看看是否匹配。证明数据
传输过程是否被篡改。
5.安全协议(身份认证)
还是假定小张小李通讯模型。
由于老张和老李不在一个地方,他们互相不能见面,为了保证他们儿子通讯的安全。老张和老李必须要相互确认对方是否可信。这就是身份
认证问题。
假定老李老张以前见过面,他们事先就约定了通讯暗号,比如1234567890对应abcdefghij, 那么写个255,对应就是一个bee。
常见的VPN身份认证可以包括预共享密钥,通讯双方实现约定加密解密的密码,直接通讯就可以了。能够通讯就是朋友,不能通讯就是坏
人,区分很简单。
其他复杂的身份认证机制包括证书(电子证书比如x509之类的),比较罗里罗嗦,这里就不具体展开了,怕有兄弟看了打瞌睡。如果需要,
可以找我要更具体的技术白皮书以及相关的身份认证文档。
如果有身份认证机制,密钥的经常更换就成为了可能。
6.其他
解决了上述的几个问题,基本可以保证VPN通讯模型能够建立起来了。
但是并不完美,这是最简单的VPN。即通过对端两个静态的IP地址,实现异地网络的互联。美国的很多VPN设备就作到这一级,因为美国
IP地址充裕,分配静态IP地址没有问题。苦的是我等中国客户,2端都需要静态IP地址,相当于2根Internet专线接入。
VPN要在中国用起来,还要解决一堆的相关问题。下一个节将给大家描述IPSEC VPN在中国应用会遇到的哪些问题。
附B.2 IPSEC VPN基本原理(2)
上次用一个简单的模型向大家描述了VPN通讯的原理。IPSEC通过包封装包的方法,通过Internet建立了一个通讯的隧道,通过这个通讯的
隧道,就可以建立起网络的连接。但是这个模型并非完美,仍然有很多问题需要解决。
在讲述其他问题以前,我们对VPN定义几个概念。
VPN节点:一个VPN节点,可能是一台VPN网关,也可能是一个客户端软件。在VPN组网中间,属于组网的一个通讯节点。它应该能够
连接 Internet,有可能是直接连接,比如adsl、电话拨号等等,也可能是通过nat方式,例如:小区宽带、cdma上网、铁通线路等等。
VPN隧道:在两个vpn节点之间建立的一个虚拟链路通道。两个设备内部的网络,能够通过这个虚拟的数据链路到达对方。与此相关的信息
是当时两个VPN节点的IP地址,隧道名称、双方的密钥。
隧道路由:一个设备可能和很多设备建立隧道,那么就存在一个隧道选择的问题,即到什么目的地,走哪一个隧道?
用前面的通讯模型来说,老李老张就是隧道节点,他们通过邮政系统建立的密码通讯关系,就是一个数据隧道,小张和小李把信发给他们老
爸的时候,他们老爸要作 出抉择,这封信怎么封装,封装以后送给谁。假如还有一个老王和他们的儿子,也要通讯,这时候隧道路由就比较好理
解了。送给小王的数据,就封装给老王,送给 小李的数据,就封装发给老李。如果节点非常多,那么这个隧道路由就会比较复杂。
理解了以上的问题,我们就知道,ipsec要解决的问题其实,可以分为以下几个步骤:
1. 找到对方vpn节点设备,如果对方是动态IP地址,那么必须能够通过一种有效途径能够及时发现对方IP地址的变化。按照通讯模型,就
是老李老张如果经常搬家的话,必须有一个有效的机制,能够及时发现老李老张地址的变化。
2. 建立隧道,建立隧道说起来简单,作起来不容易。如果两个设备都有合法的公网IP,那么建立一个隧道是比较容易的。如果一方在nat之
后,那就比较罗嗦 了。一般通过内部的vpn节点发起一个udp连接,再封装一次ipsec,送到对方,因为udp可以通过防火墙进行记忆,因此
通过udp再封装的 ipsec包,可以通过防火墙来回传递。
3. 建立隧道以后,就确定隧道路由,即到哪里去,走哪个隧道。很多VPN隧道配置的时候,就定义了保护网络,这样,隧道路由就根据保护
的网络关系来决定。但是这丧失了一定的灵活性。
所有的ipsec VPN展开来讲,实现的无非就是以上几个要点,具体各家公司,各有各的做法。但是可以肯定,目前在市场销售的VPN,肯
定都已经解决了以上的问题。
第一个问题 怎样找到vpn节点设备?
假如设备都是动态拨号方式的话,那么一定需要一个合适的静态的第三方来进行解析。相当于两个总是不停搬家的人,要合适找到对方,一
定需要一个大家都认识的朋友,这个朋友不搬家,两个人都能够联系上他。
静态的第三方,常见的有3种实现方式:
1. 通过网页,这是深信服公司发明的一种技术,通过Web页解析ip地址。大家可以登录一下http://www.123cha.com/ ,就可以查找到当
前的IP地址。因此,动态的设备,可以通过这种方式,把自己当前的IP地址提交上去。其他设备可以通过网页再查询回来。这样,设备之间就
可以互相通过这个网页找到。因为网页是相对固定的,所以这种方式能够很有效地解决这个问题。这种方式能够有效地分散集中认证的风险,而
且很容易实现备份, 属于比较巧妙的一种解决方案。当然,对于Web页可能存在比较多的攻击,因此,要注意安全防范。
2. 通过一个集中的服务器,实现统一解析,然后给用户进行分组。每个vpn设备只能看到同组的其他设备,不能跨组访问。也可以通过目录
服务器实现。这种方式适 合集中式的VPN,在企业总部部署服务器,实现全局设备的统一认证和管理。它不太适合零散用户的认证,因为存在
一个信任问题,客户会置疑管理服务器如果出 现了问题,有可能其他设备就能够连接到自己的vpn域里面。这种大型的集中vpn管理软件,在
很多国内外的vpn厂商都有专门的设备或软件,它除了能够进 行动态IP地址解析,还能够实现在线认证等等功能。如果管理中心比较职能的话,
可以集中制订通讯策略,下面的vpn设备配置参数比较少。
3. 还有一种方式,是DDNS,即动态域名。动态域名是一种相对比较平衡的技术。Vpn设备拨号以后,把自己当前的IP地址注册给一级域
名服务器,并且更新自 己的二级域名IP地址,internet其他用户,通过这个二级域名就可以查找到它。例如:动态域名服务器的名称是
99ip.net,是abc. 99ip.net,则vpn设备通过一个软件,提交给服务器,把abc.99ip.net,漂移成当前的IP地址。但是,有时也会遇到dns缓
存问题。 Vpn厂家如果自身提供ddns服务的话,就可以通过内部协议,把查询速度加快,并且避免dns缓冲带来的问题。
以上讲述了三种动态IP地址的解析方法,国内一般厂家提供的无外乎这几种方法。如果再有比较偏门的技术,也许就不是主流技术了。
解决了动态IP地址问题,按照之前的通讯模型,不考虑VPN设备很多的情况,就可以组网。因此,一旦这种技术被越来越多的厂家掌握,
基于IPsec vpn设备和软件是一定会价格下降的。It技术从朝阳变成夕阳就是转眼之间的事情。
第二个问题 隧道如何建立
解决了Ip地址动态寻址的问题,现在来说一下Nat穿越的问题。我们知道,Udp和TCP是可以穿越防火墙的。直接的IPsec封装,不能穿
越防火墙,因 为防火墙需要更改端口信息,这样回来的数据包,才能转到正确的内部主机。用UDP显然比较合适,因为使用tcp的话,不仅三
次握手占据时间很长,而且还有 来回的确认。而实际上,这些工作属于ipsec内部封装的报文要干的事情,放在这里完成是不合适的。因此,用
udp来封装ipsec报文,以穿越nat, 几乎是唯一可以选择的方案。
用udp穿越nat防火墙,这只解决了问题的一半,因为这要求至少有一方处于Internet公网上面。有可路由的IP地址。而有时会发生两个
vpn节点 都在nat之后的情景,这只能通过第三方转发来完成。即两个设备都可以与第三方设备互通,第三方设备为双方进行转发。这个可以通
过之前的模型解析,老张老 李不能直接通讯,他们都可以与老王通讯,老王就可以在中间进行转发。凡是小李小张的通讯,交给他们老爸以后,
老王最后再进行转交。这是隧道路由的概念就很 清晰了,不能一个隧道直接到达,可以在几个隧道之间转发。
所以,IPsec vpn并不神秘。所有核心的工作无非就是围绕以下几个方面展开:
1. 如何找到与本VPN节点相关的其他节点。
2. 协商出一个可以通讯的隧道。如果是nat之后,应该怎么处理。
3. 建立隧道路由表,确定不同的目标地址,走不同的隧道。
假定以上的问题都得到了解决,通过某种方式,动态IP地址的VPN节点可以相互找到对方,并且能够建立隧道,因此也能够实现隧道路由
通讯。是不是一个完整的VPN就能够实现了呢??
答案仍然是否,解决了以上问题,并不代表一个很好用的VPN产品,仍然有其他很多问题。之后的问题是围绕着复杂性展开的,简单的原理
实现之后,剩下的工作就是要解决掉全部相关的边缘问题。才能够实现一个好用的东西。能够用是一回事,好用是另外一回事。
附B.3 VPN基本原理之一(MPLS VPN的工作原理)
有很多种方法可以实现VPN。目前大家经常看到的有MPLS、IPSEC、L2tp/pp2p、SSL等类型。以下分别对MPLS的工作原理进行概述。
MPLS的工作原理及MPLS VPN技术的特点
MPLS VPN是一种基于MPLS技术的IP VPN,是在网络路由和交换设备上应用MPLS(Multiprotocol Label Switching,多协议标记交换)
技术,简化核心路由器的路由选择方式,利用结合传统路由技术的标记交换实现的IP虚拟专用网络(IP VPN)。这种基于标记的IP路由选择方
法,要求在整个交换网络中间所有的路由器都识别这个标签,运营商需要大笔投资建立全局的网络。而且跨越不同运营商 之间,如果没有协调好,
标签无法交换。
标记是一个能够被路由器识别理解的数据位,可以被用来代表逐跳式或者显式路由,并指明服务质量(QoS)、虚拟专网以及影响一种特定
类型的流量(或一个特 殊用户的流量)在网络上的传输方式等各类信息。MPLS可以提供每个IP数据包一个标记,将之与IP数据包封装于新的
MPLS数据包,由此决定IP 数据包 的传输路径以及优先顺序,而与MPLS兼容的路由器会在将IP数据包按相应路径转发之前仅读取该MPLS数
据包的包头标记,无须再去读取每个IP数据包中 的IP地址位等信息。
IP包在边界路由器分配一个标记。自此,MPLS设备就会自始至终查看这些标记信息,将这些有标记的包交换至其目的地。由于路由处理减
少,网络的等待时间 也就随之缩短,而可伸缩性却有所增加。MPLS数据包的服务质量类型可以由MPLS边界路由器根据IP包的各种参数来确
定,如IP的源地址、目的地址、端 口号、TOS值等参数。
以大家比较好理解的物流系统作比喻。MPLS是在包裹上面打上一个特定的标签,要求整个物流系统的搬运环节都能够理解这个标签的意义,
然后根据这个标签发 送这个包裹。即使这个物流系统再繁忙,这类包裹的传输质量能够得到保证。但是这是有前提条件的,要求所有的搬运环节
(搬运工)能够理解包裹的含义,例 如:1314信箱。并且能够理解加急、紧急等不同的字眼,不同的物流公司(对应不同的运营商),由于标
签不统一,直接互通就很困难。
对于到达同一目的地的IP包,可根据其TOS值的要求来建立不同的转发路径,以达到其对传输质量的要求。同时,通过对特殊路由的管理,
还能有效地解决网络中的负载均衡和拥塞问题。当网络中出现拥塞时,MPLS可实时建立新的转发路由来分散流量以缓解网络拥塞。
MPLS VPN的优点和缺点
MPLS VPN能够利用公用骨干网络强大的传输能力,为企业构建内部网络/Internet,同时能够满足用户对信息传输安全性、实时性、宽频
带和方便性的需要。目前,在基于IP的网络中,MPLS具有很多优点,也有明显的缺点。
1. 降低了成本
MPLS简化了ATM与IP的集成技术,使L2和L3技术有效地结合起来,降低了成本,保护了用户的前期投资。 与专线相比,降低了成本。
不过这种降低成本是相对的,由于电信运营商建设网络的成本很高,因此MPLS的运营成本也不低。
2. 提高了资源利用率,提高了网络速度
由于在网内使用标签交换,用户各个点的局域网可以使用重复的IP地址,提高了IP资源利用率。 由于使用标签交换,缩短了每一跳过程中
地址搜索的时间,减少了数据在网络传输中的时间,提高了网络速度。
3. 高可靠,业务综合能力强
采用MPLS作为通道机制实现透明报文传输,MPLS的LSP具有与帧中继和ATM VCC(Virtual Channel Connection,虚通道连接)类似
的高可靠性。网络能够提供数据、语音、视频相融合的能力。
4. MPLS具有QoS保证
用户可以根据自己不同的业务需求,通过在CE侧的配置,来赋予不同的QoS等级。通过这种QoS技术,保证了网络的服务质量。
相对于其优点,MPLS的缺点也是明显的:
1. 价格高
相对于使用IPsec通过Internet组网,MPLS的代价比较高。相当于一种准专线。
2. 接入比较麻烦
并不是所有的地方都能够提供接入。
3. 跨运营商不便
由于现在运营商之间还有很多协调工作没有完成。而且大家都知道,中国的电信巨头之间,向来以相互不合作出名。
从以上总结可以看出,MPLS适应比较高端的大型用户。
附B. 4 VPN基本原理之二(SSL VPN的基本原理分析)
从简单而言, SSL VPN一般的实现方式是在企业的防火墙后面放置一个SSL代理服务器。如果用户希望安全地连接到公司网络上,那么当用
户在浏览器上输入一个URL后,连接 将被SSL代理服务器取得,并验证该用户的身份,然后SSL代理服务器将提供一个远程用户与各种不同的
应用服务器之间连接。
几乎所有的主流商业浏览器都集成了SSL,实施SSL VPN不需要再安装额外的软件。绝大多数SSL VPN的生产厂商都通过“signed
plugins”提供其他的功能,“signed plugins”可以跟随浏览器自动传输给客户端。
SSL实现了客户端0安装,0配置。因此其功能和应用也受到限制。它适合PC-Web Server模式,就是大量的移动用户通过浏览器访问Web
服务器,有的SSL VPN还对ftp、telnet等进行了扩充,增强了其可用性,即便如此,充其量是实现了PC-to-Lan的功能。适用于数据库-应用
服务器-Web 服 务器-浏览器这一种模式。在保护范围、认证方式、应用程序类型上限制很多。而IPsec VPN则提供第三层IP的可达性,可以
保证任何基于tcp/ip的程序运行。
如果就网络联通而言,即使不使用SSL VPN,企业也能够实现Web应用,大不了我直接把服务器放置在Internet上,其他用户明文直接访
问好了。有了一个SSL VPN设备,相当于在服务器之前作了一个代理,客户端要和服务器连接,就要通过这个代理的认证,而且从客户端到SSL
VPN之间,数据是加密的。这样,internet上的黑客无法通过抓取数据包分析通讯信息。并且SSL VPN一般能够支持虚拟主机应用,这样,一
个IP地址可以访问N个服务器。
SSL优点和缺点都很明显。
优点:
(1)方便,实施SSL VPN只需要安装配置好中心网关即可。其余的客户端是免安装的,因此,实施工期很短,如果网络条件具备,连安装
带调试,1-2天即可投入运营。
(2)容易维护,SSL VPN维护起来也简单。出现问题,就维护网关就可以了。实在不行,换一台,如果有双机备份的话,备份机器启动就
可以了。
(3)安全,SSL 是一个安全协议,数据是全程加密传输的。另外,由于SSL网关隔离了内部服务器和客户端,只留下一个Web浏览接口,
客户端的大多数病毒木马感染不到内部 服务器。而IPsec VPN就不一样,实现的是IP级别的访问,远程网络和本地网络几乎没有区别。局域网
能够传播的病毒,通过VPN一样能够传播。
当然,SSL VPN的缺点也是很明显的:
(1)应用受限。一般都用于B/S模式。其他应用程序,象ftp/telnet等等有的SSL VPN能够支持。一般的C/S程序是不能直接应用的,因
此SSL VPN市场始终没有火暴起来。这个缺点是致命的,所以现在很多SSL VPN也试图把IPsec 融入进去,通过客户端安装一个软件,虚拟一
个VPN 的IP地址,实现PC-TO-Lan的IP级的连接。华盾公司(www.huadun.com.cn)也提供这样的产品,和美国array合作的。
(2) 只能实现星形的PC-SSL-SERVERs的应用模式。星形、树型结构都不能支持。
(3)价格比较高。目前比较知名的高端SSL VPN,价格都在几十万以上。价格很低的国产VPN,在很多性能和应用可靠性上面,距离还比
较大。
(4)安全认证方式很单一,都是使用证书方式,而且一般是单向认证。支持其它认证方式往往要进行长时间的二次开发。IPSec VPN认证方
式更为灵活(口令、RADIUS、令牌等)。
(5)SSL VPN只能进行认证和加密,不能实施访问控制,建立隧道后,管理员对用户不能进行任何的限制。而集成防火墙的VPN则可以根
据用户的身份和角色,在其访问内部资源(主机、数据库)进行访问控制和安全审计,这也是用户最为关心的一点。
为了克服以上的毛病,SSL开发商也作了很多工作,力图向IPSEC融合。兼容支持,而IPsec厂家也在后续的产品中间,陆续增加SSL的支
持。我在公司下一代Ipsec产品规划的时候,已经把SSL的支持列入研究计划。
如果希望能够运行各种应用程序,并且建立LAN-to-Lan的VPN,IPsec还是主流的解决方案。我所在的华盾公司
(www.huadun.com.cn),同时有SSL和IPsec产品线,结果大型用户无一例外全部使用IPSEC产品。SSL的销售额,目前为止还不能养活
配套的销售和工程师。
附B.5 全面认识VPN(一)
在国外,VPN已经迅速发展起来,2001年全球VPN市场将达到120亿美元。在中国,虽然人们对VPN的定义还有些模糊不清,对VPN的
安全性、服务质量(QoS)等方面存有疑虑,但互联网和电子商务的快速发展使我们有理由相信,中国的VPN市场将逐渐热起来。
对国内的用户来说,VPN(虚拟专用网,Virtual Private Network)最大的吸引力在哪里?是价格。据估算,如果企业放弃租用专线而采用
VPN,其整个网络的成本可节约21%-45%,至于那些以电话拨号方 式连网存取数据的公司,采用VPN则可以节约通讯成本50%-80%。
为什么VPN可以节约这么多的成本?这就先要从VPN的概念谈起。
认识VPN
现在有很多连接都被称作VPN,用户经常分不清楚,那么一般所说的VPN到底是什么呢?顾名思义,虚拟专用网不是真的专用网络,但却
能够实现专用网络的功 能。虚拟专用网指的是依靠ISP(Internet服务提供商)和其它NSP(网络服务提供商),在公用网络中建立专用的数据
通信网络的技术。在虚拟专用 网中,任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是利用某种公众网的资源动态组成的。
IETF草案理解基于IP的VPN为:"使用 IP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术。
所谓虚拟,是指用户不再需要拥有实际的长途数据线路, 而是使用Internet公众数据网络的长途数据线路。所谓专用网络,是指用户可以为自己
制定一个最符合自己需求的网络。
用户现在在电信部门租用的帧中继(Frame Relay)与ATM等数据网络提供固定虚拟线路(PVC-Permanent Virtual Circuit)来连接需要
通讯的单位,所有的权限掌握在别人的手中。如果用户需要一些别的服务,需要填写许多的单据,再等上相当一段时间,才能享受到新 的服务。
更为重要的是两端的终端设备不但价格昂贵,而且管理也需要一定的专业技术人员,无疑增加了成本,而且帧中继、ATM数据网络也不会像
Internet那样,可立即与世界上任何一个使用Internet网络的单位连接。而在Internet上,VPN使用者可以控制自己与其他使用者的联 系,同
时支持拨号的用户。
所以我们说的虚拟专用网一般指的是建筑在Internet上能够自我管理的专用网络,而不是Frame Relay或ATM等提供虚拟固定线路
(PVC)服务的网络。以IP为主要通讯协议的VPN,也可称之为IP-VPN。
由于VPN是在Internet上临时建立的安全专用虚拟网络,用户就节省了租用专线的费用,在运行的资金支出上,除了购买VPN设备,企业
所付出的仅仅是向企业所在地的ISP支付一定的上网费用,也节省了长途电话费。这就是VPN价格低廉的原因。
越来越多的用户认识到,随着Internet和电子商务的蓬勃发展,经济全球化的最佳途径是发展基于Internet的商务应用。随着商务活动的日
益频 繁,各企业开始允许其生意伙伴、供应商也能够访问本企业的局域网,从而大大简化信息交流的途径,增加信息交换速度。这些合作和联系
是动态的,并依靠网络来 维持和加强,于是各企业发现,这样的信息交流不但带来了网络的复杂性,还带来了管理和安全性的问题,因为
Internet是一个全球性和开放性的、基于 TCP/IP 技术的、不可管理的国际互联网络,因此,基于Internet的商务活动就面临非善意的信息威胁
和安全隐患。
还有一类用户,随着自身的的发展壮大与跨国化,企业的分支机构不仅越来越多,而且相互间的网络基础设施互不兼容也更为普遍。因此,
用户的信息技术部门在连接分支机构方面也感到日益棘手。
用户的需求正是虚拟专用网技术诞生的直接原因。
用户需要的VPN
一.VPN的特点
在实际应用中,用户需要的是什么样的VPN呢?一般情况下,一个高效、成功的VPN应具备以下几个特点:
1.安全保障
虽然实现VPN的技术和方式很多,但所有的VPN均应保证通过公用网络平台传输数据的专用性和安全性。在非面向连接的公用IP网络
上建立一个逻辑的、点对 点的连接,称之为建立一个隧道,可以利用加密技术对经过隧道传输的数据进行加密,以保证数据仅被指定的发送者和
接收者了解,从而保证了数据的私有性和安全 性。在安全性方面,由于VPN直接构建在公用网上,实现简单、方便、灵活,但同时其安全问题
也更为突出。企业必须确保其VPN上传送的数据不被攻击者窥视 和篡改,并且要防止非法用户对网络资源或私有信息的访问。ExtranetVPN将
企业网扩展到合作伙伴和客户,对安全性提出了更高的要求。
2.服务质量保证(QoS)
VPN网应当为企业数据提供不同等级的服务质量保证。不同的用户和业务对服务质量保证的要求差别较大。如移动办公用户,提供广泛
的连接和覆盖性是保证 VPN服务的一个主要因素;而对于拥有众多分支机构的专线VPN网络,交互式的内部企业网应用则要求网络能提供良好
的稳定性;对于其它应用(如视频等)则 对网络提出了更明确的要求,如网络时延及误码率等。所有以上网络应用均要求网络根据需要提供不同
等级的服务质量。在网络优化方面,构建VPN的另一重要需 求是充分有效地利用有限的广域网资源,为重要数据提供可靠的带宽。广域网流量
的不确定性使其带宽的利用率很低,在流量高峰时引起网络阻塞,产生网络瓶颈, 使实时性要求高的数据得不到及时发送;而在流量低谷时又造
成大量的网络带宽空闲。QoS通过流量预测与流量控制策略,可以按照优先级分配带宽资源,实现带 宽管理,使得各类数据能够被合理地先后
发送,并预防阻塞的发生。
3.可扩充性和灵活性
VPN必须能够支持通过Intranet和Extranet的任何类型的数据流,方便增加新的节点,支持多种类型的传输媒介,可以满足同时传输语
音、图像和数据等新应用对高质量传输以及带宽增加的需求。
4.可管理性
从用户角度和运营商角度应可方便地进行管理、维护。在VPN管理方面,VPN要求企业将其网络管理功能从局域网无缝地延伸到公用网,
甚至是客户和合作伙 伴。虽然可以将一些次要的网络管理任务交给服务提供商去完成,企业自己仍需要完成许多网络管理任务。所以,一个完善
的VPN管理系统是必不可少的。VPN 管理的目标为:减小网络风险、具有高扩展性、经济性、高可靠性等优点。事实上,VPN管理主要包括安
全管理、设备管理、配置管理、访问控制列表管理、 QoS管理等内容。
二.自建还是外包
由于VPN低廉的使用成本和良好的安全性,许多大型企业及其分布在各地的办事处或分支机构成了VPN顺理成章的用户群。对于那些最
需要VPN业务的中小企 业来说,一样有适合的VPN策略。当然,不论何种VPN策略,它们都有一个基本目标:在提供与现有专用网络基础设
施相当或更高的可管理性、可扩展性以及简 单性的基础之上,进一步扩展公司的网络连接。
1.大型企业自建VPN
大型企业用户由于有雄厚的资金投入做保证,可以自己建立VPN,将VPN设备安装在其总部和分支机构中,将各个机构低成本且安全地连接在
一起。企业建立自 己的VPN,最大的优势在于高控制性,尤其是基于安全基础之上的控制。一个内部VPN能使企业对所有的安全认证、网络系
统以及网络访问情况进行控制,建立 端到端的安全结构,集成和协调现有的内部安全技术。
企业还可以确保得到业内最好的技术以满足自身的特殊需要,这要优于ISP所提供的普通服务。而且,建立内部VPN能使企业有效节省VPN的
运作费用。企业可以节省用于外包管理设备的额外费用,并且能将现有的远程访问和端到端的网络集成起来,以获取最佳性价比的VPN。
虽然VPN外包能避免技术过时,但并不意味着企业可以节省开支。因为,企业最终还要为高额产品支付费用,以作为使用新技术的代价。虽然
VPN外包可以简化 企业网络部署,但这同样降低了企业对公司网的控制等级。网络越大,企业就越依赖于外包VPN供应商。因此,自建VPN
是大型企业的最好选择。
2.中小型企业外包VPN
虽然每个中小型企业都是相对集中和固定的,但是部门与部门之间、企业与其业务相关企业之间的联系依然需要廉价而安全的信息沟通,在
这种情况下就用得上 VPN。电信企业、IDC目前提供的VPN服务,更多的是面向中小企业,因为可以整合现有资源,包括网络优势、托管和技
术力量来为中小企业提供整体的服 务。中小型企业如果自己购买VPN设备,则财务成本较高,而且一般中小型企业的IT人员短缺、技能水平不
足、资金能力有限,不足以支持VPN,所以,外包 VPN是较好的选择。
* 外包VPN比企业自己动手建立VPN要快得多,也更为容易。
* 外包VPN的可扩展性很强,易于企业管理。有统计表明,使用外包VPN方式的企业,可以支持多于2300名用户,而内部VPN平均只能
支持大约150名用户。而且,随着用户数目的增长,对用于监控、管理、提供IT资源和人力资源的要求也将呈指数增长。
* 企业VPN必须将安全和性能结合在一起,然而,实际情况中两者不能兼顾。例如,对安全加密级别的配置经常降低VPN的整体性能。而
通过提供VPN外包业务的专业ISP的统一管理,可大大提高VPN的性能和安全。ISP的VPN专家还可帮助企业进行VPN决策。
* 对服务水平协议(SLA)的改进和服务质量(QoS)保证,为企业外包VPN方式提供了进一步的保证。
三.VPN安全技术
由于传输的是私有信息,VPN用户对数据的安全性都比较关心。
目前VPN主要采用四项技术来保证安全,这四项技术分别是隧道技术(Tunneling)、加解密技术(Encryption & Decryption)、密钥
管理技术(Key Management)、使用者与设备身份认证技术(Authentication)。
1.隧道技术是VPN的基本技术,类似于点对点连接技术,它在公用网建立一条数据通道(隧道),让数据包通过这条隧道传输。隧道是由
隧道协议形成的,分为 第二、三层隧道协议。第二层隧道协议是先把各种网络协议封装到PPP中,再把整个数据包装入隧道协议中。这种双层
封装方法形成的数据包靠第二层协议进行传 输。第二层隧道协议有L2F、PPTP、L2TP等。L2TP协议是目前IETF的标准,由IETF融合PPTP与
L2F而形成。
第三层隧道协议是把各种网络协议直接装入隧道协议中,形成的数据包依靠第三层协议进行传输。第三层隧道协议有VTP、IPSec等。IPSec(IP
Security)是由一组RFC文档组成,定义了一个系统来提供安全协议选择、安全算法,确定服务所使用密钥等服务,从而在IP层提供安全保障。
2.加解密技术是数据通信中一项较成熟的技术,VPN可直接利用现有技术。
3.密钥管理技术的主要任务是如何在公用数据网上安全地传递密钥而不被窃取。现行密钥管理技术又分为SKIP与ISAKMP/OAKLEY两种。
SKIP 主要是利用Diffie-Hellman的演算法则,在网络上传输密钥;在ISAKMP中,双方都有两把密钥,分别用于公用、私用。
4.身份认证技术最常用的是使用者名称与密码或卡片式认证等方式。
四.堵住安全漏洞
安全问题是VPN的核心问题。目前,VPN的安全保证主要是通过防火墙技术、路由器配以隧道技术、加密协议和安全密钥来实现的,可以
保证企业员工安全地访问公司网络。
但是,如果一个企业的VPN需要扩展到远程访问时,就要注意,这些对公司网直接或始终在线的连接将会是黑客攻击的主要目标。因为,
远程工作员工通过防火墙 之外的个人计算机可以接触到公司预算、战略计划以及工程项目等核心内容,这就构成了公司安全防御系统中的弱点。
虽然,员工可以双倍地提高工作效率,并减少 在交通上所花费的时间,但同时也为黑客、竞争对手以及商业间谍提供了无数进入公司网络核心的
机会。
但是,企业并没有对远距离工作的安全性予以足够的重视。大多数公司认为,公司网络处于一道网络防火墙之后是安全的,员工可以拨号进
入系统,而防火墙会将一 切非法请求拒之其外;还有一些网络管理员认为,为网络建立防火墙并为员工提供VPN,使他们可以通过一个加密的
隧道拨号进入公司网络就是安全的。这些看法 都是不对的。
在家办公是不错,但从安全的观点来看,它是一种极大的威胁,因为,公司使用的大多数安全软件并没有为家用计算机提供保护。一些员工
所做的仅仅是进入一台家 用计算机,跟随它通过一条授权的连接进入公司网络系统。虽然,公司的防火墙可以将侵入者隔离在外,并保证主要办
公室和家庭办公室之间VPN的信息安全。但 问题在于,侵入者可以通过一个被信任的用户进入网络。因此,加密的隧道是安全的,连接也是正
确的,但这并不意味着家庭计算机是安全的。
黑客为了侵入员工的家用计算机,需要探测IP地址。有统计表明,使用拨号连接的IP地址几乎每天都受到黑客的扫描。因此,如果在家办
公人员具有一条诸如 DSL的不间断连接链路(通常这种连接具有一个固定的IP地址),会使黑客的入侵更为容易。因为,拨号连接在每次接入
时都被分配不同的IP地址,虽然它也 能被侵入,但相对要困难一些。一旦黑客侵入了家庭计算机,他便能够远程运行员工的VPN客户端软件。
因此,必须有相应的解决方案堵住远程访问VPN的安全 漏洞,使员工与网络的连接既能充分体现VPN的优点,又不会成为安全的威胁。在个人
计算机上安装个人防火墙是极为有效的解决方法,它可以使非法侵入者不能 进入公司网络。当然,还有一些提供给远程工作人员的实际解决方法:
* 所有远程工作人员必须被批准使用VPN;
* 所有远程工作人员需要有个人防火墙,它不仅防止计算机被侵入,还能记录连接被扫描了多少次;
* 所有的远程工作人员应具有入侵检测系统,提供对黑客攻击信息的记录;
* 监控安装在远端系统中的软件,并将其限制只能在工作中使用;
* IT人员需要对这些系统进行与办公室系统同样的定期性预定检查;
* 外出工作人员应对敏感文件进行加密;
* 安装要求输入密码的访问控制程序,如果输入密码错误,则通过Modem向系统管理员发出警报;
* 当选择DSL供应商时,应选择能够提供安全防护功能的供应商。
附B.6 全面认识VPN(二)
寻求适合的VPN方案
VPN有三种解决方案,用户可以根据自己的情况进行选择。这三种解决方案分别是:远程访问虚拟网(AccessVPN)、企业内部虚拟网
(IntranetVPN)和企业扩展虚拟网(ExtranetVPN),这三种类型的VPN分别与传统的远程访问网络、企业内部的Intranet 以及 企业网和相
关合作伙伴的企业网所构成的Extranet相对应。
1.如果企业的内部人员移动或有远程办
文档版本: 修订版(200907281129)
完成时间: 2009年07月20日
修改时间: 2009年07月28日
修改次数: 7次
文档编写: 郭瑞 (china.guorui@gmail.com)
复杂问题简单化, 系统程序问题模块化. 清晰的思路是解决问题的关键!
修改内容:
2009-07-20 OpenVPN Server在CentOS5.3系统上的安装与配置
2009-07-22 OpenVPN for Linux client的配置第[5]结
2009-07-23 增加vpn原理的一些东西(从网上找的) 附B: VPN原理资料
增加 [3.8] 小节 防止恶意攻击
增加 [3.9] 小节 生成带密码的证书文件
增加 [3.10] 小节 注销证书
增加 [3.11] 小节 启用ip转发,并且配置iptable, 实现NAT功能
2009-07-27 增加 [3.12]小节 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
增加 [附C.1] 创建vpn mysql数据库用户的php 脚本
2009-07-28 增加 [ 3.12.1.4]小节 配置openvpn 服务器及客户端配置文件
增加 [附B.8]小节 tun/tap设备FAQ
OpenVPN简介
OpenVPN允许参与建立VPN的单点使用共享密钥,电子证书,用户名/密码来进行身份验证,它大量使用了OpenSSL加密码库中的
SSLv3/TLSv1协议函式库. 目前OpenVPN能在Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X与Windows 2000/XP/Vista上运行,
并包含了许多安全性的功能, 它并不是一个基于Web的VPN软件, 也不与IPsec及其它VPN软件包兼容.
OpenVPN所有的通信都能基于一个单一的IP端口, 默认且推荐使用UDP协议通讯, 同时TCP也被支持,OpenVPN连接能通过大多数的代理
服务器,并且能够在NAT的环境中很好地工作, 服务端具有向客户端”推送”某些网络配置信息的功能,这些信息包括:IP地址, 路由设置等.OpenVP
N提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据,
传送的数据可通过LZO算法压缩. IANA(Internet Assigned Numbers Authority) 指定给OpenVPN的官方端口为1194, OpenVPN2.0以后版
本每个进程可以同时管理数个并发的隧道.
OpenVPN使用通用网络协议(TCP 与UDP)的特点使它成为IPsec 等协议的理想替代,尤其是在ISP(Internet service provider)过滤
某些特定VPN 协议的情况下。
在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于
存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
以上内容来源:维基百科: OpenVPN: http://zh.wikipedia.org/wiki/OpenVPN
文档说明
此文档内容所使用的环境为CentOS5.3 64位操作系统, 服务器为: ProLiant DL360 G5, cpux2x2.0 16G内存
#为root提示符下, $为非root提示符下.
文档目录
1. 安装OpenVPN之前的准备
1.1 OpenVPN软件及相关软件下载
1.2 准备OpenVPN安装目录
2. 开始安装OpenVPN
2.1 编译安装OpenVPN
3. 配置的OpenVPN Server
3.1 建立配置环境
3.2 生成服务器CA证书及密钥
3.3 生成客户端CA证书及密钥
3.4 生成openvpn配置文件
3.5 创建openvpn的启动脚本
3.6 将openvpn添加到系统自启动
3.7 启动/停止openvpn服务
3.8 防止恶意攻击
3.9 生成带密码的证书文件
3.10 注销证书
3.11 启用ip转发,并且配置iptable, 实现NAT功能
3.12 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
3.12.1 安装mysql数据库及mysql PAM验证模块
3.12.1.1 安装mysql数据库
3.12.1.2 配置mysql数据库
3.12.1.3 配置PAM mysql认证模块
3.12.1.4 配置openvpn 服务器及客户端配置文件
4. 配置windows客户端: OpenVPN GUI
4.1 下载并安装OpenVPN GUI
4.2 配置OpenVPN GUI
4.3 启动OpenVPN GUI
5. 配置Linux客户端
5.1 安装openvpn
5.2 配置openvpn client
附A: 参考资料
附B: VPN原理资料
附B.1 IPSEC VPN基本原理(1)
附B.2 IPSEC VPN基本原理(2)
附B.3 VPN基本原理之一(MPLS VPN的工作原理)
附B. 4 VPN基本原理之二(SSL VPN的基本原理分析)
附B.5 全面认识VPN(一)
附B.6 全面认识VPN(二)
附B.7 全面认识VPN(三)
附B.8 tun/tap设备FAQ
附C: 脚本命令
附C.1 创建 vpn mysql数据库数据的php脚本
文档内容
1. 安装OpenVPN之前的准备
1.1 OpenVPN软件及相关软件下载
准备一个下载软件包目录
[root@guorui ~]#mkdir /home/src/openvpn
在安装openvpn时需要安装LZO软件包, 这个软件包是一个解压缩库文件,openvpn所使用的一个软件包, 如在configure时没有发现此
包将会出现configure错误.
Openvpn当前版本为2.0, 去官方网站下载最新的软件包
http://www.openvpn.net
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
从LZO官方网站下载LZO 软件包, LZO是一个实时无损压缩工具,当前版本2.0.3
http://www.oberhumer.com/opensource/lzo/
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
1.2 准备OpenVPN安装目录
因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn目录, 配置文件目录为/etc/openvpn目录
程序目录: /usr/local/openvpn
配置目录: /etc/openvpn
2. 开始安装OpenVPN
2.1 编译OpenVPN
[root@guorui ~]#cd /home/src/openvpn
[root@guorui openvpn]#tar zxvf lzo-2.03.tar.gz
[root@guorui openvpn]#cd lzo-2.03
[root@guorui lzo-2.03]#./configure && make && make install
编辑/etc/ld.so.conf
[root@guorui lzo-2.03]#cat >> /etc/ld.so.conf << EOF
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
EOF
编辑完后运行
[root@guorui lzo-2.03]#ldconfig
使动态连接库文件生效,接下来编译openvpn
[root@guorui openvpn]# tar zxvf openvpn-2.0.9.tar.gz
[root@guorui openvpn]# cd openvpn-2.0.9
[root@guorui openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install
[root@guorui openvpn-2.0.9]#tree /usr/local/openvpn
应该有以下输出
[root@guorui ~]# tree /usr/local/openvpn/
/usr/local/openvpn/
|-- man
| `-- man8
| `-- openvpn.8
`-- sbin
|-- key
`-- openvpn
3 directories, 3 files
3. 配置的OpenVPN Server
3.1 建立配置环境
[root@guorui ~]# mkdir -p /etc/openvpn
[root@guorui ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn
[root@guorui ~]# cd /etc/openvpn/easy-rsa/2.0/
此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
clean-all 脚本,是创建生成ca证书及密钥文件所需要的文件及目录
build-ca 脚本, 生成ca证书(交互)
build-dh 脚本, 生成Diffie-Hellman文件(交互)
build-key-server 脚本, 生成服务器端密钥(交互)
build-key 脚本, 生成客户端密钥(交互)
pkitool 脚本, 直接使用vars的环境变量设置, 直接生成证书(非交互)
3.2 生成CA证书及密钥[注意字符输入不要出错]
[root@guorui 2.0]# . ../vars
[root@guorui 2.0]# chmod +rwx *
初始化keys目录,创建生成ca证书及密钥文件所需要的文件和目录
[root@guorui 2.0]# ./clean-all
编辑vars文件,生成环境变量, vars里的参数根据自己需要改变.
export KEY_SIZE=1024 #生成密钥的位数
export KEY_COUNTRY=CN #定义所在的国家编码, 2个字符
export KEY_PROVINCE=BeiJing #定义所在的省份
export KEY_CITY=BeiJing #定义所在的城市
export KEY_ORG=”VPN Test org” #定义所在的组织
export KEY_OU=”VPN COM” #定义所在的单位
export KEY_EMAIL=”china.guorui@gmail.com” #定义你的邮件地址
修改好vars文件后就可以开始生成ca证书及密钥文件了!
[root@guorui 2.0]# source ./vars
生成Root Ca证书, 用于签发Server和Client证书
[root@guorui 2.0]#./build-ca
[root@guorui 2.0]# ls keys
可以看到已经生成了ca.crt ca.key文件
生成Diffie-Hellman文件
[root@guorui 2.0]#./build_dh
[root@guorui 2.0]#ls -l keys/dh2048.pem
可以看到生成了2048位的Diffie-Hellman文件
生成服务器使用的VPN server Ca证书
[root@guorui 2.0]#./build-key-server server
server是你为CA证书起的一个名字, 以server名字为例,生成的服务器使用的CA证书文件为: server.crt server.key
将生成的CA证书及密钥拷贝到/etc/openvpn下
[root@guorui 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/
3.3 生成客户端CA证书及密钥
生成客户端CA证书及密钥使用:build-key程序即可
[root@guorui 2.0]#./build-key guorui
将在keys目录下生成guorui.crt guorui.csr guorui.key三个客户端证书
将ca.crt ca.key guorui.crt guorui.csr guorui.key五个文件打包,以备客户端vpn使用
[root@guorui 2.0]#tar zcvf guorui.vpn.key.tar.gz keys/{ca.crt ca.key guorui.crt guorui.csr guorui.key}
3.4 生成openvpn配置文件
创建openvpn 配置文件最好的方法是先看openvpn 的样例文件,在源码目录下的sample-config-files下,本例为
/home/src/openvpn/openvpn-2.0.9/sample-config-files
服务器端配置文件名: server.conf
客户端配置文件名为: client.conf
可以根据需要修改.
本例的配置文件 为:/etc/openvpn/openvpn.conf
#########################################################################
port 1723 #openvpn默认端口为1194
proto tcp
dev tun
#########################################################################
# ca证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn目录下,与配置文件相同目录
#########################################################################
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 172.16.0.0 255.255.0.0
push "dhcp-option DNS 202.106.0.20"
push "dhcp-option DNS 168.210.2.2"
push "route 172.16.0.0 255.255.0.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
#Client 之间可以相互访问
client-to-client
#允许一个用户多次访问
duplicate-cn
log /var/log/openvpn.log
log-append /var/log/openvpn.log
#########################################################################
3.5 创建openvpn的启动脚本
openvpn的启动脚本在源码目录: sample-scripts目录下
文件名为: openvpn.init
将openvpn.ini拷贝到/etc/init.d下,并重新命名为openvpn
[root@guorui ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn
因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn的69行
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
修改为:
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn"
3.6 将openvpn添加到系统自启动
[root@guorui ~]# chkconfig –add openvpn
3.7 启动/停止openvpn服务
启动openvpn服务
[root@guorui ~]#service openvpn start
停止openvpn服务
[root@guorui ~]#service openvpn stop
3.8 防止恶意攻击
如果想让openvpn防止恶意攻击如DOS、UDP port flooding,生成一个"HMAC firewall", 这个功能可以不启用,减少麻烦。
[root@guorui keys]#/usr/local/sbin/openvpn --genkey --secret /etc/openvpn/easy-rsa/2.0/keys/ta.key
这个时候,在keys目录下,产生一个ta.key,同时也需要在openvpn.conf 文件里添加一行
openvpn.conf
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0
要启用这个功能,你还需要把 ta.key 这个文件下载到客户端,并且客户端里的配置文件也需要添加一行
tls-auth ta.key 1
3.9 生成带密码的证书文件
客户端不但需要证书,还需要密码,而且这个密码,客户端可以自己进行修改。这个倒是非常不错。
[root@guorui keys]#./build-key --pass guorui
或者
[root@guorui keys]#./pkitool –pass guorui
出现Enter PEM pass phrase:
提示你输入密码
3.10 注销证书
这是openvpn的一个bug, 如果你直接注销证书, 会出现一个报错:
Using configureation from /etc/openvpn/easy-rsa/2.0/openssl.cnf
error on line 282 of config file '/etc/openvpn/easy-rsa/2.0/openssl.cnf'
所以需要编辑openssl.cnf文件, 把[pkcs11_section]及其这个选择下的内容注释掉. 就可以了。
/etc/openvpn/easy-rsa/2.0/openssl.cnf
#[pkcs11_section]
#engine_id=pkcs11
#dynamic_path=/usr/lib/engines/engine_pkcs11.so
#MODULE_PATH=$ENV::PKCS11_MODULE_PATH
#PIN=$ENV::PKCS11_PIN
#init=0
如果要注销guorui的证书, 运行以下命令.
[root@guorui keys]#./revoke-full guorui
会在keys目录下,产生一个文件叫crl.pem, 这个文件保存着注销客户端的名字,在openvpn server端的配置文件中添加以下一行,并重启
openvpn, 使用这个证书的客户再也不能连接到vpn了.
3.11 启用ip转发,并且配置iptable, 实现NAT功能
如果实现在拨到vpn 上后能够使用openvpn server上网的话, 需要配置NAT功能, 修改openvpn的管理脚本.在管理脚本的start功能里
添加以下命令(在管理脚本的119行):
#######################################
# filename: /etc/init.d/openvpn
#######################################
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT –to server_ipaddress
3.12 使用用户名密码登录验证 (用户名及密码存放在mysql库中)
3.12.1 安装mysql数据库及mysql PAM验证模块
3.12.1.1 安装mysql数据库:
从mysql官方网站下载mysql 源码包: http://www.mysql.com, 用以下命令安装:(我用的是5.0.84版本)
[root@guorui mysql-5.0.84]# ./configure --prefix=/usr/local/mysql –with-unix-socket-\
path=/tmp/mysql.socket --with-big-tables –with-\
charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-lib-ccflags –enable-thread-\
safe-client --mandir=/usr/local/man –with-pthread && make && make install
增加mysql用户及mysql用户组
[root@guorui mysql-5.0.84] # adduser -d /dev/null -s /sbin/nologin mysql
修改mysql用户的密码
[root@guorui mysql-5.0.84]# passwd mysql
修改mysql数据库目录的权限
[root@guorui mysql-5.0.84]#chown -R mysql.mysql /usr/local/mysql/var/
初始化mysql数据库, 安装mysql必须的数据库文件
[root@guorui mysql-5.0.84]#sh /usr/local/mysql/bin/mysql_install_db –user=mysql
3.12.1.2 配置mysql数据库:
如果你想更多的优化你的mysql数据库可以参考:
http://linux.chinaunix.net/techdoc/database/2009/06/06/1116911.shtml
安全方面参考:
http://www.unixren.com/linux/bencandy.php?fid=21&id=459
Mysq l 配置文件 :
拷贝mysql数据库配置文件从源码包目录中, /home/src/mysql-5.0.84/support-files下有适用于不同环境下的
mysql配置文件: my-huge.cnf.sh my-innodb-heavy-4G.cnf.sh my-large.cnf.sh my-medium.cnf.sh my-small.cnf.sh
我选择的是my-huge.cnf.sh, 根据自己的需要选择. 拷贝到/etc/ 下并命名为my.cnf
[root@guorui support-files]# cp -f my-huge.cnf.sh /etc/my.cnf
修改mysql配置文件 /etc/my.cnf
将[client]字段换成:
port = 33066
socket = /tmp/mysql.socket
将[mysqld]字段的以下选项换成:
port = 33066
socket = /tmp/mysql.socket
bind_address = localhost
注意: 如果指定了bind_address,在配置phpmyadmin时要将: $cfg['Servers'][$i]['host']变量的值设置为: 127.0.0.1 否
则会出现:
#2002 - 服务器没有响应 (or the local MySQL server's socket is not correctly configured)
之类的错误提示.
Mysql启动脚本
将support-files目录下的mysql.server.sh拷贝到/etc/init.d目录下并重新命名为mysql,修改其属性为可执行
[root@guorui support-files]#cp -f mysql.server.sh /etc/init.d/mysql
编辑/etc/init.d/mysql
将46,47行换成你的mysql数据库安装的目录及数据库数据的目录的安装路径:
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
将59,60行换成你的mysql数据pid的路径
pid_file=/usr/local/mysql/var/mysql.pid
server_pid_file=/usr/local/mysql/var/`hotname`.pid
启动mysql数据库
[root@guorui support-files]#service mysql start
[root@guorui support-files]# netstat -nalp -t
如果有以下输出说明mysql已经正常启动
tcp 0 0 127.0.0.1:33066 0.0.0.0:* LISTEN 22023/mysqld
修改mysql 的root密码
[root@guorui support-files]#/usr/local/mysql/bin/mysqladmin -u root password “newpwd”
或
[root@guorui support-files]#/usr/local/mysql/bin/mysqladmin -u root -h localhost password “newpwd”
将mysql加入系统自启动中
[root@guorui support-files]#chkconfig –add mysql
[root@guorui support-files]#chkconfig –level 345 mysql on
创建vpn使用的数据库
创建 ppenvpn使用的数据的方法有两种, 1 种是用mysql命令方式创建, 2种是用mysql管理工具phpmyadmin创建,
因实验环境有apache+php所以用phpmyadmin创建,此方法是最直观最方便的 ^_^,
可以到phpmyadmin官方网站下载软件包
http://www.phpmyadmin.net
下载后解压到你的web发布目录中, 我的是web发布目录为/usr/local/apache/htdocs
phpmyadmin放在web发布目录的tools下,使用:
http://172.16.0.1/tools/phpmyadmin/
创建openvpn使用的数据库名为: openvpn, 数据库表为openvpnuser表,用来存放vpn登录用户名及密码
database name: openvpn
database tables: openvpnuser
数据表openvpnuser的表结构如下:
id int(11)
username char(20)
password char(128)
active int(10)
reg_date in(11)
使用命令行方式添加数据表结构如下:
mysql>use openvpn;
mysql> CREATE TABLE openvpnuser (
->id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
->username CHAR(20) NO NULL,
->password CHAR(128) NULL,
->active INT(10) NO NULL DEFAULT 1,
->reg_date INT(11) NOT NULL
->);
当active不为1时,无权使用vpn
创建openvpn数据库的用户用为openvpn,openvpn用户可以对openvpn数据库使用所有权限.(数据库及表的操作权
限), 使用phpmyadmin操作.
创建测试用户
1. 创建测试用户用一个脚本来创建最好不过了.参考[附C.1]脚本.
2. 连接mysql后使用sql语句创建测试用户,用户名test 密码test的用户.
mysql> INSERT INTO openvpnuser (username, password)
> VALUES ('test', password('test'));
3.12.1.3 配置PAM mysql认证模块:
1) 编译并安装pam_mysql认证模块
到官方网站下载pam mysql认证模块源码,编译并安装
http://pam-mysql.sourceforge.net
因在安装mysql时指定了mysql的安装目录, 所以在安装pam_mysql时要指定mysql数据的安装目录
[root@guorui pam_mysql-0.7RC1]#./configure –with-mysql=/usr/local/mysql && make
在此目录下有一个.libs的隐藏目录,
[root@guorui pam_mysql-0.7RC1]#ls .libs
pam_mysql.la pam_mysql.lai pam_mysql.o pam_mysql.so
因我的系统为64位系统, 所以将pam_mysql.so 拷贝到/lib64/security/目录下
[root@guorui pam_mysql-0.7RC1]# cp -f .libs/pam_mysql.sl /lib64/security/
2) 配置pam_mysql模块
创建/etc/pam.d/openvpn文件
[root@guorui pam_mysql-0.7RC1]#touch /etc/pam.d/openvpn
文件内容:
auth required /lib/security/pam_mysql.so user=openvpn passwd=数据库密码 host=localhost db=openvpn\
table=openvpnuser usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=2 \
verbose=1
account required /lib/security/pam_mysql.so user=openvpn passwd=数据库密码 host=localhost db=openvpn \
table=openvpnuser usercolumn=username passwdcolumn=password where=active=1 sqllog=0 crypt=2 \
verbose=1
#crypt = 2 时用mysql password() 函数 1为crypt
3) 测试pam_mysql是否工作正常
检查saslauthd是否安装(CentOS5.3)
[root@guorui ~]# rpm -aq | grep sasl
如果输出中包含cyrus-sasl-版本号,说明已经安装好syrus-sasl软件包.
注意: 系统自带的cyrus-sasl程序使用的mysql socket文件名为mysql.sock(程序写死的:( ),因为我自己编译的mysql
socket文件为:mysql.socket, 所以需要做一个软链: cd /tmp; ln -s mysql.socket mysql.sock
mysql.socket,
安装testsaslauthd软件
从http://cyrusimap.web.cmu.edu下载cyrus-sasl软件包,编译安装
[root@guorui cyrus-sasl-2.1.23]# ./configure –with-saslauthd=/var/run/saslauthd
[root@guorui cyrus-sasl-2.1.23]#cd saslauthd
编译testsaslauthd程序
[root@guorui cyrus-sasl-2.1.23]#make testsaslauthd
[root@guorui cyrus-sasl-2.1.23]#cp -f testsaslauthd /usr/sbin
4) 启动saslauthd进程
[root@guorui syrus-sasl-2.1.23]#service saslauthd start
5) 测试pam_mysql是否可用
[root@guorui ~]#testsaslauthd -u test -p test -s openvpn
如果出现: 0: OK “Success.”, 表示测试成功
如果出现错误可以从系统日志及安全日志里看到出错信息:
系统日志: /var/log/messages
安全日志: /var/log/secure
3.12.1.3 配置openvpn 服务器及客户端配置文件
1) 服务器端配置文件
进入openvpn源代码目录, 在plugin/auth-pam下将openvpn认证模块编译出来
目录在: /home/src/openvpn/openvpn-2.0.9/plugin/auth-pam
[root@guorui auth-pam]#make && cp -f openvpn-auth-pam.so /lib/security/
在服务器端配置文件加入: plugin /lib/security/openvpn-auth-pam.so openvpn
重新启动openvpn
[root@guorui ~]#service openvpn restart
配置文件选项说明:
plugin /lib/security/openvpn-auth-pam.so openvpn
申明openvpn使用的插件, openvpn为插件参数,和pam_mysql的service name是一样的
client-cert-not-required
不请求客户的CA证书, 使用用户名/密码验证, (本配置中没指定, 使用双重认证, 证书和密码验证)
2) 客户端配置文件
在客户端配置文件中加入: auth-user-pass
重新启动客户端连接到vpn server时就需要输入用户名和密码了.
4. 配置windows客户端: OpenVPN GUI
4.1 下载并安装OpenVPN GUI
到http://openvpn.se
下载并安装OpenVPN GUI
4.2 配置OpenVPN GUI
OpenVPN GUI的配置文件目录为: C:\Program Files\OpenVPN\config目录下,
客户端配置文件名为: client.ovpn
创建OpenVPN GUI的配置文件, 服务器端源码目录下的: /home/src/openvpn/openvpn-2.0.9/sample-config-files/client.conf文
件是创建openvpn客户端的配置文件, 用在linux下文件名是client.conf, 如果是windows, VPN客户端用的是OpenVPN GUI的话, 配
置文件请改名为client.ovpn, 要不连接vpn时会找不到配置文件,OpenVPN GUI点右键时没有connect选项. 以下是我的OpenVPN GUI
for windows 客户端配置文件:(client.ovpn)
#####################################################
# OpenVPN GUI client configure file
#####################################################
client
proto tcp
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
remote {server_ip_address} 1723
#####################################################
# 以你客户端ca认证文件及密钥文件目录为准
#####################################################
ca ca.crt
cert guorui.crt
key guorui.key
#####################################################
4.3 启动OpenVPN GUI
点击:开始->所有程序->OpenVPN->OpenVPN GUI
会在任务栏右下角有一个网络的图标,点右键->Connect即可建立与服务器之间的vpn连接
5. 配置Linux客户端
配置linux的客户端和windows的客户端是一样的, 只不过安装的软件不是openvpn gui, 还是openvpn这个软件包,配置文件和windows的
一样.具体步聚如下:
5.1 安装openvpn
安装openvpn的过程参考 第[2]节
5.2 配置openvpn client
创建openvpn配置文件目录, 将在服务器端生成好的CA证书及用户认证文件放到/etc/openvpn下.我的几个文件为:
ca.crt ca.key guorui.crt guorui.csr guorui.key
[root@guorui ~]# mkdir -p /etc/openvpn
生成client 配置文件, 文件内容如下:
#####################################################
# OpenVPN GUI client configure file
#####################################################
client
proto tcp
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
remote {server_ip_address} 1723
#####################################################
# 以你客户端ca认证文件及密钥文件目录为准
#####################################################
ca ca.crt
cert guorui.crt
key guorui.key
#####################################################
以上内容做完之后参考 第[3.5]小节和第[3.7]小节 创建openvpn的启动脚本,和启动openvpn, 即可以得到虚拟私网地址。
附A. 参考资料
OpenVPN 官方文档: http://openvpn.net/index.php/open-source/documentation.html
Linux HOWTO资料: http://www.howtoforge.com/
附B: VPN原理资料
附B.1 IPSEC VPN基本原理(1)
IPSEC是一套比较完整成体系的VPN技术,它规定了一系列的协议标准。如果不深入探究IPSEC的过于详细的内容,我们对于IPSEC大致按照
以下几个方面理解。
1. 为什么要导入IPSEC协议
导入IPSEC协议,原因有2个,一个是原来的TCP/IP体系中间,没有包括基于安全的设计,任何人,只要能够搭入线路,即可分析所有的
通讯数据。IPSEC引进了完整的安全机制,包括加密、认证和数据防篡改功能。
另外一个原因,是因为Internet迅速发展,接入越来越方便,很多客户希望能够利用这种上网的带宽,实现异地网络的的互连通。
IPSEC协议通过包封装技术,能够利用Internet可路由的地址,封装内部网络的IP地址,实现异地网络的互通。
2. 包封装协议
设想现实一种通讯方式。假定发信和收信需要有身份证(成年人才有),儿童没有身份证,不能发信收信。有2个儿童,小张和小李,他们
的老爸是老张和老李。现在小张和小李要写信互通,怎么办?
一种合理的实现方式是:小张写好一封信,封皮写上 "小张-->;小李", 然后给他爸爸,老张写一个信封,写上“老张-->;老李”, 把前面的
那封信套在里面,发给老李,老李收到信以后,打开,发现这封信是给儿子的,就转给小李了。小李回信也一样,通过他父亲的名义发回给小张。
这种通讯实现方式要依赖以下几个因素:
* 老李和老张可以收信发信
* 小张发信,把信件交给老张。
* 老张收到儿子的来信以后,能够正确的处理(写好另外一个信封),并且重新包装过的信封能够正确送出去。
* 另外一端,老李收到信拆开以后,能够正确地交割小李。
* 反过来的流程一样。
把信封的收发人改成Internet上的IP地址,把信件的内容改成IP的数据,这个模型就是IPsec的包封装模型。小张小李就是内部私网的IP
主机, 他们的老爸就是VPN网关,本来不能通讯的两个异地的局域网,通过出口处的IP地址封装,就可以实现局域网对局域网的通讯。
引进这种包封装协议,实在是有点不得已。理想的组网方式,当然是全路由方式。任意节点之间可达(就像理想的现实通讯方式是任何人之
间都可以直接写信互通一样)。
Internet协议最初设计的时候,IP地址是32位,当时是很足够了,没有人能够预料到将来Internet能够发展到现在的规模(相同的例子发
生在 电信短消息上面,由于160字节的限制,很大地制约了短消息的发展)。按照2的32次方计算,理论上最多能够容纳40亿个左右IP地址。
这些IP地址的利 用是很不充分的,另外大约有70%左右的IP地址被美国分配掉了(谁让人家发明并且管理Internet呢?)所以对于中国来说,
可供分配的IP地址资源 非常有限。
既然IP地址有限,又要实现异地lan-lan通讯,包封包,自然是最好的方式了。
3.安全协议(加密)
依然参照上述的通讯模型。
假定老张给老李的信件要通过邮政系统传递,而中间途径有很多好事之徒,很想偷看小张和小李(小张小李作生意,通的是买卖信息)通讯,
或者破坏其好事。
解决这个问题,就要引进安全措施。安全可以让小李和小张自己来完成,文字用暗号来表示,也可以让他们的老爸代劳完成,写好信,交给
老爸,告诉他传出去之前重新用暗号写一下。
IPSEC协议的加密技术和这个方式是一样的,既然能够把数据封装,自然也可以把数据变换,只要到达目的地的时候,能够把数据恢复成原
来的样子就可以了。这个加密工作在Internet出口的VPN网关上完成。
4.安全协议(数据认证)
还是以上述通讯模型为例,仅仅有加密是不够的。
把数据加密,对应这个模型中间,是把信件的文字用暗号表示。
好事之徒无法破解信件,但是可以伪造一封信,或者胡乱把信件改一通。这样,信件到达目的地以后,内容就面目全非了,而且收信一方不
知道这封信是被修改过的。
为了防止这种结果,就要引入数据防篡改机制。万一数据被非法修改,能够很快识别出来。这在现实通讯中间可以采用类似这样的算法,计
算信件特征(比如统计这 封信件的笔划、有多少字),然后把这些特征用暗号标识在信件后面。收信人会检验这个信件特征,由于信件改变,特
征也会变。所以,如果修改人没有暗号,改了 以后,数据特征值就不匹配了。收信人可以看出来。
实际的IPSEC通讯的数据认证也是这样的,使用md5算法计算包文特征,报文还原以后,就会检查这个特征码,看看是否匹配。证明数据
传输过程是否被篡改。
5.安全协议(身份认证)
还是假定小张小李通讯模型。
由于老张和老李不在一个地方,他们互相不能见面,为了保证他们儿子通讯的安全。老张和老李必须要相互确认对方是否可信。这就是身份
认证问题。
假定老李老张以前见过面,他们事先就约定了通讯暗号,比如1234567890对应abcdefghij, 那么写个255,对应就是一个bee。
常见的VPN身份认证可以包括预共享密钥,通讯双方实现约定加密解密的密码,直接通讯就可以了。能够通讯就是朋友,不能通讯就是坏
人,区分很简单。
其他复杂的身份认证机制包括证书(电子证书比如x509之类的),比较罗里罗嗦,这里就不具体展开了,怕有兄弟看了打瞌睡。如果需要,
可以找我要更具体的技术白皮书以及相关的身份认证文档。
如果有身份认证机制,密钥的经常更换就成为了可能。
6.其他
解决了上述的几个问题,基本可以保证VPN通讯模型能够建立起来了。
但是并不完美,这是最简单的VPN。即通过对端两个静态的IP地址,实现异地网络的互联。美国的很多VPN设备就作到这一级,因为美国
IP地址充裕,分配静态IP地址没有问题。苦的是我等中国客户,2端都需要静态IP地址,相当于2根Internet专线接入。
VPN要在中国用起来,还要解决一堆的相关问题。下一个节将给大家描述IPSEC VPN在中国应用会遇到的哪些问题。
附B.2 IPSEC VPN基本原理(2)
上次用一个简单的模型向大家描述了VPN通讯的原理。IPSEC通过包封装包的方法,通过Internet建立了一个通讯的隧道,通过这个通讯的
隧道,就可以建立起网络的连接。但是这个模型并非完美,仍然有很多问题需要解决。
在讲述其他问题以前,我们对VPN定义几个概念。
VPN节点:一个VPN节点,可能是一台VPN网关,也可能是一个客户端软件。在VPN组网中间,属于组网的一个通讯节点。它应该能够
连接 Internet,有可能是直接连接,比如adsl、电话拨号等等,也可能是通过nat方式,例如:小区宽带、cdma上网、铁通线路等等。
VPN隧道:在两个vpn节点之间建立的一个虚拟链路通道。两个设备内部的网络,能够通过这个虚拟的数据链路到达对方。与此相关的信息
是当时两个VPN节点的IP地址,隧道名称、双方的密钥。
隧道路由:一个设备可能和很多设备建立隧道,那么就存在一个隧道选择的问题,即到什么目的地,走哪一个隧道?
用前面的通讯模型来说,老李老张就是隧道节点,他们通过邮政系统建立的密码通讯关系,就是一个数据隧道,小张和小李把信发给他们老
爸的时候,他们老爸要作 出抉择,这封信怎么封装,封装以后送给谁。假如还有一个老王和他们的儿子,也要通讯,这时候隧道路由就比较好理
解了。送给小王的数据,就封装给老王,送给 小李的数据,就封装发给老李。如果节点非常多,那么这个隧道路由就会比较复杂。
理解了以上的问题,我们就知道,ipsec要解决的问题其实,可以分为以下几个步骤:
1. 找到对方vpn节点设备,如果对方是动态IP地址,那么必须能够通过一种有效途径能够及时发现对方IP地址的变化。按照通讯模型,就
是老李老张如果经常搬家的话,必须有一个有效的机制,能够及时发现老李老张地址的变化。
2. 建立隧道,建立隧道说起来简单,作起来不容易。如果两个设备都有合法的公网IP,那么建立一个隧道是比较容易的。如果一方在nat之
后,那就比较罗嗦 了。一般通过内部的vpn节点发起一个udp连接,再封装一次ipsec,送到对方,因为udp可以通过防火墙进行记忆,因此
通过udp再封装的 ipsec包,可以通过防火墙来回传递。
3. 建立隧道以后,就确定隧道路由,即到哪里去,走哪个隧道。很多VPN隧道配置的时候,就定义了保护网络,这样,隧道路由就根据保护
的网络关系来决定。但是这丧失了一定的灵活性。
所有的ipsec VPN展开来讲,实现的无非就是以上几个要点,具体各家公司,各有各的做法。但是可以肯定,目前在市场销售的VPN,肯
定都已经解决了以上的问题。
第一个问题 怎样找到vpn节点设备?
假如设备都是动态拨号方式的话,那么一定需要一个合适的静态的第三方来进行解析。相当于两个总是不停搬家的人,要合适找到对方,一
定需要一个大家都认识的朋友,这个朋友不搬家,两个人都能够联系上他。
静态的第三方,常见的有3种实现方式:
1. 通过网页,这是深信服公司发明的一种技术,通过Web页解析ip地址。大家可以登录一下http://www.123cha.com/ ,就可以查找到当
前的IP地址。因此,动态的设备,可以通过这种方式,把自己当前的IP地址提交上去。其他设备可以通过网页再查询回来。这样,设备之间就
可以互相通过这个网页找到。因为网页是相对固定的,所以这种方式能够很有效地解决这个问题。这种方式能够有效地分散集中认证的风险,而
且很容易实现备份, 属于比较巧妙的一种解决方案。当然,对于Web页可能存在比较多的攻击,因此,要注意安全防范。
2. 通过一个集中的服务器,实现统一解析,然后给用户进行分组。每个vpn设备只能看到同组的其他设备,不能跨组访问。也可以通过目录
服务器实现。这种方式适 合集中式的VPN,在企业总部部署服务器,实现全局设备的统一认证和管理。它不太适合零散用户的认证,因为存在
一个信任问题,客户会置疑管理服务器如果出 现了问题,有可能其他设备就能够连接到自己的vpn域里面。这种大型的集中vpn管理软件,在
很多国内外的vpn厂商都有专门的设备或软件,它除了能够进 行动态IP地址解析,还能够实现在线认证等等功能。如果管理中心比较职能的话,
可以集中制订通讯策略,下面的vpn设备配置参数比较少。
3. 还有一种方式,是DDNS,即动态域名。动态域名是一种相对比较平衡的技术。Vpn设备拨号以后,把自己当前的IP地址注册给一级域
名服务器,并且更新自 己的二级域名IP地址,internet其他用户,通过这个二级域名就可以查找到它。例如:动态域名服务器的名称是
99ip.net,是abc. 99ip.net,则vpn设备通过一个软件,提交给服务器,把abc.99ip.net,漂移成当前的IP地址。但是,有时也会遇到dns缓
存问题。 Vpn厂家如果自身提供ddns服务的话,就可以通过内部协议,把查询速度加快,并且避免dns缓冲带来的问题。
以上讲述了三种动态IP地址的解析方法,国内一般厂家提供的无外乎这几种方法。如果再有比较偏门的技术,也许就不是主流技术了。
解决了动态IP地址问题,按照之前的通讯模型,不考虑VPN设备很多的情况,就可以组网。因此,一旦这种技术被越来越多的厂家掌握,
基于IPsec vpn设备和软件是一定会价格下降的。It技术从朝阳变成夕阳就是转眼之间的事情。
第二个问题 隧道如何建立
解决了Ip地址动态寻址的问题,现在来说一下Nat穿越的问题。我们知道,Udp和TCP是可以穿越防火墙的。直接的IPsec封装,不能穿
越防火墙,因 为防火墙需要更改端口信息,这样回来的数据包,才能转到正确的内部主机。用UDP显然比较合适,因为使用tcp的话,不仅三
次握手占据时间很长,而且还有 来回的确认。而实际上,这些工作属于ipsec内部封装的报文要干的事情,放在这里完成是不合适的。因此,用
udp来封装ipsec报文,以穿越nat, 几乎是唯一可以选择的方案。
用udp穿越nat防火墙,这只解决了问题的一半,因为这要求至少有一方处于Internet公网上面。有可路由的IP地址。而有时会发生两个
vpn节点 都在nat之后的情景,这只能通过第三方转发来完成。即两个设备都可以与第三方设备互通,第三方设备为双方进行转发。这个可以通
过之前的模型解析,老张老 李不能直接通讯,他们都可以与老王通讯,老王就可以在中间进行转发。凡是小李小张的通讯,交给他们老爸以后,
老王最后再进行转交。这是隧道路由的概念就很 清晰了,不能一个隧道直接到达,可以在几个隧道之间转发。
所以,IPsec vpn并不神秘。所有核心的工作无非就是围绕以下几个方面展开:
1. 如何找到与本VPN节点相关的其他节点。
2. 协商出一个可以通讯的隧道。如果是nat之后,应该怎么处理。
3. 建立隧道路由表,确定不同的目标地址,走不同的隧道。
假定以上的问题都得到了解决,通过某种方式,动态IP地址的VPN节点可以相互找到对方,并且能够建立隧道,因此也能够实现隧道路由
通讯。是不是一个完整的VPN就能够实现了呢??
答案仍然是否,解决了以上问题,并不代表一个很好用的VPN产品,仍然有其他很多问题。之后的问题是围绕着复杂性展开的,简单的原理
实现之后,剩下的工作就是要解决掉全部相关的边缘问题。才能够实现一个好用的东西。能够用是一回事,好用是另外一回事。
附B.3 VPN基本原理之一(MPLS VPN的工作原理)
有很多种方法可以实现VPN。目前大家经常看到的有MPLS、IPSEC、L2tp/pp2p、SSL等类型。以下分别对MPLS的工作原理进行概述。
MPLS的工作原理及MPLS VPN技术的特点
MPLS VPN是一种基于MPLS技术的IP VPN,是在网络路由和交换设备上应用MPLS(Multiprotocol Label Switching,多协议标记交换)
技术,简化核心路由器的路由选择方式,利用结合传统路由技术的标记交换实现的IP虚拟专用网络(IP VPN)。这种基于标记的IP路由选择方
法,要求在整个交换网络中间所有的路由器都识别这个标签,运营商需要大笔投资建立全局的网络。而且跨越不同运营商 之间,如果没有协调好,
标签无法交换。
标记是一个能够被路由器识别理解的数据位,可以被用来代表逐跳式或者显式路由,并指明服务质量(QoS)、虚拟专网以及影响一种特定
类型的流量(或一个特 殊用户的流量)在网络上的传输方式等各类信息。MPLS可以提供每个IP数据包一个标记,将之与IP数据包封装于新的
MPLS数据包,由此决定IP 数据包 的传输路径以及优先顺序,而与MPLS兼容的路由器会在将IP数据包按相应路径转发之前仅读取该MPLS数
据包的包头标记,无须再去读取每个IP数据包中 的IP地址位等信息。
IP包在边界路由器分配一个标记。自此,MPLS设备就会自始至终查看这些标记信息,将这些有标记的包交换至其目的地。由于路由处理减
少,网络的等待时间 也就随之缩短,而可伸缩性却有所增加。MPLS数据包的服务质量类型可以由MPLS边界路由器根据IP包的各种参数来确
定,如IP的源地址、目的地址、端 口号、TOS值等参数。
以大家比较好理解的物流系统作比喻。MPLS是在包裹上面打上一个特定的标签,要求整个物流系统的搬运环节都能够理解这个标签的意义,
然后根据这个标签发 送这个包裹。即使这个物流系统再繁忙,这类包裹的传输质量能够得到保证。但是这是有前提条件的,要求所有的搬运环节
(搬运工)能够理解包裹的含义,例 如:1314信箱。并且能够理解加急、紧急等不同的字眼,不同的物流公司(对应不同的运营商),由于标
签不统一,直接互通就很困难。
对于到达同一目的地的IP包,可根据其TOS值的要求来建立不同的转发路径,以达到其对传输质量的要求。同时,通过对特殊路由的管理,
还能有效地解决网络中的负载均衡和拥塞问题。当网络中出现拥塞时,MPLS可实时建立新的转发路由来分散流量以缓解网络拥塞。
MPLS VPN的优点和缺点
MPLS VPN能够利用公用骨干网络强大的传输能力,为企业构建内部网络/Internet,同时能够满足用户对信息传输安全性、实时性、宽频
带和方便性的需要。目前,在基于IP的网络中,MPLS具有很多优点,也有明显的缺点。
1. 降低了成本
MPLS简化了ATM与IP的集成技术,使L2和L3技术有效地结合起来,降低了成本,保护了用户的前期投资。 与专线相比,降低了成本。
不过这种降低成本是相对的,由于电信运营商建设网络的成本很高,因此MPLS的运营成本也不低。
2. 提高了资源利用率,提高了网络速度
由于在网内使用标签交换,用户各个点的局域网可以使用重复的IP地址,提高了IP资源利用率。 由于使用标签交换,缩短了每一跳过程中
地址搜索的时间,减少了数据在网络传输中的时间,提高了网络速度。
3. 高可靠,业务综合能力强
采用MPLS作为通道机制实现透明报文传输,MPLS的LSP具有与帧中继和ATM VCC(Virtual Channel Connection,虚通道连接)类似
的高可靠性。网络能够提供数据、语音、视频相融合的能力。
4. MPLS具有QoS保证
用户可以根据自己不同的业务需求,通过在CE侧的配置,来赋予不同的QoS等级。通过这种QoS技术,保证了网络的服务质量。
相对于其优点,MPLS的缺点也是明显的:
1. 价格高
相对于使用IPsec通过Internet组网,MPLS的代价比较高。相当于一种准专线。
2. 接入比较麻烦
并不是所有的地方都能够提供接入。
3. 跨运营商不便
由于现在运营商之间还有很多协调工作没有完成。而且大家都知道,中国的电信巨头之间,向来以相互不合作出名。
从以上总结可以看出,MPLS适应比较高端的大型用户。
附B. 4 VPN基本原理之二(SSL VPN的基本原理分析)
从简单而言, SSL VPN一般的实现方式是在企业的防火墙后面放置一个SSL代理服务器。如果用户希望安全地连接到公司网络上,那么当用
户在浏览器上输入一个URL后,连接 将被SSL代理服务器取得,并验证该用户的身份,然后SSL代理服务器将提供一个远程用户与各种不同的
应用服务器之间连接。
几乎所有的主流商业浏览器都集成了SSL,实施SSL VPN不需要再安装额外的软件。绝大多数SSL VPN的生产厂商都通过“signed
plugins”提供其他的功能,“signed plugins”可以跟随浏览器自动传输给客户端。
SSL实现了客户端0安装,0配置。因此其功能和应用也受到限制。它适合PC-Web Server模式,就是大量的移动用户通过浏览器访问Web
服务器,有的SSL VPN还对ftp、telnet等进行了扩充,增强了其可用性,即便如此,充其量是实现了PC-to-Lan的功能。适用于数据库-应用
服务器-Web 服 务器-浏览器这一种模式。在保护范围、认证方式、应用程序类型上限制很多。而IPsec VPN则提供第三层IP的可达性,可以
保证任何基于tcp/ip的程序运行。
如果就网络联通而言,即使不使用SSL VPN,企业也能够实现Web应用,大不了我直接把服务器放置在Internet上,其他用户明文直接访
问好了。有了一个SSL VPN设备,相当于在服务器之前作了一个代理,客户端要和服务器连接,就要通过这个代理的认证,而且从客户端到SSL
VPN之间,数据是加密的。这样,internet上的黑客无法通过抓取数据包分析通讯信息。并且SSL VPN一般能够支持虚拟主机应用,这样,一
个IP地址可以访问N个服务器。
SSL优点和缺点都很明显。
优点:
(1)方便,实施SSL VPN只需要安装配置好中心网关即可。其余的客户端是免安装的,因此,实施工期很短,如果网络条件具备,连安装
带调试,1-2天即可投入运营。
(2)容易维护,SSL VPN维护起来也简单。出现问题,就维护网关就可以了。实在不行,换一台,如果有双机备份的话,备份机器启动就
可以了。
(3)安全,SSL 是一个安全协议,数据是全程加密传输的。另外,由于SSL网关隔离了内部服务器和客户端,只留下一个Web浏览接口,
客户端的大多数病毒木马感染不到内部 服务器。而IPsec VPN就不一样,实现的是IP级别的访问,远程网络和本地网络几乎没有区别。局域网
能够传播的病毒,通过VPN一样能够传播。
当然,SSL VPN的缺点也是很明显的:
(1)应用受限。一般都用于B/S模式。其他应用程序,象ftp/telnet等等有的SSL VPN能够支持。一般的C/S程序是不能直接应用的,因
此SSL VPN市场始终没有火暴起来。这个缺点是致命的,所以现在很多SSL VPN也试图把IPsec 融入进去,通过客户端安装一个软件,虚拟一
个VPN 的IP地址,实现PC-TO-Lan的IP级的连接。华盾公司(www.huadun.com.cn)也提供这样的产品,和美国array合作的。
(2) 只能实现星形的PC-SSL-SERVERs的应用模式。星形、树型结构都不能支持。
(3)价格比较高。目前比较知名的高端SSL VPN,价格都在几十万以上。价格很低的国产VPN,在很多性能和应用可靠性上面,距离还比
较大。
(4)安全认证方式很单一,都是使用证书方式,而且一般是单向认证。支持其它认证方式往往要进行长时间的二次开发。IPSec VPN认证方
式更为灵活(口令、RADIUS、令牌等)。
(5)SSL VPN只能进行认证和加密,不能实施访问控制,建立隧道后,管理员对用户不能进行任何的限制。而集成防火墙的VPN则可以根
据用户的身份和角色,在其访问内部资源(主机、数据库)进行访问控制和安全审计,这也是用户最为关心的一点。
为了克服以上的毛病,SSL开发商也作了很多工作,力图向IPSEC融合。兼容支持,而IPsec厂家也在后续的产品中间,陆续增加SSL的支
持。我在公司下一代Ipsec产品规划的时候,已经把SSL的支持列入研究计划。
如果希望能够运行各种应用程序,并且建立LAN-to-Lan的VPN,IPsec还是主流的解决方案。我所在的华盾公司
(www.huadun.com.cn),同时有SSL和IPsec产品线,结果大型用户无一例外全部使用IPSEC产品。SSL的销售额,目前为止还不能养活
配套的销售和工程师。
附B.5 全面认识VPN(一)
在国外,VPN已经迅速发展起来,2001年全球VPN市场将达到120亿美元。在中国,虽然人们对VPN的定义还有些模糊不清,对VPN的
安全性、服务质量(QoS)等方面存有疑虑,但互联网和电子商务的快速发展使我们有理由相信,中国的VPN市场将逐渐热起来。
对国内的用户来说,VPN(虚拟专用网,Virtual Private Network)最大的吸引力在哪里?是价格。据估算,如果企业放弃租用专线而采用
VPN,其整个网络的成本可节约21%-45%,至于那些以电话拨号方 式连网存取数据的公司,采用VPN则可以节约通讯成本50%-80%。
为什么VPN可以节约这么多的成本?这就先要从VPN的概念谈起。
认识VPN
现在有很多连接都被称作VPN,用户经常分不清楚,那么一般所说的VPN到底是什么呢?顾名思义,虚拟专用网不是真的专用网络,但却
能够实现专用网络的功 能。虚拟专用网指的是依靠ISP(Internet服务提供商)和其它NSP(网络服务提供商),在公用网络中建立专用的数据
通信网络的技术。在虚拟专用 网中,任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是利用某种公众网的资源动态组成的。
IETF草案理解基于IP的VPN为:"使用 IP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术。
所谓虚拟,是指用户不再需要拥有实际的长途数据线路, 而是使用Internet公众数据网络的长途数据线路。所谓专用网络,是指用户可以为自己
制定一个最符合自己需求的网络。
用户现在在电信部门租用的帧中继(Frame Relay)与ATM等数据网络提供固定虚拟线路(PVC-Permanent Virtual Circuit)来连接需要
通讯的单位,所有的权限掌握在别人的手中。如果用户需要一些别的服务,需要填写许多的单据,再等上相当一段时间,才能享受到新 的服务。
更为重要的是两端的终端设备不但价格昂贵,而且管理也需要一定的专业技术人员,无疑增加了成本,而且帧中继、ATM数据网络也不会像
Internet那样,可立即与世界上任何一个使用Internet网络的单位连接。而在Internet上,VPN使用者可以控制自己与其他使用者的联 系,同
时支持拨号的用户。
所以我们说的虚拟专用网一般指的是建筑在Internet上能够自我管理的专用网络,而不是Frame Relay或ATM等提供虚拟固定线路
(PVC)服务的网络。以IP为主要通讯协议的VPN,也可称之为IP-VPN。
由于VPN是在Internet上临时建立的安全专用虚拟网络,用户就节省了租用专线的费用,在运行的资金支出上,除了购买VPN设备,企业
所付出的仅仅是向企业所在地的ISP支付一定的上网费用,也节省了长途电话费。这就是VPN价格低廉的原因。
越来越多的用户认识到,随着Internet和电子商务的蓬勃发展,经济全球化的最佳途径是发展基于Internet的商务应用。随着商务活动的日
益频 繁,各企业开始允许其生意伙伴、供应商也能够访问本企业的局域网,从而大大简化信息交流的途径,增加信息交换速度。这些合作和联系
是动态的,并依靠网络来 维持和加强,于是各企业发现,这样的信息交流不但带来了网络的复杂性,还带来了管理和安全性的问题,因为
Internet是一个全球性和开放性的、基于 TCP/IP 技术的、不可管理的国际互联网络,因此,基于Internet的商务活动就面临非善意的信息威胁
和安全隐患。
还有一类用户,随着自身的的发展壮大与跨国化,企业的分支机构不仅越来越多,而且相互间的网络基础设施互不兼容也更为普遍。因此,
用户的信息技术部门在连接分支机构方面也感到日益棘手。
用户的需求正是虚拟专用网技术诞生的直接原因。
用户需要的VPN
一.VPN的特点
在实际应用中,用户需要的是什么样的VPN呢?一般情况下,一个高效、成功的VPN应具备以下几个特点:
1.安全保障
虽然实现VPN的技术和方式很多,但所有的VPN均应保证通过公用网络平台传输数据的专用性和安全性。在非面向连接的公用IP网络
上建立一个逻辑的、点对 点的连接,称之为建立一个隧道,可以利用加密技术对经过隧道传输的数据进行加密,以保证数据仅被指定的发送者和
接收者了解,从而保证了数据的私有性和安全 性。在安全性方面,由于VPN直接构建在公用网上,实现简单、方便、灵活,但同时其安全问题
也更为突出。企业必须确保其VPN上传送的数据不被攻击者窥视 和篡改,并且要防止非法用户对网络资源或私有信息的访问。ExtranetVPN将
企业网扩展到合作伙伴和客户,对安全性提出了更高的要求。
2.服务质量保证(QoS)
VPN网应当为企业数据提供不同等级的服务质量保证。不同的用户和业务对服务质量保证的要求差别较大。如移动办公用户,提供广泛
的连接和覆盖性是保证 VPN服务的一个主要因素;而对于拥有众多分支机构的专线VPN网络,交互式的内部企业网应用则要求网络能提供良好
的稳定性;对于其它应用(如视频等)则 对网络提出了更明确的要求,如网络时延及误码率等。所有以上网络应用均要求网络根据需要提供不同
等级的服务质量。在网络优化方面,构建VPN的另一重要需 求是充分有效地利用有限的广域网资源,为重要数据提供可靠的带宽。广域网流量
的不确定性使其带宽的利用率很低,在流量高峰时引起网络阻塞,产生网络瓶颈, 使实时性要求高的数据得不到及时发送;而在流量低谷时又造
成大量的网络带宽空闲。QoS通过流量预测与流量控制策略,可以按照优先级分配带宽资源,实现带 宽管理,使得各类数据能够被合理地先后
发送,并预防阻塞的发生。
3.可扩充性和灵活性
VPN必须能够支持通过Intranet和Extranet的任何类型的数据流,方便增加新的节点,支持多种类型的传输媒介,可以满足同时传输语
音、图像和数据等新应用对高质量传输以及带宽增加的需求。
4.可管理性
从用户角度和运营商角度应可方便地进行管理、维护。在VPN管理方面,VPN要求企业将其网络管理功能从局域网无缝地延伸到公用网,
甚至是客户和合作伙 伴。虽然可以将一些次要的网络管理任务交给服务提供商去完成,企业自己仍需要完成许多网络管理任务。所以,一个完善
的VPN管理系统是必不可少的。VPN 管理的目标为:减小网络风险、具有高扩展性、经济性、高可靠性等优点。事实上,VPN管理主要包括安
全管理、设备管理、配置管理、访问控制列表管理、 QoS管理等内容。
二.自建还是外包
由于VPN低廉的使用成本和良好的安全性,许多大型企业及其分布在各地的办事处或分支机构成了VPN顺理成章的用户群。对于那些最
需要VPN业务的中小企 业来说,一样有适合的VPN策略。当然,不论何种VPN策略,它们都有一个基本目标:在提供与现有专用网络基础设
施相当或更高的可管理性、可扩展性以及简 单性的基础之上,进一步扩展公司的网络连接。
1.大型企业自建VPN
大型企业用户由于有雄厚的资金投入做保证,可以自己建立VPN,将VPN设备安装在其总部和分支机构中,将各个机构低成本且安全地连接在
一起。企业建立自 己的VPN,最大的优势在于高控制性,尤其是基于安全基础之上的控制。一个内部VPN能使企业对所有的安全认证、网络系
统以及网络访问情况进行控制,建立 端到端的安全结构,集成和协调现有的内部安全技术。
企业还可以确保得到业内最好的技术以满足自身的特殊需要,这要优于ISP所提供的普通服务。而且,建立内部VPN能使企业有效节省VPN的
运作费用。企业可以节省用于外包管理设备的额外费用,并且能将现有的远程访问和端到端的网络集成起来,以获取最佳性价比的VPN。
虽然VPN外包能避免技术过时,但并不意味着企业可以节省开支。因为,企业最终还要为高额产品支付费用,以作为使用新技术的代价。虽然
VPN外包可以简化 企业网络部署,但这同样降低了企业对公司网的控制等级。网络越大,企业就越依赖于外包VPN供应商。因此,自建VPN
是大型企业的最好选择。
2.中小型企业外包VPN
虽然每个中小型企业都是相对集中和固定的,但是部门与部门之间、企业与其业务相关企业之间的联系依然需要廉价而安全的信息沟通,在
这种情况下就用得上 VPN。电信企业、IDC目前提供的VPN服务,更多的是面向中小企业,因为可以整合现有资源,包括网络优势、托管和技
术力量来为中小企业提供整体的服 务。中小型企业如果自己购买VPN设备,则财务成本较高,而且一般中小型企业的IT人员短缺、技能水平不
足、资金能力有限,不足以支持VPN,所以,外包 VPN是较好的选择。
* 外包VPN比企业自己动手建立VPN要快得多,也更为容易。
* 外包VPN的可扩展性很强,易于企业管理。有统计表明,使用外包VPN方式的企业,可以支持多于2300名用户,而内部VPN平均只能
支持大约150名用户。而且,随着用户数目的增长,对用于监控、管理、提供IT资源和人力资源的要求也将呈指数增长。
* 企业VPN必须将安全和性能结合在一起,然而,实际情况中两者不能兼顾。例如,对安全加密级别的配置经常降低VPN的整体性能。而
通过提供VPN外包业务的专业ISP的统一管理,可大大提高VPN的性能和安全。ISP的VPN专家还可帮助企业进行VPN决策。
* 对服务水平协议(SLA)的改进和服务质量(QoS)保证,为企业外包VPN方式提供了进一步的保证。
三.VPN安全技术
由于传输的是私有信息,VPN用户对数据的安全性都比较关心。
目前VPN主要采用四项技术来保证安全,这四项技术分别是隧道技术(Tunneling)、加解密技术(Encryption & Decryption)、密钥
管理技术(Key Management)、使用者与设备身份认证技术(Authentication)。
1.隧道技术是VPN的基本技术,类似于点对点连接技术,它在公用网建立一条数据通道(隧道),让数据包通过这条隧道传输。隧道是由
隧道协议形成的,分为 第二、三层隧道协议。第二层隧道协议是先把各种网络协议封装到PPP中,再把整个数据包装入隧道协议中。这种双层
封装方法形成的数据包靠第二层协议进行传 输。第二层隧道协议有L2F、PPTP、L2TP等。L2TP协议是目前IETF的标准,由IETF融合PPTP与
L2F而形成。
第三层隧道协议是把各种网络协议直接装入隧道协议中,形成的数据包依靠第三层协议进行传输。第三层隧道协议有VTP、IPSec等。IPSec(IP
Security)是由一组RFC文档组成,定义了一个系统来提供安全协议选择、安全算法,确定服务所使用密钥等服务,从而在IP层提供安全保障。
2.加解密技术是数据通信中一项较成熟的技术,VPN可直接利用现有技术。
3.密钥管理技术的主要任务是如何在公用数据网上安全地传递密钥而不被窃取。现行密钥管理技术又分为SKIP与ISAKMP/OAKLEY两种。
SKIP 主要是利用Diffie-Hellman的演算法则,在网络上传输密钥;在ISAKMP中,双方都有两把密钥,分别用于公用、私用。
4.身份认证技术最常用的是使用者名称与密码或卡片式认证等方式。
四.堵住安全漏洞
安全问题是VPN的核心问题。目前,VPN的安全保证主要是通过防火墙技术、路由器配以隧道技术、加密协议和安全密钥来实现的,可以
保证企业员工安全地访问公司网络。
但是,如果一个企业的VPN需要扩展到远程访问时,就要注意,这些对公司网直接或始终在线的连接将会是黑客攻击的主要目标。因为,
远程工作员工通过防火墙 之外的个人计算机可以接触到公司预算、战略计划以及工程项目等核心内容,这就构成了公司安全防御系统中的弱点。
虽然,员工可以双倍地提高工作效率,并减少 在交通上所花费的时间,但同时也为黑客、竞争对手以及商业间谍提供了无数进入公司网络核心的
机会。
但是,企业并没有对远距离工作的安全性予以足够的重视。大多数公司认为,公司网络处于一道网络防火墙之后是安全的,员工可以拨号进
入系统,而防火墙会将一 切非法请求拒之其外;还有一些网络管理员认为,为网络建立防火墙并为员工提供VPN,使他们可以通过一个加密的
隧道拨号进入公司网络就是安全的。这些看法 都是不对的。
在家办公是不错,但从安全的观点来看,它是一种极大的威胁,因为,公司使用的大多数安全软件并没有为家用计算机提供保护。一些员工
所做的仅仅是进入一台家 用计算机,跟随它通过一条授权的连接进入公司网络系统。虽然,公司的防火墙可以将侵入者隔离在外,并保证主要办
公室和家庭办公室之间VPN的信息安全。但 问题在于,侵入者可以通过一个被信任的用户进入网络。因此,加密的隧道是安全的,连接也是正
确的,但这并不意味着家庭计算机是安全的。
黑客为了侵入员工的家用计算机,需要探测IP地址。有统计表明,使用拨号连接的IP地址几乎每天都受到黑客的扫描。因此,如果在家办
公人员具有一条诸如 DSL的不间断连接链路(通常这种连接具有一个固定的IP地址),会使黑客的入侵更为容易。因为,拨号连接在每次接入
时都被分配不同的IP地址,虽然它也 能被侵入,但相对要困难一些。一旦黑客侵入了家庭计算机,他便能够远程运行员工的VPN客户端软件。
因此,必须有相应的解决方案堵住远程访问VPN的安全 漏洞,使员工与网络的连接既能充分体现VPN的优点,又不会成为安全的威胁。在个人
计算机上安装个人防火墙是极为有效的解决方法,它可以使非法侵入者不能 进入公司网络。当然,还有一些提供给远程工作人员的实际解决方法:
* 所有远程工作人员必须被批准使用VPN;
* 所有远程工作人员需要有个人防火墙,它不仅防止计算机被侵入,还能记录连接被扫描了多少次;
* 所有的远程工作人员应具有入侵检测系统,提供对黑客攻击信息的记录;
* 监控安装在远端系统中的软件,并将其限制只能在工作中使用;
* IT人员需要对这些系统进行与办公室系统同样的定期性预定检查;
* 外出工作人员应对敏感文件进行加密;
* 安装要求输入密码的访问控制程序,如果输入密码错误,则通过Modem向系统管理员发出警报;
* 当选择DSL供应商时,应选择能够提供安全防护功能的供应商。
附B.6 全面认识VPN(二)
寻求适合的VPN方案
VPN有三种解决方案,用户可以根据自己的情况进行选择。这三种解决方案分别是:远程访问虚拟网(AccessVPN)、企业内部虚拟网
(IntranetVPN)和企业扩展虚拟网(ExtranetVPN),这三种类型的VPN分别与传统的远程访问网络、企业内部的Intranet 以及 企业网和相
关合作伙伴的企业网所构成的Extranet相对应。
1.如果企业的内部人员移动或有远程办
发表评论
-
linux下vncserver配置与win下vnc客户端
2010-02-24 13:31 9133--begin vnc 远程桌面 --注意:从服务端启动信息得 ... -
Ubuntu ADSL 配置
2009-12-01 14:11 1216配置 ADSL sudo pppoeconf ADSL ... -
OpenSSH高级教程
2009-12-01 14:00 1575关于 OpenSSH OpenSSH是安全Shell协议 ... -
Ubuntu 常识
2009-11-26 13:50 16451,ubuntu 中启用Root 账号 如果需要激活 Ubu ... -
BFS 简介,Linux 桌面的极速未来?
2009-09-17 08:55 1126from:http://www.iteye.com/new ... -
微软推开源Linux代码(Linux之父回应)
2009-07-31 10:42 1002前段时间,微软为Linux ... -
Chapter 5. 中文环境(for Debian)
2009-07-22 09:37 2344国际化(Internationalization,简写为I18 ... -
Chapter 4. 软件包管理工具APT(for Debian)
2009-07-22 09:28 1473APT from : http://www.ringkee. ... -
bash(详解)
2009-05-19 17:09 2424最简单的例子 —— Hello World! 几乎所有的讲解编 ... -
bash编程
2009-05-19 17:07 965Shell Script(bash)简介 众所皆知地,U ... -
Linux用户管理
2009-03-15 10:28 1761一、用户帐号的管理 1.用户帐号的分类 超级用户(UID=0) ... -
jdk tomcat 安装(for linux)
2008-12-27 13:15 4072+++++++++++++++++++++++++++++++ ...
相关推荐
基于openvpn的web管理系统,前后端分离设计。
softether-vpnserver-linux
openvpn的几种组网方式
SoftEther V-HUB的默认侦听...如果你的系统已经被占用,或者你有其他原因不想使用这两个默认端口,特别是 Apache之类的Web Server已经使用了443端口作HTTPS用的情况下,SoftEther会显示如下的信息表示侦听443端口失败
和官网下载的不同,也是通过厂商其他渠道获得。官网提供的下载至少目前,2024年9...这个版本下载后,如果运行没反应,可在命令行运行,如果报错libgconf的话,可以通过apt install libgconf-2-4安装,安装完成后即可。
openvpn 2.5.10版本,通过三板斧即可安装,证书生成需要的easy-rsa3.1.5版本也在压缩包里面。
移植过程中,不仅要确保U-Boot能够在ARM9处理器上正确执行,还要实现YAFFS2文件系统映像的烧写功能,这是为了能够在NAND Flash上构建Linux系统环境。 ##### 3. Linux内核移植与根文件系统构建 移植Linux内核至ARM9...
在安装MySQL的过程中,还需要将mysql.server脚本拷贝到init.d目录中,并设置为系统服务,以便能够通过系统的服务命令来控制MySQL服务的启动和关闭。安装过程中可能还需要修改/etc/profile文件,将MySQL的路径加入到...
"嵌入式Linux在ARM9(TQ)上的移植" 本文主要讲述了在ARM9(TQ)平台上移植嵌入式Linux的整个过程。首先,文章介绍了Linux操作系统的结构,包括内核、shell、文件系统和应用程序四个部分。然后,文章详细介绍了Linux...
在IT行业中,我们经常遇到各种操作系统与软件的兼容性问题,特别是在使用第三方应用程序时。...同时,这也提示我们在安装第三方软件时,可能需要密切关注系统兼容性和依赖库的问题,尤其是使用非主流操作系统的场合。
如果您的CentOS系统在安装时未取消"Base"选项,则krb5的相关包会默认安装。如果没有安装samba,可以通过以下命令进行安装: ```bash [root@filesrv CentOS]# rpm -ivh xinetd-2.3.14-10.el5.i386.rpm [root@filesrv...
openvpn 服务端需要的文件,通过helm 3 部署
这个是服务端 功能:可以搭建各种网络代理(电脑端和手机端都能使用);把多个局域网连接成一个大局域网;其他各种强大的网络搭建都能做 截止到发贴日(2024-5-13),最新的版本是该版本 v4.43-9799 ...
5. **Linux**:作为标签之一,Linux操作系统在IT领域中扮演着重要角色,特别是在服务器领域。它的开源特性使其成为网络系统管理的理想选择,提供强大的网络服务支持和灵活的自动化脚本能力。管理员可以利用Linux进行...
Linux交叉编译器是开发嵌入式系统时不可或缺的工具,尤其在为资源有限的硬件平台(如ARM架构的设备)构建软件时。交叉编译器3.4.5版本是一个专为此目的设计的编译工具链,允许开发者在一台性能更强的宿主机上编译...
softether客户端linux版本的,你可以试试
网上收集来的,别问干什么用,我什么都不知道,给OPENWRT的GUI界面添加什么功能,配置某些功能方便点而已
linux企业实战运维入门到高级系列 ubuntu Centos ...自动化运维 安装kickstart文件(半自动化) ANSIBLE部署 企业级OpenVPN 安装OpenVPN 该笔记由刘森飚整理,版权归原作者所有 仅用于学习交流分享,如有争议请联系下架
- Windows:在Windows系统中,网络配置通常通过“网络和共享中心”进行,包括IP地址、子网掩码、默认网关等参数的设置。Windows通常自动获取这些信息,或通过静态配置指定。 - Linux:在Linux环境下,网络配置通常...
在C/S模型中,Server需要认证Client的证书,而每一个Client持有独一无二的证书(比如一个设备的MAC地址),此时需要的证书是一个CA,一个Server证书和大量的Client的证书,如果一个一个的生成,效率速度都非常的慢,...