Centos配置OpenVPN+OpenLDAP认证

Centos搭建OpenVPN的环境有很多资料,自行查询配置

一、安装openvpn-auth-ldap插件

yum -y install epel-release
yum -y install openvpn-auth-ldap
cp /etc/openvpn/auth/ldap.conf /etc/openvpn/auth/ldap.conf.bak

二、配置ldap.conf文件

vim /etc/openvpn/auth/ldap.conf
修改如下内容:

<LDAP>
    URL ldap://192.168.9.999:389    	# 自己的ldap服务器地址
    Timeout 15
    TLSEnable no
</LDAP>

<Authorization>
    BaseDN "ou=users,dc=ss,dc=com"      # 这里的dc是你ldap服务器中设置的域名等
    SearchFilter "(uid=%u)"
    RequireGroup false
    <Group>
      BaseDN "dc=ss,dc=com"
      SearchFilter "(|(cn=developers)(cn=artists))"
      MemberAttribute uniqueMember
    </Group>
</Authorization>

三、配置openvpn中的server.conf文件

vim /etc/openvpn/server.conf
修改如下内容:

duplicate-cn                                   # 定义openvpn一个证书在同一时刻是否允许多个客户端接入,默认没有启用
server 10.1.0.0 255.255.240.0                  # 设置vpn给予的ip地址范围在10.1.0.0/20网段内(涵盖10.1.0.0-10.1.0.15网段)
;push "route 192.168.1.0 255.255.255.0"        # 注释掉原先定义的推送路由(后面会给每个用户设置他们的访问权限等)
;push "route 192.168.9.0 255.255.255.0"
client-config-dir ccd                          # 开启配置文件夹功能,用于配置用户/组能使用vpn拿到的虚拟ip地址和访问的网段

# 新增如下:(openldap 认证配置项)
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
client-cert-not-required
script-security 3
username-as-common-name
client-connect connect.sh                      # 有新连接 连接时执行脚本(后面会根据该脚本给每个用户设置他们的访问权限等)

四、配置客户端client.ovpn文件

修改如下内容:

# 注释如下证书
;cert client.crt
;key client.key

# 新增验证方式
ns-cert-type server
auth-user-pass

五、开启路由转发功能

yum -y install iptables-services
systemctl enable iptables --now
iptables -t nat -A POSTROUTING -s 10.1.0.0/20 -o eth0 -j MASQUERADE     # 添加iptables规则,确保服务器可以转发数据包到外网
iptables-save > /etc/sysconfig/iptables                                 # 永久保存
iptables -t nat -L                                                      # 查看iptables路由转发信息

# 下面是清除iptables nat表规则的命令
iptables -t nat -F

六、脚本编辑

公司的ldap组织架构如图所示:
在这里插入图片描述
脚本设计思路:

  1. blacklist组是离职的,所以只在users中查找对应的用户uid
  2. 当客户端输入用户名密码,ldap会先识别用户名密码输入是否正确
  3. 查询ccd目录下是否有同用户名一样的common_name文件存在?若存在,则openvpn会从该目录下调用与用户名相同名称的策略
    若不存在,则用ldapsearch查询在某个组里面是否有该用户存在。若有该用户,则拷贝该组的访问策略并重命名到指定的ccd目录下,下次可直接调用
mkdir /etc/openvpn/ccd             # 用于客户端输入用户名密码后,调用哪个配置文件(下面的脚本会让其拷贝rules中组的配置信息)
mkdir /etc/openvpn/rules           # 用于配置存放ldap用户对应组能使用openvpn的哪个虚拟ip地址、访问哪些网段

设置caiwu组的成员分配到10.1.4.5和10.1.4.9两个虚拟ip地址使用(若有组内有多个成员,则需要给足虚拟ip地址)
虚拟ip地址需要遵循特定规则,详细见:https://blog.csdn.net/dl_wdp/article/details/119324734https://blog.csdn.net/qdwyj/article/details/108151198
设置caiwu组的成员连接vpn后,可以访问内网中的1、4网段

vim /etc/openvpn/rules/caiwu

ifconfig-push 10.1.4.5 10.1.4.6
ifconfig-push 10.1.4.9 10.1.4.10
push "route 192.168.1.0 255.255.255.0"
push "route 192.168.4.0 255.255.255.0"

要想执行ldapsearch查询,需要安装openldap-clients才行:yum install openldap-clients
测试是否能正常访问到ldap,获取ldap信息:ldapsearch -x -b 'dc=ss,dc=com' -H ldap://192.168.9.999

vim /etc/openvpn/connect.sh

#!/bin/bash
if [[ ! -f "/etc/openvpn/ccd/${common_name}" ]]; then
  echo "查询到用户对应的common_name文件未在ccd目录中存在,拒绝访问!"
 
if ( ldapsearch -x -LLL -b 'ou=产品,ou=users,dc=ss,dc=com' -H ldap://192.168.9.999 "uid=${common_name}" | grep -c dn ); then
  echo "找到了用户 ${common_name},执行操作"
  cp /etc/openvpn/rules/chanpin /etc/openvpn/ccd/${common_name}
fi
 
if ( ldapsearch -x -LLL -b 'ou=财务,ou=users,dc=ss,dc=com' -H ldap://192.168.9.999 "uid=${common_name}" | grep -c dn ); then
  echo "找到了用户 ${common_name},执行操作"
  cp /etc/openvpn/rules/caiwu /etc/openvpn/ccd/${common_name}
fi
 
......
 
exit 1
fi

chmod +x /etc/openvpn/connect.sh

七、测试

直接用户名、密码登录即可。rules目录中的规则根据业务实际情况去自定义。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值