CentOS6.5 Linux基于AD域账号联动认证的OpenVPN服务器配置详细步
前言:
最近一直在研究Linux下基于AD联动认证服务器的配置(包括FTP服务器、OPENVPN服务器、邮件服务器等),一方面降低公司成本,二方面提高信息化管理实现单点登录方便用户管理。下面就详细说一下OpenVPN服务器的配置,可能您的环境可能和我的不一样的,所有我不能保证你配置以后能够正常使用,具体的根据自己的环境而言,有需要帮助的可以留言。
一、OpenVPN简介
OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许创建的VPN使用公开密钥、数字证书、或者用户名/密码来进行身份验证。
它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista/7/8/8.1以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。
二、原理
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。
在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发提交去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
三、加密
OpenVPN使用OpenSSL库来加密数据与控制信息。这意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。
四、身份验证
OpenVPN提供了多种身份验证方式,用以确认连接双方的身份,包括:
预享私钥 第三方证书 用户名/密码组合 预享密钥最为简单,但同时它只能用于创建点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外维护一个PKI证书系统。OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍需要一份服务器证书用作加密。
五、功能与端口
OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时也支持TCP。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。
服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。
OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以创建三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。
六、安全
OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。
OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。
七、对比
OpenVPN,能实现二/三层的基于隧道的VPN。
stunnel,使用SSL向任何单一端口的TCP服务提供安全保护。
八、OpenVPN实现LDAP认证方法
网上关于OpenVPN服务器部署的部署太多了,但都是相对来说比较旧或比较简单的一些方法,如果您需要实现与公司AD域服务器进行联动认证,那您可能需要继续往下看。OpenVPN实现LDAP认证的方法很多,用户可以根据自己的需求来选择,下面我们简单说一下:
1:OpenVPN-pam-ldap
通过pam的ldap验证,来实现,openvpn是支持pam的验证的。通过pam,您可以实现mysql或者ldap的验证,这个pam验证,我们在Vsftpd的部署的时候可以采用这种方法实现,实现方法简单可靠。
2:OpenVPN-Radius-ldap
通过Radius,也是可以实现ldap的验证,不过您需要在部署Radius服务器,通过它可以实现mysql或者ldap的验证。
3:OpenVPN-auth-ldap
这应该是最简单的方式,直接通过一个插件就实现OpenVPN 采用ldap验证,在第一次配置的时候您可能需要用心去研究一下。
九、本次实验网络拓扑
十、测试需求
VPN Client通过AD域服务器进行账号密码认证,认证通过后,可以访问公司内部网络。
说明:
网上有很多关系OpenVPN的配置文档,基本上都是您抄我,我抄您的,真正能够说明原因与解决问题的太少了。而且关于基于AD域账号认证的文章基础上面没有什么,下面我就基于AD认证的OpenVPN服务器的安装与配置做一个详细的说明。
十一、详细配置1、常规设置
① 设置OpenVPN服务器的静态IP如上图所示,也可以根据自己的需求进行设置。
② 设置OpenVPN服务器的主机名。
③ 更新OpenVPN服务器系统的需要补丁与配置。
④ 启动防火墙配置。
2、OpenVPN服务器的安装与配置1)OpenVPN服务器的安装
Yum install openvpn openvpn-auth-ldap -y //安装OpenVPN与LDAP认证插件
Yum install easy-rsa -y //安装RSA证书管理工具
2)设置OpenVPN Server与easy-rsa
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
clean-all 脚本, 是创建生成ca证书及密钥文件所需要的文件及目录
build-ca 脚本, 生成ca证书(交互)
build-dh 脚本, 生成Diffie-Hellman文件(交互)
build-key-server 脚本, 生成服务器端密钥(交互)
build-key 脚本, 生成客户端密钥(交互)
pkitool 脚本, 直接使用vars的环境变量设置, 直接生成证书(非交互)
Cd /etc/openvpn //进入到OpenVPN配置目录
Cp -ra /usr/share/easy-rsa/2.0/ /etc/openvpn //复制样式证书管理工具到OpenVPN目录
Mv 2.0 easy-rsa //重命名文件夹名称
3)创建当前OpenSSL的符号链接
Cd /etc/openvpn/easy-rsa //进入Easy-rsa目录
Ln -s openssl-1.0.0.cnf openssl.cnf //设置符号链接
4)设置Vars证书变量配置文件
<<< OUTPUT OMMITTED >>>
# Increase this to 2048 if you
# are paranoid. This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
exportKEY_SIZE=2048 //设置加密长度
# In how many days should the root CA key expire?
exportCA_EXPIRE=3650 //设置CA有效期
# In how many days should certificates expire?
exportKEY_EXPIRE=3650 //设置Key有效期
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
exportKEY_COUNTRY="CN" //设置国家名称
exportKEY_PROVINCE="GD" //设置省份名称
exportKEY_CITY="SZ" //设置城市名称
exportKEY_CN=Test //设置名称
exportKEY_NAME=Test
portKEY_OU=Test //设置组织名称
portPKCS11_MODULE_PATH=Test
exportPKCS11_PIN=1234