前面已经成功部署了OpenVPN的服务端。客户端和服务端采用的是基于TLS的双向认证,需要给每个客户端生成客户端私钥和证书。本篇将在OpenVPN服务端集成的OpenLDAP认证,这样能够使客户端用户在连接VPN时直接使用统一的OpenLDAP账号。部署的环境和版本信息如下:
- CentOS 7
- OpenVPN 2.4 - 团队环境:OpenVPN安装
- OpenLDAP 2.4 - OpenLDAP 2.4部署记录
安装openvpn-auth-ldap
使用yum安装:
yum install epel-releas
yum install openvpn-auth-ldap
主要安装了/usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so文件。
编辑/etc/openvpn/auth/ldap.conf文件:
<LDAP>
URL ldap://192.168.61.159:389
BindDN cn=Manager,dc=frognew,dc=com
Password thepassword
Timeout 15
TLSEnable no
FollowReferrals no
</LDAP>
<Authorization>
BaseDN "ou=People,dc=frognew,dc=com"
SearchFilter "uid=%u"
RequireGroup true
<Group>
BaseDN "ou=Group,dc=frognew,dc=com"
SearchFilter "cn=vpn"
MemberAttribute memberUid
</Group>
</Authorization>
编辑openvpn的配置文件/etc/openvpn/server.conf:
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/ldap.conf cn=%u"
client-cert-not-required
- 使用了上面安装的openvpn-auth-ldap认证插件
client-cert-not-required
不再需要客户端证书,将改为使用OpenLDAP中的用户认证
注意上面的ldap.conf中
RequireGroup true
以及Group的配置实际我们期望是必须是LDAP中的名称为vpn的组下的用户才可以登录VPN。但根据这个ISSUE https://github.com/threerings/openvpn-auth-ldap/issues/7,当前2.0.3的openvpn-auth-ldap不支持。因此如果只想限制LDAP中某些用户可以使用VPN的话,只能设置RequireGroup false
,然后可以在SearchFilter中做一些文章,比如(&(uid=%u)(ou=vpn))即只有用户的ou字段为vpn的才可以。
完成配置后重新启动openvpn。
客户端配置和测试
客户端的配置调整如下:
client
dev tun
proto tcp
remote xxx.xxx.xxx 11194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
;cert client.crt
;key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
ns-cert-type server
auth-user-pass
comp-lzo
verb 3
- 上面的配置注释掉了
cert client.crt
和;key client.key
不再需要客户端证书client.crt和秘钥client.key ns-cert-type server
和auth-user-pass
是新加入的配置开启了用户名密码认证
修改完配置后使用VPN客户端连接即可。