2 min read

OpenVPN系列 - 对接OpenLDAP作统一认证

OpenVPN系列 -  对接OpenLDAP作统一认证

环境

  • 操作系统: Linux

LDAP数据构造

创建两个测试账号

  • zhang3.ldif
dn: uid=zhang3,ou=users,dc=vqiu,dc=local
cn: 张三
gidnumber: 2000
homedirectory: /home/zhang3
loginshell: /bin/bash
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: shadowAccount
sn: Linux
uid: zhang3
uidnumber: 2000
userpassword: {SSHA}E626//fgm2nTWqIvn/TaltqIZL5SCy54

li4.ldif

dn: uid=li4,ou=users,dc=vqiu,dc=local
cn: 李四
gidnumber: 2001
homedirectory: /home/zhang3
loginshell: /bin/bash
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: shadowAccount
sn: Linux
uid: li4
uidnumber: 2001
userpassword: {SSHA}JRCxn0ir/7vZGRWqp8Zrni+fanxgrVFe

创建ovpn组,并关联上述用户

dn: cn=ovpn,ou=ovpn,ou=groups,dc=vqiu,dc=local
cn: ovpn
objectclass: groupOfUniqueNames
objectclass: top
uniquemember: uid=zhang3,ou=users,dc=vqiu,dc=local
uniquemember: uid=li4,ou=users,dc=vqiu,dc=local

结构截图

服务配置

  • /etc/openvpn/server.conf 新增内容如下:
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
verify-client-cert none
  • /etc/openvpn/auth/ldap.conf
<LDAP>
   URL        ldap://xx.xx.xx.xx:389
   BindDN     CN=admin,DC=vqiu,DC=local
   Password   密码
   Timeout    15
   TLSEnable  no

   #TLSCACertDir    /etc/openldap/certs/
   #TLSCACertFile   /etc/openvpn/ca.pem
   #TLSCertFile     /etc/openldap/certs/server.crt
   #TLSKeyFile      /etc/openldap/certs/server.key
   FollowReferrals yes
</LDAP>

<Authorization>
  BaseDN       "ou=users,dc=vqiu,dc=local"
  SearchFilter	"uid=%u"
  RequireGroup  true

  <Group>
    BaseDN           "ou=ovpn,ou=groups,dc=vqiu,dc=local"
    SearchFilter     "(cn=ovpn)"
    MemberAttribute  uniqueMember
  </Group>
</Authorization>

客户端测试

zhang3.ovpn内容

client
dev tun
proto udp
remote IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
key-direction 1
remote-cert-tls server
ignore-unknown-option block-outside-dns
auth SHA512
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
verb 3
reneg-sec 0
auth-user-pass    # 重点
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
...
</tls-auth>
...

客户端文件(.ovpn) 中追加以下内容

auth-user-pass

如果配置正常的话,可以实现以下需求:

  • 登陆直接使用LDAP中的用户名与密码
  • 隶属于ovpn中的组都能登陆,如果将用户剔除组用户将无法正常登陆