根据网上各位大神的文档参考结合整理出,此部署方式为我工作单位实际生产使用环境。具体的域名参数等需要使用者自己修改。
大家要是觉得写得有用不妨关注下我,粉丝不多有空可以交流下。看到消息我会回复。
1、安装EPEL仓库:可以通过两种方法安装EPEL仓库,使用YUM命令或手动安装。
使用YUM命令安装:
yum install -y epel-release
2、清理YUM缓存并生成新的缓存:安装EPEL仓库后,需要更新yum缓存以识别新安装的仓库。
yum clean all
yum makecache
3、安装openvpn 证书 ad插件
yum install openvpn easy-rsa openvpn-auth-ldap -y
4、将 easy-rsa 脚本从 /usr/share/easy-rsa 复制到 /etc/openvpn 目录以用于您的 VPN 实例:
cp -r /usr/share/easy-rsa /etc/openvpn
5、切换到新的easy-rsa目录开始设置(你的版本可能不是3.0.8)
cd /etc/openvpn/easy-rsa/3.0.8
这些命令将构建一个目录, /etc/openvpn/easy-rsa/3.0.8/pki其中包含您最终需要的所有文件。
6、准备生成证书用的CSR相关配置
cat <<EOF > /etc/openvpn/easy-rsa/vars
#公司信息,根据情况自定义
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "ShangHai"
set_var EASYRSA_REQ_CITY "Shang Hai"
set_var EASYRSA_REQ_ORG "test"
set_var EASYRSA_REQ_EMAIL "test@163.com"
set_var EASYRSA_REQ_OU "test Organizational Unit"
#证书有效期 10年
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
EOF
7、创建Easy-RSA的工作目录并初始化PKI:
cd /etc/openvpn/easy-rsa/ ./easyrsa init-pki
8、生成CA证书:
创建并签发一个CA(证书颁发机构)证书:
./easyrsa build-ca nopass
这里的nopass参数表示在生成证书时不设置密码。
9、生成DH参数:
生成Diffie-Hellman参数,这是OpenVPN加密通信所需的:
./easyrsa gen-dh
10、生成服务器证书和密钥:
生成服务器证书和密钥,同样使用nopass避免设置密码:
./easyrsa gen-req server nopass
./easyrsa sign-req server server
11、生成客户端证书和密钥:
为客户端生成证书和密钥,您可以为每个客户端重复此步骤,并为每个证书指定一个唯一的名称:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
12、生成TLS认证密钥:
为了增加安全性,您可以生成一个TLS认证密钥:
openvpn --genkey --secret ta.key
13、生成CRL(证书撤销列表):
如果需要,可以生成CRL以便将来可以撤销证书:
./easyrsa gen-crl
14、复制证书和密钥到OpenVPN配置目录:
将生成的证书和密钥复制到OpenVPN的配置目录:
cp pki/ca.crt /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp ta.key /etc/openvpn/
cp pki/dh.pem /etc/openvpn/
15、配置server.conf
[root@localhost openvpn]# cat server.conf
port 1194 #监听端口
proto tcp #监听协议
dev tun #采用隧道
ca ca.crt #ca证书路劲
cert server.crt #服务器证书路劲
key server.key #服务器秘钥
dh dh.pem #秘钥交换协议文件
server 10.248.0.0 255.255.254.0 #给客户端分配的地址,注意:不能和vpn服务器的内部地址相同
ifconfig-pool-persist ipp.txt #访问记录
push "route 10.8.0.0 255.255.0.0" #允许客户端访问的地址网段
#push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 10.8.10.1" #DHCP分配的DNS
push "dhcp-option DNS 223.6.6.6"
keepalive 10 120 #活动时间,10秒ping一次,120秒如果未收到响应视为断线
#cipher AES-256-CBC
max-clients 1024 #允许最大连接数
#user nobody #用户
#group nobody #用户组
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 5
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf cn=%u"
client-cert-not-required
#verify-client-cert
username-as-common-name
16、配置ldap.conf
[root@localhost openvpn]# cat auth/ldap.conf
<LDAP>
# LDAP server URL
#更改为AD服务器的ip
URL ldap://10.8.10.12:389
# Bind DN (If your LDAP server doesn't support anonymous binds)
# BindDN uid=Manager,ou=People,dc=example,dc=com
#更改为域管理的dn,可以通过ldapsearch进行查询,-h的ip替换为服务器ip,-d换为管理员的dn,-b为基础的查询dn,*为所有
#ldapsearch -LLL -x -h 172.16.76.238 -D "administrator@xx.com" -W -b "dc=xx,dc=com" "*"
BindDN "CN=ldap,OU=App,DC=test,DC=com"
# Bind Password
# Password SecretPassword
#域管理员的密码
Password v0CZ123456
# Network timeout (in seconds)
Timeout 15
# Enable Start TLS
TLSEnable no
# Follow LDAP Referrals (anonymously)
#FollowReferrals yes
# TLS CA Certificate File
#TLSCACertFile ca.crt
# TLS CA Certificate Directory
#TLSCACertDir /etc/ssl/certs
# Client Certificate and key
# If TLS client authentication is required
#TLSCertFile /usr/local/etc/ssl/client-cert.pem
#TLSKeyFile /usr/local/etc/ssl/client-key.pem
# Cipher Suite
# The defaults are usually fine here
# TLSCipherSuite ALL:!ADH:@STRENGTH
</LDAP>
<Authorization>
# Base DN
#查询认证的基础dn
BaseDN "OU=上海总部,DC=test,DC=com"
# User Search Filter
#SearchFilter "(&(uid=%u)(accountStatus=active))"
#其中sAMAccountName=%u的意思是把sAMAccountName的字段取值为用户名,后面“memberof=CN=myvpn,DC=xx,DC=com”指向要认证的vpn用户组,这样任何用户使用vpn,只要加入这个组就好了
#SearchFilter "(&(sAMAccountName=%u)(memberof=CN=myvpn,OU=IXMSOFTLDAP,DC=ixmsoft,DC=com)"
SearchFilter "(&(sAMAccountName=%u))"
# Require Group Membership
RequireGroup false
# Add non-group members to a PF table (disabled)
#PFTable ips_vpn_users
<Group>
#BaseDN "ou=Groups,dc=example,dc=com"
#SearchFilter "(|(cn=developers)(cn=artists))"
#MemberAttribute uniqueMember
# Add group members to a PF table (disabled)
#PFTable ips_vpn_eng
BaseDN "OU=上海总部,DC=test,DC=com"
SearchFilter "(|(cn=openvpn))"
MemberAttribute "member"
</Group>
</Authorization>
17、配置路由和NAT规则:
开启IP转发:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
18、启动openvpn服务,需要先创建nohup.out文件,文件内容空白即可
先创建openvpn.log openvpn-status.log nohup.out 三个文件以防报错
nohup /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf &
19、下载ca.crt 文件到本地客户端使用,路径为 /etc/openvpn/ca.crt
20、客户端配置文件
client
dev tun
proto tcp
remote 10.8.100.139 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
auth-user-pass
#static-challenge "Enter Google Authenticator Token" 1
#comp-lzo
reneg-sec 0
verb 5
21、配置iptables,需要先安装iptables
yum install -y iptables-services
systemctl start iptables
systemctl enable iptables
systemctl status iptables
[root@localhost openvpn]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Mon Apr 22 17:38:03 2024
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60:4914]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-I INPUT 1 -i ens192 -p udp --dport 1194 -j ACCEPT
-I INPUT 1 -i ens192 -p tcp --dport 1194 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -m state --state NEW -o tun+ -j ACCEPT
COMMIT
# Completed on Mon Apr 22 17:38:03 2024
# Generated by iptables-save v1.4.21 on Mon Apr 22 17:38:03 2024
*nat
:PREROUTING ACCEPT [184:18930]
:INPUT ACCEPT [19:4656]
:OUTPUT ACCEPT [15:941]
:POSTROUTING ACCEPT [119:10061]
-A POSTROUTING -s 10.248.0.0/23 -d 0.0.0.0/0 -o ens192 -j MASQUERADE
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Mon Apr 22 17:38:03 2024
*filter
:INPUT ACCEPT [396:29660]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [217:27524]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
COMMIT