OpenVPN 服务端的一些配置
VPN是企业内比较重要的一个资产,不能从网上乱下载,去官网看看 https://openvpn.net/,第一次不懂事,不清楚OpenVPN还有商业版,OpenVPN Access Server 和 OpenVPN Community,直接就安装了OpenVPN AS,没有网上说的那么难,还有图形化界面,登陆进行发现2个并发license???去官网注册购买需要花钱???
AS 版本破解
下载的最新版本的2.10.1,从网上搜了一下,这玩意还有破解版的,试一下最新版能不能破解
参考《XX Access Server 2.9.x 破解在线人数限制》,这是找到的最新的了,发现使用相同的办法,也能破解2.10.1
待破解的文件仍是 pyovpn-2.0-py3.6.egg,解压,反编译pyovpn/lic/uprop.pyc
修改uprop.py,搜索return ret,在上面添加一行ret['concurrent_connections'] = 4096
编译,替换
初始化AS
/usr/local/openvpn_as/bin/ovpn-init
配置VPN 路由、LDAP 、MFA,真丝滑
社区版OpenVPN
从官网上找教程
部署参考《openvpn部署》
server端配置文件 /etc/openvpn/server.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
port 1194 # 监听的端口号 proto udp # 服务端用的协议,udp,默认udp dev tun ca /etc/openvpn/server/certs/ca.crt # CA 根证书路径 cert /etc/openvpn/server/certs/server.crt # open VPN 服务器证书路径 key /etc/openvpn/server/certs/server.key # open VPN 服务器密钥路径,This file should be kept secret dh /etc/openvpn/server/certs/dh.pem # Diffie-Hellman 算法密钥文件路径 tls-auth /etc/openvpn/server/certs/ta.key 0 # 开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。 ifconfig-pool-persist ipp.txt #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。 push "route 10.0.0.0 255.0.0.0" # # 推送路由和DNS到客户端 push "route 192.168.0.0 255.255.0.0" push "route 172.16.0.0 255.240.0.0" # 推送路由到客户端,如果内网服务器地址是172.21.16.0的网段,可以增加此行,然后就可以ping通内网地址的所有服务器 server 10.8.0.0 255.255.255.0 # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24 push "dhcp-option DNS 8.8.8.8" # DNS 服务器配置,可以根据需要指定其他 ns push "dhcp-option DNS 8.8.4.4" # push "redirect-gateway def1" # 客户端所有流量都通过 open VPN 转发,类似于代理开全局,VPN服务器本身要通过客户端原来的网关访问(取消redirect-gateway def1 bypass-dhcp选项后这项必须开启,否则无法访问OpenVPN服务器) compress lzo duplicate-cn # 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN keepalive 10 120 # 每10秒ping一次,连接超时时间设为120秒。 comp-lzo # 开启VPN连接压缩,如果服务器端开启,客户端也必须开启 client-to-client #设置客户端是否可以访问客户端 persist-key # 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。 persist-tun max-clients 1000 # 允许最大的客户端连接数,默认100 user openvpn # open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了 group openvpn log /var/log/openvpn/server.log # 指定 log 文件位置 log-append /var/log/openvpn/server.log status /var/log/openvpn/status.log verb 3 explicit-exit-notify 1 # 设置断线重连功能 cipher AES-256-CBC #指定数据对称加密算法 reneg-sec 0 #reneg-sec服务器端会定期检查认证情况,默认3600秒一小时,使用OTP的话尽量时间长一些,否则客户端需要重新输入用户名密码和OTP一次性密码。 auth-nocache #断线后防止内存中保存用户名和密码来提高安全性
|
防火墙相关配置
1 2 3 4 5 6 7 8
|
# 将 openvpn 的网络流量转发到公网:snat 规则 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
# iptables 规则持久化保存 iptables-save > /etc/sysconfig/iptables
# 规则查看 iptables -nvL -t nat
|
客户端配置文件 config.ovpn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
client proto udp dev tun remote [open VPN服务端公网 ip,根据实际情况填写] 1194 //openvpn服务器的外网IP和端口(可以写多个做到高可用) ca ca.crt cert admin.crt key admin.key tls-auth ta.key 1 remote-cert-tls server //指定采用服务器校验方式 comp-lzo verb 3 //调试信息级别 mute-replay-warnings resolv-retry infinite //断线自动重新连接 nobind //不绑定特定的本地端口号 persist-key //与服务器端的保持一致 persist-tun //与服务器端的保持一致 cipher AES-256-CBC //指定数据对称加密算法
|
配置LDAP
这里参考《openvpn配置ldap》
LDAP接入还是很省事的,安装openvpn-auth-ldap插件
配置 /etc/openvpn/auth/ldap.conf
1 2 3 4 5 6 7 8 9 10 11 12
|
<LDAP> URL ldap://xx.xx.xx.xx:389 Password xx Timeout 15 TLSEnable no FollowReferrals no </LDAP> <Authorization> BaseDN "ou=xx,dc=xx,dc=cn" SearchFilter "sAMAccountName=%u" RequireGroup false </Authorization>
|
编辑server配置文件,添加
1 2 3
|
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf" client-cert-not-required username-as-common-name
|
修改客户端配置
1 2
|
ns-cert-type server auth-user-pass
|
测试成功
配置OTP
这个有点难啊,一直没有配置成功
参考《OpenVPN启用LDAP+GoogleAuthenticator认证》,
使用了https://github.com/evgeny-gridasov/openvpn-otp插件,一直没有成功,放弃了
参考《OpenVPN+AD+Google authenticator 安装、配置》,使用了google-authenticator-libpam,不是专业运维,配置pam头疼,放弃了
继续搜索可用教程
找到了https://github.com/wheelybird/openvpn-server-ldap-otp,通过docker部署,集成好了ldap和otp,丝滑,简单看了下配置参数,启动容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
docker run --name openvpn --volume /etc/openvpn:/etc/openvpn -v /etc/localtime:/etc/localtime:ro --detach=true --restart=always -p 61194:1194/udp -e "OVPN_SERVER_CN=vpn.pa55w0rd.com" -e "LDAP_URI=ldap://xx.xx.xx.xx" -e "LDAP_BASE_DN=OU=xx,DC=xx" -e "LDAP_BIND_USER_DN=CN=xx,OU=xx,DC=xx" -e "LDAP_BIND_USER_PASS=xx" -e "LDAP_LOGIN_ATTRIBUTE=sAMAccountName" -e "LDAP_FILTER=(objectClass=user)" -e "OVPN_NETWORK=10.118.0.0 255.255.0.0" -e "OVPN_ROUTES=172.16.0.0 255.240.0.0,10.0.0.0 255.0.0.0,192.168.0.0 255.255.0.0" -e "OVPN_DNS_SERVERS=192.168.1.2" -e "OVPN_IDLE_TIMEOUT=36000" -e "ENABLE_OTP=true" -e "FAIL2BAN_ENABLED=true" -e "FAIL2BAN_MAXRETRIES=20" --cap-add=NET_ADMIN wheelybird/openvpn-ldap-otp:v1.5
|
打印客户端配置文件 docker exec -ti openvpn show-client-config
添加OTP docker exec -ti openvpn add-otp-user <username>
where username matches the LDAP username.
还有fail2ban防止暴力破解
测试,登陆成功
客户端连接VPN
偷懒,阿里云都写好了 《客户端远程连接VPC》
原文始发于微信公众号(Pa55w0rd):OpenVPN + Ldap + OTP部署
评论