IT技术互动交流平台

安全网关之二:OpenVPN

作者:xudatie  发布日期:2014-01-13 10:00:25
这一节介绍该解决方案的核心组件之一:OpenVPN。
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现。OpenVPN使用OpenSSL库来加密数据与控制信息。OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。OpenVPN还具有许多优秀的功能,例如数据压缩,良好的兼容性,服务端能够推送一些网络信息至客户端。
有关OpenVPN安装和基础配置的文档,在51CTO的网络安全->VPN专区里面有许多专家文档。在此不浪费篇幅。本文着重描述一些不太常见的特别之处。
首先看一下我们对OpenVPN的功能需求列表:
连接需要加密。这个是OpenVPN与生俱来的特性。
同一个用户可能从多个PC端同时保持连接。现在的SA两台或以上工作机的比比皆是了。
IP分配。使用动态地址池,确保内部IP地址资源有效利用。地主家也可能没有余粮啊!
用户认证方面,需要使用RSA令牌系统。这里我们使用pam+radius来连接RSA令牌系统。RSA令牌是安全系数比较高的系统
同时连接用户数量最大为128。
这个功能需求仅仅是一个案例,读者可以将之调整为你需要的任意内容。
OpenVPN服务端配置基本步骤如下:
clean-all。清除所有现有的证书文件。
build-ca。生成ROOT CA。
build-key-server。生成服务端证书和密钥。
build-dh。生成Diffie-Hellman文件。
build-key。生成客户端证书和密钥。这组文件需要发放给客户端。如果一个用户有多个终端,并且需要同时登录,那么也需要多组客户端证书和密钥文件。如果server.conf包含client-cert-not-required配置时,服务器端将不会验证客户端证书和密钥,这时可以跳过这一步。
修改服务端相关配置文件。
拷贝客户端证书和密钥给用户。
1 服务端的核心文件如下:
server.conf,服务端配置文件。
/etc/pam.d/openvpn,openvpn和pam结合的配置文件。
/etc/pam_radius.conf,pam和radius结合的配置文件。
ca.crt/ca.key,ROOT CA。
server.crt/server.key,服务端证书和密钥。
client.crt/client.key,客户端证书和密钥,这组文件是客户端相关的,文件名不是固定的,在服务器端也可能会同时存在很多组。
dhxxx.pem,Diffie-Hellman文件。
其中.crt/.key/.pem文件都是之前步骤中程序自动生成的。
各个配置文件的主要内容如下:
server.conf
 
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
max-clients 128
persist-key
persist-tun
status openvpn-status.log
verb 3
log/var/log/openvpn.log
log-append /var/log/openvpn.log
server xxx.xxx.xxx.0 255.255.0.0
push "route xxx.xxx.0.0 255.255.0.0"
 
reneg-sec 0
duplicate-cn
client-connect    /etc/openvpn/connect
client-disconnect    /etc/openvpn/disconnect
socket-flags    TCP_NODELAY
push    "socket-flags TCP_NODELAY"
plugin    /usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so openvpn
 
username-as-common-name
 
对于这个配置文件需要特别说明如下:
server xxx.xxx.0.0 255.255.0.0
如果不考虑本文的既定需求,IP地址分配实际上也可以使用CCD配置来分配固定IP。但是对于用户数量较多的情况下,配置会比较麻烦,同时IP地址的使用也会比较浪费。
reneg-sec 0 : 禁止openvpn证书自动过期,以便用户保持连接。
duplicate-cn : 允许一个用户从多个PC端同时保持连接。
client-connect/client-disconnect : 用户连接之后和断开连接之后的动作。
socket-flags TCP_NODELAY
push"socket-flags TCP_NODELAY" : 这个配置项是需要同时应用在服务端和客户端的。在使用TCP模式时,这个选项能够有效降低网络延时。详细原因可以参见有关Nagle算法的说明。简单说来:网络吞吐量和网络传输实时性是互相矛盾的,利用Nagle算法会将小的数据包缓存合并成为大的数据包,提高吞吐量,但是会增加网络延时。OpenVPN默认是启用这一算法的。TCP_NODELAY选项关闭这一算法,数据包不管多小都不再合并,直接发出,从而降低网络延时。
plugin/usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so openvpn 使用pam验证用户,通过pam将radius系统结合起来。
username-as-common-name这个选项对openvpn系统本身是没有特别作用的,在此先卖个关子,我会在后面的章节介绍为什么要使用这个选项。
 
/etc/pam.d/openvpn
 
account required /lib64/security/pam_radius_auth.so
auth required /lib64/security/pam_radius_auth.so
 
/etc/pam_radius.conf
 
<IP Of The Radius Server>:1645<Auth String>3
 
2 客户端的核心文件如下:
xxx.ovpn : 客户端配置文件
ca.crt/ca.key : ROOT CA
client.crt/client.key : 客户端证书和密钥
 
xxx.ovpn
 
client
dev tun
route-metric 0
proto tcp
remote <IP Of The OpenVPN Server> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ../ca.crt
cert ../client.crt
key ../client.key
auth-user-pass
ns-cert-type server
comp-lzo
verb 3
mute 20
reneg-sec 0
 
总结:OpenVPN的配置本身相对还是比较简单,网络上面的文档也很容易找到。不过本节也提出了一些特有的内容:
使用radius作为中间协议来进行openvpn的RSA认证。在网络设备中也经常会使用radius作为网络设备RSA认证的中间桥梁。
OpenVPN在使用TCP模式时,需要使用TCP_NODELAY来提高网络延时。对于网络吞吐能力优先的应用不能够使用TCP_NODELAY,例如SAMBA;而对于并发性能优先的应用应该启用TCP_NODELAY,例如Nginx。
设置reneg-sec 0 避免用户在操作的过程中由于证书超时而中断,如果没有设置这个参数,openvpn连接会每个小时自动断开连接。
设置duplicate-cn 允许用户从多个终端同时保持连接。
Tag标签: 安全网关  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规