CentOS7部署ldap认证OpenVPN

网友投稿 690 2022-10-15


CentOS7部署ldap认证OpenVPN

一、说明

VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI;平时同事出差在外面连接公司,获取公司资源;2020由于新型肺炎导致春节假期延长,有条件的公司都实行在家办公,那么请问怎么保证各部门同事能在家办公?如何保障同事出差在外也能连接公司获取需要的资源?答案显然是使用vpn,本文主要讲部署openvpn和windows客户端使用。

环境:需要有windows域环境做ldap认证server:CentOS7.6 X64client: win7软件: openvpn-2.4.8-1.el7.x86_64 openvpn-auth-ldap-2.0.3-17.el7.x86_64

二、密钥无密码OpenVpn部署

1、软件包安装

yum install easy-rsa openssh-server lzo lzo-devel openssl openssl-devel openvpn NetworkManager-openvpn libgcrypt libgpg-error libgcrypt-devel openvpn-auth-ldap openldap-clients -y

2、配置openvpn

复制默认配置文件

# cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf /etc/openvpn

修改server.conf

cat /etc/openvpn/server.conf |egrep '(^$|^;^#)'

local 172.16.0.207 #本机ipport 1194 #运行端口proto udp # 运行协议 tcp较慢dev tun # #采用路由隧道模式ca ca.crtcert server.crtkey server.key # 服务器密钥dh dh2048.pem # 密钥交换协议文件topology subnetserver 192.168.11.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段相同ifconfig-pool-persist ipp.txtpush "route 0.0.0.0 0.0.0.0" # 定义网关push "route 192.168.11.0 255.255.255.0" #推送vpn服务器内网网段给客户端push "redirect-gateway def1 bypass-dhcp"push "dhcp-option DNS 172.16.0.1" # 推送dns配置keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线tls-auth ta.key 0 # 第二个参数在服务器端应该为'0',在客户端应该为'1'。cipher AES-256-CBC # 选择一个密码加密算法comp-lzo #传输数据压缩max-clients 100 #最多允许 50 客户端连接 persist-keypersist-tunstatus openvpn-status.loglog openvpn.logverb 3mute 20     # 相同类别的信息只有前20条会输出到日志文件中explicit-exit-notify 1

3、easy-rsa配置证书密钥

# wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip # unzip easy-rsa-release-2.x.zip # unzip # yum install unzip # unzip 2.x.zip # cd easy-rsa-release-2.x/ # cd easy-rsa/ # mkdir /etc/openvpn/easy-rsa # cp 2.0/* /etc/openvpn/easy-rsa/ # cd /etc/openvpn/easy-rsa/ # cat vars export EASY_RSA="`pwd`" export OPENSSL="openssl" export PKCS11TOOL="pkcs11-tool" export GREP="grep" export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_DIR="$EASY_RSA/keys" echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export PKCS11_MODULE_PATH="dummy" export PKCS11_PIN="dummy" export KEY_SIZE=2048 export CA_EXPIRE=3650 export KEY_EXPIRE=3650 export KEY_COUNTRY="CN" # 修改部分 export KEY_PROVINCE="SH" # 修改部分 export KEY_CITY="SJ" # 修改部分 export KEY_ORG="ICKEY" # 修改部分 export KEY_EMAIL="san@pkey.cn" # 修改部分 export KEY_OU="YunWei" # 修改部分 export KEY_NAME="EasyRSA"

4、创建证书

# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf # source ./vars # ./clean-all # ./build-ca #之前已配置好相关参数,故执行命令后,按回车键,一直到结束即可。 # 创建服务端证书 # ./build-key-server server #创建通用名(common name)为"server"的证书文件;按回车键进行,在提示输入密码的地方,设置一个密码如ickey@2020,最后输入两次“y”确认 # 生成防攻击的key文件 # openvpn --genkey --secret keys/ta.key # 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击) ## 创建客户端证书 # ./build-dh #创建秘钥文件,耗时1分钟左右 # ls /etc/openvpn/easy-rsa/keys/ # cd /etc/openvpn/easy-rsa/keys # cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn # ./build-key client #创建一个通用名(common name)为client的客户端证书;创建客户端证书文件,按回车进行,提示输入密码的地方,输入之前设置的证书密码, # ls /etc/openvpn/easy-rsa/keys/

5、启动openvpn

# systemctl status openvpn@server.service # systemctl enable openvpn@server.service # systemctl start openvpn@server.service # systemctl status openvpn@server.service

此时系统已经开放udp 1194端口

三、防火墙路由配置

1、做端口映射

将服务器的udp 1194端口在公司出口防火墙上做端口映射为udp 1194或其他端口;

2、openvpn本身防火墙配置

建议将iptables关闭,并手动添加一条规则

# iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -j MASQUERADE # echo 1 > /proc/sys/net/ipv4/ip_forward # echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 重启openvpn服务 # systemctl restart openvpn@server.service

四、windows客户端配置

1、客户端下载与安装

windows客户端下载地址 https://openvpn.net/community-downloads/ 以下是win7 https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.8-I602-Win7.exe win10: ta.key,client.key,client.crt,ca.crt证书复制到客户端的安装目录的config文件夹下,然后从客户端的sample-config文件夹内拷贝client.ovpn 到config文件夹下,编辑client.ovpnC:\Program Files\OpenVPN\config\cliet.ovpn配置如下:

client dev tun proto tcp remote "你的防火墙映射出来的公网ip" 1194 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 comp-lzo verb 3 mute 20

保存配置后双击桌面的OpenVPNGUI即完成登录;

以上是基于证书密钥登录openvpn;

五、基于LDAP认证

1、服务器端修改

# cat /etc/openvpn/auth/ldap.conf URL ldap://172.16.0.26:389 # cat ldap.txt |grep CN=Administrator |head -n 1 BindDN "CN=Administrator,CN=Users,DC=PKEY,DC=LOCAL" Password PASSWORD Timeout 15 TLSEnable no FollowReferrals no BaseDN "OU=PKEY,DC=PKEY,DC=LOCAL" #查出来后范围最大化 SearchFilter "(&(sAMAccountName=%u)(memberof=CN=myvpn,OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL))" RequireGroup false BaseDN "OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL" SearchFilter "(cn=openvpn)" MemberAttribute "member"

说明:以上BaseDN部分通过这个工具测试得到;另外openvpn 这个ou域上需要有,myvpn是openvpn下的安全组,即加到这个openvpn下的myvpn组中的用户可以通过认证登录openvpn,不加入这个组则不行;

ldapsearch -LLL -x -h 172.16.0.26 -D "administrator@pkey.local" -W -b "dc=pkey,dc=local" "*" >/tmp/ldap.txt # cat ldap.txt |grep myvpn # memberOf: CN=myvpn,OU=openvpn,OU=PKEY,DC=PKEY,DC=LOCAL

2、修改server.conf配置

server.conf配置文件只需要在之前的基础上添加以下三行即可

# cat server.conf |egrep -v '(^$|^;|^#)' |tail -n 6 log openvpn.log verb 3 plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf" #ldap认证需要添加 client-cert-not-required # ldap认证需要添加 username-as-common-name # ldap认证需要添加 mute 20

重启openvpn服务systemctl restart openvpn@server.service

3、客户端配置

此时客户端配置只需要修改C:\Program Files\OpenVPN\config\client.ovpn配置文件即可,最终配置如下:

client dev tun proto udp remote "你的防火墙映射出来的公网ip" 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt #cert client.crt ## 结合了ldap注释 #key client.key ## 结合了ldap注释 auth-user-pass # 结合了ldap认证需要添加 remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC comp-lzo verb 3 mute 20

如果认证失败请到服务器上tail -fn 100 openvpn.log 通过提示排查;如以上的ldap.conf中配置错误;或用户没有加到openvpn下的myvpn组会出现如下错误提示:

**LDAP user "donyc" was not found.** Wed Feb 5 22:47:27 2020 101.80.125.78:34260 PLUGIN_CALL: POST /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1 Wed Feb 5 22:47:27 2020 101.80.125.78:34260 PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so Wed Feb 5 22:47:27 2020 101.80.125.78:34260 TLS Auth Error: Auth Username/Password verification failed for peer

openvpn是全平台支持的;其他客户端请自行到官方网站下载;到此一个在家或出差办公的神器部署完成!以此献给疫情期间需要的人,如有问题请联系我~谢谢~


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈自定义校验注解ConstraintValidator
下一篇:华为交换机中常见MAC操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~