OpenVPN 2.0与更高版本允许OpenVPN服务器从客户端安全地获取用户名和密码,并将该信息用作认证基础。
方法1:通过本地证书密钥认证。
默认不配置,openvpn即使用证书进行身份认证。
(1)编辑主服务器配置文件/etc/openldap/slapd.conf,取消如下行的注释:
方法2:本地文件认证
在使用身份验证时,需要将 auth-user-pass
指令添加到客户端配置文件中,设置后OpenVPN客户端向用户索要用户名/密码,并将其通过安全的TLS通道传递给服务器进行验证。
服务端配置文件需要增加配置指令 auth-user-pass-verify auth-pam.pl via-file
使用脚本插件。auth-pam.pl
在源码包 sample/sample-script
路径下。
|
|
生产环境下官方推荐使用 openvpn-auth-pam
插件进行验证,相比于 auth-pam.pl,openvpn-auth-pam
插件具有多个优点:
openvpn-auth-pam
使用拆分权限执行模型来提高安全性。- C编译的插件比脚本运行速度更快。
- OpenVPN可以通过虚拟内存(而不是通过文件或环境)将用户名/密码传递给插件,这对于服务器上的本地安全性更好。
获取openvpn-auth-pam插件
openvpn-auth-pam插件在openvpn代码目录src/plugins/auth-pam
下,运行 make && make install
进行安装,会自动复制到openvpn安装好的 lib/openvpn/plugins
目录下。
开启密码认证
默认情况下, 在服务器上使用 auth-user-pass-verify
或用户名/密码 插件 将启用双重身份验证,要求客户端证书和用户名/密码身份验证都必须成功,才能对客户端进行身份验证。可以选择关闭客户端证书认证。
|
|
开启后需要在客户端注释 cert 和 key的配置
方法3:数据库认证
法2:利用的脚本程序(shell,php等)本地文件去读数据库。
法1:用pam_mysql
方法:4:ldap统一用户认证
- openvpn-auth-ldap
- 利用第一个文件认证的思路,去LDAP查询,还可以和本地文件比较。如
配置openvpn服务端通过ldap进行身份验证
配置OpenVPN基 LDAP的身份验证,需要安装用于LDAP身份验证的OpenVPN插件。openvpn-auth-ldap
,它通过LDAP为OpenVPN实现身份认证。
CentOS中 openvpn-auth-ldap
插件在EPEL中 ubuntu与Centos都可以通过对应的包管理工具进行插件安装。
安装完成后配置 OpenVPN LDAP身份验证 examples/auth-ldap.conf
|
|
还可以基于组管理
|
|
修改openvpn配置
|
|
完整的服务端配置
|
|
启动客户端配置
|
|
完整的客户端配置
|
|
服务端报错 TLS Error: reading acknowledgement record from packet
|
|
原因,客户端开启了安全配置tls-auth ta.key 1
而 服务端没有对应配置
方法5:配置配置RADIUS认证。
RADIUS (Remote Authentication Dial In User Service),远程用户拨号认证系统由RFC2865,RFC2866定义,是目前应用最广泛的AAA协议。可实现验证、授权、记账等服务的协议。