Centos配置OpenVPN+OpenLDAP认证

2023-11-11

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目录中的规则根据业务实际情况去自定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Centos配置OpenVPN+OpenLDAP认证 的相关文章

随机推荐

  • python创建和修改yaml文件

    1 创建yaml import os import yaml desired caps train dataTrain 2007 train txt val dataTrain 2007 val txt nc 2 names a b cur
  • MFC调用mysql操作

    要用MySQL提供的C语言API 首先要包含API的头文件目录 也就是在MFC工程属性中的 包含目录 下添加MySQL安装目录的 include 文件夹 因为API是以动态链接库的形式打包的 所以还要在MFC工程属性中的 库目录 下添加My
  • pip安装python库时报Failed building wheel for xxx

    目录 一 问题描述 二 解决办法 1 下载并安装对应的 whl 文件 2 安装 whl 文件 一 问题描述 如题 在使用pip install xxx的方法安装python库 或者是基于python的软件时 报错 ERROR Failed
  • 什么是vuex?(五分钟理解vuex)

    1 什么是vuex 官方的理解是 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 Vuex 也集成到 Vue 的官方调试工具 dev
  • 10kV 电压互感器TV高压熔断器熔断可能是什么原因?

    10kV 电压互感器TV高压熔断器熔断可能是什么原因 答 1 当系统在某种运行方式 某种条件下 可能产生铁磁共振 这时也会产生过电压 有可能使TV的激磁电流增加十儿倍 会引起高压侧熔断器熔断 2 系统发生单相间谐电弧接地时 会出现过电压 可
  • 从数组中找出最小的k个数

    调整堆 小顶堆 void HeapAdjust int A int parent int length temp保存当前父节点parent int temp A parent 左子结点开始 i节点的左孩子为2i 1 右孩子为2i 2 for
  • Python实现快速排序

    Python实现快速排序 一 快速排序简介 快速排序 Quick Sort 是一种效率很高的排序算法 是对冒泡排序的一种改进排序算法 快速排序首先任意选取一个数据 通常选待排序列表中的第一个数 作为基准数据 将待排序列表中的数据分割成独立的
  • 微软arm服务器2021,2021 H1版Windows 10或大改,ARM跑64位X86可能性大吗?

    描述 从10月份发布的Surface产品线来看 微软未来不仅会携手Intel AMR两大X86巨头 与高通在ARM上的合作也不会停止 最新传闻称2021 H1版的Windows 10就会大改 支持在ARM处理器上运行64位X86软件 201
  • 基于51单片机的智能窗帘设计

    具体实现功能 系统由STC89C51 1602液晶 步进电机 光敏电阻 按键模块 DS1302时钟模块 ADC0832模块 电源构成 1 LCD1602显示日期和时间 当前控制模式及光照强度 2 可通过按键切换 手动模式 定时模式 光控模式
  • Anaconda镜像源整理与使用

    本文复制于 Anaconda镜像源整理与使用 天道酬勤 花开半夏 只为方便查找与防止原文被删除 请前往原文查看 Anaconda镜像源整理与使用 常用镜像源Conda源Pypi源 镜像源使用指令解决CondaHTTPError HTTP 0
  • 微信机器人api

    登录模块 登录微控平台 member login 获取微信二维码 user login 执行微信登录 getIPadLoginInfo 获取联系人列表 群 好友 getAllContact 二次登录 退出微信号 需要再次登录 调用此接口即可
  • 解决报错:Websocket connection to‘ws://127.0.0.1:5000/socket.io/?EIO=4&transport=websocket’failed:Error

    报错全文为 Websocket connection to ws 127 0 0 1 5000 socket io EIO 4 transport websocket failed Error during Websocket handsh
  • STM32 CubeMX 生成RT-Thread工程时RT-Thread源码不能Go To Definition跳转

    STM32 CubeMX 生成RT Thread工程时RT Thread源码不能Go To Definition跳转 MDK报错如下 Browse information of one or more files is not availa
  • 如何使用PVRTexTool提升移动端图形效果

    导语 本文作者Ben Anuworakarn 是PowerVR 开发技术团队的技术作者 具有计算科学工程知识背景 文中 他针对移动端游戏画面的优化 介绍了图像纹理处理 Mipmapping以及渗色等相关技术 同时 通过充分利用PVRTexT
  • the propfind response did not include the requested properties

    从仓库检出代码客户端提示如下错误 the propfind response did not include the requested properties 这意味着 客户端的协议版本高于服务器的版本 server的协议没有client要
  • Spring注解之实体类常用注解

    import org hibernate annotations AccessType import org hibernate annotations import javax persistence import javax persi
  • 【CSRF攻击分析】

    目录 一 什么是CSRF漏洞 二 CSRF漏洞的原理和利用过程 三 CSRF漏洞的检测方法 四 攻击利用姿势 五 防护手段 一 什么是CSRF漏洞 CSRF即跨站点请求伪造 Cross Site Request Forgery 跟XSS攻击
  • 内测体验:GitHub Copilot智能代码补全自动写代码插件

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 概述 一大早起床 收到了GitHu
  • 工业数字智能化常用系统简介

    文章目录 QMS 1 IPQC 过程检 2 OQC 出货检 3 SPC 统计工序控制 4 Andon 安灯 5 其他 MDM MES QMS 质量管理体系 是Quality Management System 的简称 通常包括制定质量方针
  • Centos配置OpenVPN+OpenLDAP认证

    Centos配置OpenVPN OpenLDAP认证 一 安装openvpn auth ldap插件 二 配置ldap conf文件 三 配置openvpn中的server conf文件 四 配置客户端client ovpn文件 五 开启路