一、实验环境

主机        内网IP            外网IP              系统            备注
OpenVPN    10.5.10.202      NAT映射外网访问     Centos7        OpenVPN服务端
PC1        10.5.10.122       内网用户           Windows7 x64   客户端
PC2        10.5.10.123       内网用户           Windows10      客户端
PC3                          外网用户           Windows7 x64   客户端 

二、生成证书

1、添加epel yum源

[root@openvpn ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo

2、下载证书生成工具easy-rsa

[root@openvpn ~]# yum -y install easy-rsa

3、创建证书环境目录

[root@openvpn ~]# mkdir -p /opt/easy-rsa
[root@openvpn ~]# cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
[root@openvpn ~]# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars

4、修改vars配置文件,取消下面配置的注释

[root@openvpn ~]# vi /opt/easy-rsa/vars
set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "GuangDong"
set_var EASYRSA_REQ_CITY        "GuangZhou"
set_var EASYRSA_REQ_ORG         "IT"
set_var EASYRSA_REQ_EMAIL       "IT@qq.com"
set_var EASYRSA_NS_SUPPORT      "yes"

5、初始化,创建pki目录用于存储证书(以下都在/opt/easy-rsa目录下操作)

[root@openvpn ~]# cd /opt/easy-rsa/
[root@openvpn easy-rsa]# ./easyrsa init-pki

6、创建根证书,根证书用于ca对之后生成的server和client证书签名时使用

[root@openvpn easy-rsa]# ./easyrsa build-ca

7、创建server端证书和密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)

[root@openvpn easy-rsa]# ./easyrsa gen-req server nopass

8、给server端证书签名

[root@openvpn easy-rsa]# ./easyrsa sign server server

9、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法

[root@openvpn easy-rsa]# ./easyrsa gen-dh

10、创建client端证书和密钥文件(nopass表示不加密密钥文件,生成过程中直接默认回车)

[root@openvpn easy-rsa]# ./easyrsa gen-req client nopass

11、给client端证书签名

[root@openvpn easy-rsa]# ./easyrsa sign client client

三、OpenVPN服务端部署

1、安装openvpn

[root@openvpn ~]# yum install -y openvpn

2、创建TLS认证密钥

[root@openvpn ~]# openvpn --genkey --secret /etc/openvpn/ta.key

3、创建新的配置文件/etc/openvpn/server.conf

[root@openvpn ~]# vi /etc/openvpn/server.conf
#监听本机端口
port 1194
#指定采用的传输协议,可选tcp或udp
proto tcp
#指定创建的通信隧道类型,可选tun或tap
dev tun
#指定CA证书的文件路径
ca ca.crt
#指定服务器端的证书文件路径
cert server.crt
#指定服务器端的私钥文件路径
key server.key
#指定迪菲赫尔曼参数的文件路径,也就是交换证书
dh dh.pem
#给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
server 10.8.0.0 255.255.255.0
#允许客户端访问内网网段
push "route 10.5.10.0 255.255.255.0"
#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP"
ifconfig-pool-persist ipp.txt
#存活时间,10秒ping一次,120如未收到响应则视为断线
keepalive 10 120
#最多允许100个客户端连接
max-clients 100
#日志记录位置
status openvpn-status.log
#openvpn版本
verb 3
#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
client-to-client
#openvpn日志记录位置
log /var/log/openvpn.log
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的.否则网络会先linkdown然后再linkup
persist-tun
#开启TLS-auth,使用ta.key防御攻击.服务器端的第二个参数值为0,客户端的为1
tls-auth /etc/openvpn/ta.key 0

4、拷贝证书到openvpn主配置文件目录下

[root@openvpn ~]# cp -a /opt/easy-rsa/pki/ca.crt /etc/openvpn/
[root@openvpn ~]# cp -a /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/
[root@openvpn ~]# cp -a /opt/easy-rsa/pki/private/server.key /etc/openvpn/
[root@openvpn ~]# cp -a /opt/easy-rsa/pki/dh.pem /etc/openvpn/

5、设置开机启动,检查服务端口

[root@openvpn ~]# systemctl start openvpn@server
[root@openvpn ~]# systemctl status  openvpn@server

四、OpenVPN客户端部署

1、win7客户端安装,默认安装(openvpn客户端需要.net支持,网络正常会自动安装)

2、win10安装,默认安装(openvpn客户端需要.net支持,网络正常会自动安装)

3、拷贝服务端生成的证书到openvpn客户端安装目录的config目录下

/opt/easy-rsa/pki/ca.crt
/opt/easy-rsa/pki/issued/client.crt
/opt/easy-rsa/pki/private/client.key
/etc/openvpn/ta.key

4、在客户端openvpn安装目录的config目录下,新建一个client.ovpn文件,写入配置

#指定当前VPN是客户端
client
#使用tun隧道传输协议
dev tun
#使用udp协议传输数据
proto tcp
#openvpn服务器IP地址端口号
remote 10.5.10.202 1194
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#不绑定本地特定的端口号
nobind
#指定CA证书的文件路径
ca ca.crt
#指定当前客户端的证书文件路径
cert client.crt
#指定当前客户端的私钥文件路径
key client.key
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1
tls-auth ta.key 1

5、启动Open VPN客户端软件,连接成功OpenVPN的图标会变成绿色

win7连接成功

win10连接成功

OpenVPN会分配一个IP地址给客户端,客户端会使用该虚拟网络IP地址与服务端进行通信。

6、目前客户端只能ping虚拟网络的IP,不能跟内网其他主机互通

五、OpenVPN客户端访问内网

1、客户端要想跟内网通讯还需要openvpn服务端开启内核转发

[root@openvpn ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@openvpn ~]# sysctl -p
net.ipv4.ip_forward = 1

2、方法一:添加路由规则方式访问内部网络

在内网主机上添加一条路由规则,让内网主机有回到OpenVPN客户端的路由。如果不添加,那内网主机只能接受到来自客户端的包,但是没法把响应的包传回去。

弊端:如果有成白上千台主机时,每一台主机都要添加路由规则,这样任务量是比较大的。

3、方法二:添加防火墙方式访问内部网络

在服务端开启防火墙,放行openvpn服务,并且开启masquerade

优点:只需在OpenVPN服务端配置防火墙规则,内部网络主机无需配置

[root@openvpn ~]# systemctl start firewalld
[root@openvpn ~]# firewall-cmd --add-masquerade --permanent
[root@openvpn ~]# firewall-cmd --add-service=openvpn --permanent
[root@openvpn ~]# firewall-cmd --add-port=1194/tcp --permanent
[root@openvpn ~]# firewall-cmd --reload

六、证书+密码认证

1、修改OpenVPN服务端配置文件

#在最后增加以下配置
[root@openvpn ~]# vi /etc/openvpn/server.conf
#允许使用自定义脚本
script-security 3
#脚本路径
auth-user-pass-verify /etc/openvpn/check.sh via-env
#用户密码登陆方式验证
username-as-common-name

加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录

2、添加脚本

[root@openvpn ~]# vi  /etc/openvpn/check.sh
#!/bin/sh
###########################################################
PASSFILE="/etc/openvpn/openvpnpass"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`if [ ! -r "${PASSFILE}" ]; thenecho "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}exit 1
fiCORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`if [ "${CORRECT_PASSWORD}" = "" ]; thenecho "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; thenecho "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}exit 0
fiecho "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

3、增加执行权限

[root@openvpn ~]# chmod +x /etc/openvpn/check.sh 

4、增加用户密码文件

[root@openvpn ~]# vi /etc/openvpn/openvpnpass
openvpn openvpn@123

5、重启openvpn服务

[root@openvpn ~]# systemctl restart openvpn@server

6、修改客户端安装路径config目录下的client.opvn配置文件,在最后增加

auth-user-pass

七、出口防火墙设置

1、在出口设备配置映射,映射openvpn 1194端口到公网,允许用户通过对应的公网地址+端口访问

2、修改客户端的client.ovpn文件,把远程地址改为公网IP+端口

#openvpn服务器IP地址端口号
remote 公网IP 1194

3、客户端退出重新登录即可

Centos 部署OpenVP* 证书+密码认证相关推荐

  1. CentOS系统Tomcat 8.5/9部署SSL证书

    CentOS系统Tomcat 8.5/9部署SSL证书 本页目录 环境准备 前提条件 操作步骤 后续操作 本文档介绍了CentOS系统下Tomcat 8.5或9部署SSL证书的操作说明. 环境准备 操 ...

  2. 部署SSL证书中的风险

    国内CA机构颁发SSL证书的风险<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  3. 京东 你访问的页面需要验证证书_SSL证书安全认证有什么原理?

    SSL证书是HTTP明文协议升级HTTPS加密协议必备的数字证书.它在客户端(浏览器)与服务端(网站服务器)之间搭建一条安全的加密通道,对两者之间交换的信息进行加密,确保传输数据不被泄露或篡改.通过它 ...

  4. 只有部署 SSL 证书才能保护网上隐私信息安全

    只有部署 SSL 证书才能保护网上隐私信息安全  (发布时间:2009-3-18, 2009年第2号,总第68号) UPDATE: 此文内容刊登在<计算机世界>报(2009年04月06日第 ...

  5. Nginx服务器部署SSL证书

    http://jingyan.baidu.com/article/154b463178eac928ca8f41a9.html SSL证书也称为服务器证书,是遵守全球统一的严格身份认证的SSL协议的一种 ...

  6. 04-Windows Server 2012 R2 会话远程桌面-标准部署-CA证书(RemoteApp)

    在之前的博客中,已经按照标准部署进行了配置,基本上标准的部署已经完成,但是在IT环境中,细节决定成败,在我们通过Web进行访问RemoteApp程序时候,总会有一些警告和阻拦,这些问题虽然不影响到用户 ...

  7. php iis6 安装ssl证书,在IIS下部署SSL证书实现HTTPS

    HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.谷歌已经制定了一项长远的计划,它的最终目标是将所有通过HTTP协议呈现的网页标为"不安全",对于站长来说,部署SS ...

  8. java wcf 未提供用户名_WCF的用户名密码认证

    以前我们用WebService做分布式系统的时候,认证是个麻烦的问题,通常的做法是继承一个SoapHeader,把用户名和密码放到里面,每调用一个方法都要把用户名和密码传递给服务器端来验证 ,效率相当 ...

  9. InfluxData【环境搭建 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享

    1.下载安装包 安装包地址:https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable,可根据版本号和分支进行下载. # 本次安装 ...

  10. 网站安全之nginx的配置创建访问网站密码认证

    最近我们Sinesafe在处理nginx+php+mysql架构的客户网站安全方面要配置后台的二级密码访问验证处理过程中要用到nginx的配置来完成这个二级密码的设置安全部署. 下面由我来简要说一下在 ...

最新文章

  1. CentOS安装中文输入法
  2. WebSocket协议分析
  3. 纠结的名字 - 自动生成apk文件名
  4. bootcmd 和 bootargs 环境变量
  5. 评审恩仇录——我为什么愿意执行代码评审
  6. 2019 ASP.NET Core 之微调查报告,新鲜出炉
  7. spring data jpa从入门到精通_程序员笔记:Spring Data JPA入门
  8. Matlab添加BNT工具箱
  9. C++基础与深度解析第零章:C++基础笔记
  10. Coins(HDU2844)
  11. 斐波那契堆(Fibonacci heap)原理详解
  12. PDF怎么提取图片,这三个方法你肯定不知道
  13. SAP 采购订单关单
  14. ubuntu16.04 安装hustoj 最新【亲测,附带常见问题解决】
  15. 圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌
  16. ObjectC快速入门教程(1)--创建类
  17. 计算机二级前两周,知道这些,计算机二级两周够了
  18. c#操作word图表(二)
  19. 2020-11-25-springboot-打开web日志
  20. JAVA面试题(选择题)

热门文章

  1. 货币代码(ISO 4217)
  2. 知识表示学习 TransE 代码逻辑梳理 超详细解析
  3. xcap发包工具的简单使用3(报文描述)
  4. 手机伪原创视频处理工具 视频md5修改器ios
  5. A、B、C类地址及子网掩码学习笔记
  6. linux下分析prn文件,Linux文件的管理
  7. 《Nature-Inspired Metaheuristic Algorithms》——蝙蝠算法 Bat Algorithm
  8. 在QT中配置snap7库
  9. 简单说下H5+打包apk
  10. 推荐一门开源课程“C/C++:从基础语法到优化策略”