VPN与LDAP结合,安全可控的私有组网案例
将VPN与LDAP结合,搭建一个安全可控的私有网络。
一,技术选型
1. 企业VPN构建平台:OpenVPN
为什么没有选用之前介绍的WireGuard?
主要原因是没有找到WireGuard与LDAP结合的方案,网上说有wg-ldap,但没找到可用资源。
2. 统一身份认证平台及管理系:OpenLDAP+LAM
使用前篇文章介绍的部署成果。
二,详细步骤
本次实践依然选择Rocky Linux 9.5操作环境。
1. 系统准备
# 更新系统
sudo dnf update -y
# 安装必要工具
sudo dnf install -y epel-release
sudo dnf install -y wget openssl openssl-devel easy-rsa
2、安装OpenVPN及LDAP插件
# 安装OpenVPN和插件
sudo dnf install -y openvpn openvpn-auth-ldap
3、配置PKI证书
# 复制EasyRSA模板
sudo cp -r /usr/share/easy-rsa/3.2.1 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
# 初始化PKI
sudo ./easyrsa init-pki
# 生成CA证书(按提示输入信息)
sudo ./easyrsa build-ca
# 生成服务器证书
sudo ./easyrsa build-server-full server nopass
# 生成Diffie-Hellman参数
sudo ./easyrsa gen-dh
# 生成TLS密钥
sudo openvpn --genkey --secret pki/ta.key
4、配置LDAP认证
创建LDAP配置文件:
sudo vi /etc/openvpn/auth/ldap.conf
添加以下内容(根据实际情况修改):
<LDAP>
URL ldap://192.168.1.102:389
BindDN "cn=admin,dc=rjqs,dc=com"
Password "your_ldap_admin_password"
Timeout 15
TLSEnable no
FollowReferrals yes
</LDAP>
<Authorization>
BaseDN "ou=users,dc=rjqs,dc=com"
SearchFilter "(uid=%u)"
RequireGroup false
</Authorization>
5、制作服务器端配置文件
(一)创建服务器配置文件
sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/
sudo vi /etc/openvpn/server/server.conf
(二)调整服务器配置文件
认证分为3种类型,需要服务器配置文件(server.conf)和客户端配置文件(*.ovpn)对应修改。
1-仅使用客户端证书认证
server.conf示例如下:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
verify-client-cert require #强制客户端证书认证
2-仅使用LDAP认证
server.conf示例如下:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
# 服务端配置
push "auth-nocache"
push "redirect-gateway def1"# 同时推送其他安全参数
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
# LDAP认证
plugin /usr/lib64/openvpn/plugins/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
verify-client-cert none #无需客户端证书认证
username-as-common-name # 使用用户名作为标识
3-同时使用客户端认证和LDAP认证
server.conf示例如下:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
# 服务端配置
push "auth-nocache"
push "redirect-gateway def1"# 同时推送其他安全参数
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
# LDAP认证
plugin /usr/lib64/openvpn/plugins/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
verify-client-cert require #强制客户端证书认证
#verify-client-cert none #无需客户端证书认证
username-as-common-name # 使用用户名作为标识
6、制作OpenVPN客户端证书
如果使用客户端证书认证,需为每个客户端生成证书和私钥:
(一)生成客户端证书
1-进入EasyRSA目录:
cd /etc/openvpn/easy-rsa
2-生成客户端证书
sudo ./easyrsa build-client-full client1 nopass # client1为客户端名称
3-获取客户端证书和私钥:
证书位置: /etc/openvpn/easy-rsa/pki/issued/client1.crt
私钥位置: /etc/openvpn/easy-rsa/pki/private/client1.key
4-将证书和私钥复制到客户端配置目录
sudo cp /etc/openvpn/easy-rsa/pki/issued/client1.crt /etc/openvpn/client/
sudo cp /etc/openvpn/easy-rsa/pki/private/client1.key /etc/openvpn/client/
(二)制作客户端配置文件
1-新建客户端配置文件
vi /etc/openvpn/client/client.ovpn
1.1-如果仅使用客户端证书认证,客户端配置文件内容示例如下:
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt #需要文件全路径
cert client.crt #需要文件全路径
key client.key #需要文件全路径
tls-auth ta.key 1 #需要文件全路径
key-direction 1
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
remote-cert-tls server
verb 3
1.2-如果仅使用LDAP认证,客户端配置文件内容示例如下:
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt #需要文件全路径
tls-auth ta.key 1 #需要文件全路径
key-direction 1
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
auth-user-pass # 强制输入LDAP用户名密码
auth-nocache # 禁用内存缓存
remote-cert-tls server
verb 3
1.3-如果同时使用客户端证书和LDAP认证,客户端配置文件内容示例如下:
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt #需要文件全路径
cert client.crt #需要文件全路径
key client.key #需要文件全路径
tls-auth ta.key 1 #需要文件全路径
key-direction 1
data-ciphers AES-256-GCM:AES-128-GCM
auth SHA256
auth-user-pass # 强制输入LDAP用户名密码
auth-nocache # 禁用内存缓存
remote-cert-tls server
verb 3
(三)制作客户端证书及配置文件的压缩包
1-创建客户端文件夹:
mkdir -p ~/openvpn-client
2-复制所需文件:
sudo cp /etc/openvpn/client/client.ovpn ~/openvpn-client/
sudo cp /etc/openvpn/easy-rsa/pki/ca.crt ~/openvpn-client/
sudo cp /etc/openvpn/easy-rsa/pki/ta.key ~/openvpn-client/
sudo cp /etc/openvpn/easy-rsa/pki/issued/client1.crt ~/openvpn-client/ # 如果使用客户端证书
sudo cp /etc/openvpn/easy-rsa/pki/private/client1.key ~/openvpn-client/ # 如果使用客户端证书
3-打包文件:
tar -czvf openvpn-client.tar.gz -C ~/openvpn-client .
4-将打包文件发送给客户端:
使用SCP、SFTP或邮件等方式将 openvpn-client.tar.gz 发送给客户端。
7、配置防火墙和路由
# 允许OpenVPN端口
sudo firewall-cmd --permanent --add-port=1194/udp
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload
# 启用IP转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
8、启动服务
sudo systemctl start openvpn-server@server
sudo systemctl enable openvpn-server@server
9、验证LDAP连接
# 测试LDAP查询
ldapsearch -x -H ldap://192.168.1.102:389 -D "cn=admin,dc=rjqs,dc=com" -W -b "ou=users,dc=rjqs,dc=com"
10、使用OpenVPN客户端登入私有网络
(一)在OpenVPN官网下载对应操作系统的OpenVPN客户端
(二)将上文提到的所有客户端配置软件下载到本地,配置好client.ovpn文件内的全路径信息
(三)打开OpenVPN客户端,导入client.ovpn文件,选择“连接”。
如果以上所有信息设置正确,服务正常,此时便可以连接到VPN网络,便如同在局域网一样用内网地址访问各类资源