这一节介绍该解决方案的核心组件之一:Open×××。
Open***的技术核心是虚拟网卡,其次是SSL协议实现。Open×××使用OpenSSL库来加密数据与控制信息。Open×××与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。Open×××还具有许多优秀的功能,例如数据压缩,良好的兼容性,服务端能够推送一些网络信息至客户端。
有关Open×××安装和基础配置的文档,在51CTO的网络安全->×××专区里面有许多专家文档。在此不浪费篇幅。本文着重描述一些不太常见的特别之处。
首先看一下我们对Open×××的功能需求列表:
连接需要加密。这个是Open×××与生俱来的特性。
同一个用户可能从多个PC端同时保持连接。现在的SA两台或以上工作机的比比皆是了。
IP分配。使用动态地址池,确保内部IP地址资源有效利用。地主家也可能没有余粮啊!
用户认证方面,需要使用RSA令牌系统。这里我们使用pam+radius来连接RSA令牌系统。RSA令牌是安全系数比较高的系统
同时连接用户数量最大为128。
这个功能需求仅仅是一个案例,读者可以将之调整为你需要的任意内容。
Open×××服务端配置基本步骤如下:
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/open***,open***和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 open***-status.log verb 3 log/var/log/open***.log log-append /var/log/open***.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/open***/connect client-disconnect /etc/open***/disconnect socket-flags TCP_NODELAY push "socket-flags TCP_NODELAY" plugin /usr/lib64/open***/plugin/lib/open***-auth-pam.so open*** username-as-common-name |
对于这个配置文件需要特别说明如下:
server xxx.xxx.0.0 255.255.0.0
如果不考虑本文的既定需求,IP地址分配实际上也可以使用CCD配置来分配固定IP。但是对于用户数量较多的情况下,配置会比较麻烦,同时IP地址的使用也会比较浪费。
reneg-sec 0 : 禁止open***证书自动过期,以便用户保持连接。
duplicate-cn : 允许一个用户从多个PC端同时保持连接。
client-connect/client-disconnect : 用户连接之后和断开连接之后的动作。
socket-flags TCP_NODELAY
push"socket-flags TCP_NODELAY" : 这个配置项是需要同时应用在服务端和客户端的。在使用TCP模式时,这个选项能够有效降低网络延时。详细原因可以参见有关Nagle算法的说明。简单说来:网络吞吐量和网络传输实时性是互相矛盾的,利用Nagle算法会将小的数据包缓存合并成为大的数据包,提高吞吐量,但是会增加网络延时。Open×××默认是启用这一算法的。TCP_NODELAY选项关闭这一算法,数据包不管多小都不再合并,直接发出,从而降低网络延时。
plugin/usr/lib64/open***/plugin/lib/open***-auth-pam.so open*** 使用pam验证用户,通过pam将radius系统结合起来。
username-as-common-name这个选项对open***系统本身是没有特别作用的,在此先卖个关子,我会在后面的章节介绍为什么要使用这个选项。
/etc/pam.d/open*** 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.o*** : 客户端配置文件
ca.crt/ca.key : ROOT CA
client.crt/client.key : 客户端证书和密钥
xxx.o*** client dev tun route-metric 0 proto tcp remote <IP Of The Open××× 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 |
总结:Open×××的配置本身相对还是比较简单,网络上面的文档也很容易找到。不过本节也提出了一些特有的内容:
使用radius作为中间协议来进行open***的RSA认证。在网络设备中也经常会使用radius作为网络设备RSA认证的中间桥梁。
Open×××在使用TCP模式时,需要使用TCP_NODELAY来提高网络延时。对于网络吞吐能力优先的应用不能够使用TCP_NODELAY,例如SAMBA;而对于并发性能优先的应用应该启用TCP_NODELAY,例如Nginx。
设置reneg-sec 0 避免用户在操作的过程中由于证书超时而中断,如果没有设置这个参数,open***连接会每个小时自动断开连接。
设置duplicate-cn 允许用户从多个终端同时保持连接。
转载于:https://blog.51cto.com/wuliyasutai/1348521