OpenVPN实现安全的内网互通

引言

什么是OpenVPN

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/262661cad60947099af9c00aefa0749b.png#pic_center)

维基百科是这么介绍的:OpenVPN是一个用于创建虚拟私人网络加密通道的软件包,最早由James
Yonan编写。OpenVPN允许创建的VPN使用公开密钥、电子证书、或者用户名/密码来进行身份验证。
它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。

[原作者](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E5%8E%9F%E4%BD%9C%E8%80%85&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECEQQAg):
James Yonan

[开发者](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E5%BC%80%E5%8F%91%E8%80%85&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECD8QAg):
OpenVPN 项目 / OpenVPN Inc

[当前版本](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E5%BD%93%E5%89%8D%E7%89%88%E6%9C%AC&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECD4QAg):
: 2.6.9 (2024年2月13日;稳定版本);

[源代码库](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E6%BA%90%E4%BB%A3%E7%A0%81%E5%BA%93&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECEEQAg):
github.com/OpenVPN

[类型](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E7%B1%BB%E5%9E%8B&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECEIQAg):
VPN

[系统平台](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E7%B3%BB%E7%BB%9F%E5%B9%B3%E5%8F%B0&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECEAQAg):

[Windows](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=Windows&stick=H4sIAAAAAAAAAONgVuLQz9U3MCmKt1jEyh6emZeSX14MAFTjqsQWAAAA&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0QmxMoAXoECEAQAw) XP或以上; [OS
X](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=OS+X&stick=H4sIAAAAAAAAAONgVuLQz9U3MDWtLFrEyuIfrBABANwDvJoTAAAA&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0QmxMoAnoECEAQBA) 10.8或以上;
[Android](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=Android&stick=H4sIAAAAAAAAAONgVuLSz9U3MCqvKEkvX8TK7piXUpSfmQIAyAsAJhgAAAA&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0QmxMoA3oECEAQBQ) 4.0或以上;
[iOS](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=iOS&stick=H4sIAAAAAAAAAONgVuLSz9U3MC5PyjE0WcTKnOkfDABeKS5iFAAAAA&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0QmxMoBHoECEAQBg) 6或以上;
[Linux](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=Linux&stick=H4sIAAAAAAAAAONgVuLUz9U3SCuoqipYxMrqk5lXWgEATgerNhUAAAA&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0QmxMoBXoECEAQBw); *BSD;

[网站](https://www.google.com/search?sca_esv=913347e5f16b5bd8&q=openvpn+%E7%BD%91%E7%AB%99&sa=X&ved=2ahUKEwi-
mL_h2oGFAxXAmK8BHfuMCh0Q6BMoAHoECD0QAg):
openvpn.net

安装OpenVPN

  1. 安装客户端
  2. 安装套件

服务端安装OpenVPN、EasyRSA

  1. 使用命令安装OpenVPN
    apt-get install openvpn -y

  2. 获取EasyRSA

wget https://github.com/OpenVPN/easy-
rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz

若无网络,也可以下载之后,再上传到服务器。要是访问github失败,也可以通过百度云下载

百度云链接:https://pan.baidu.com/s/1T3SoiDwsP6cE9UaRXnSjww
提取码:r141
–来自百度网盘超级会员V6的分享

若连接失效,请在评论回复

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/6027cf17e3a4437294a0ce33f672faa7.png#pic_center)

生成证书
server----
  1. 进入EasyRSA-3.1.7,并修改相关参数
[root@aliyun /etc/openvpn]$ cd EasyRSA-3.1.7
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ cp vars.example vars
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ vim vars
...省略部分内容...
# In how many days should the root CA key expire?
# 设置根证书有效期为100年
set_var EASYRSA_CA_EXPIRE       36500

# In how many days should certificates expire?
# 设置服务端证书有效期为10年
set_var EASYRSA_CERT_EXPIRE     3650
...省略部分内容...

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/2ec033f09cb24ec6a14d135dcb4e2639.png#pic_center)
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/8952e15903ac43e1bfa9aadcd212416f.png#pic_center)

  1. 创建新的pki

    [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$./easyrsa init-pki

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/8a14141426b9438abe7a83d20c14e66d.png#pic_center)

  1. 生成CA根证书

    [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa build-ca nopass

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/ff7f9a7dbafd4fd098016377ebba9a08.png#pic_center)

证书文件:/etc/openvpn/EasyRSA-3.1.7/pki/ca.crt

  1. 生成server端证书和私钥

    生成签名请求和私钥

[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req server nopass
# 签发证书
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign server server

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/d17026814bcd483f86433b0564a58321.png#pic_center)
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/0d6eb0b8912e445ea05c500aa77eb4e8.png#pic_center)

  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt

在OpenVPN环境中的EasyRSA工具集中,./easyrsa gen-req./easyrsa build-server-full
这两个命令执行的任务不同,它们分别用于不同的证书管理阶段:

  1. ./easyrsa gen-req [name] :
    • 这个命令是用来生成一个证书签名请求(CSR)和相应的私钥文件。
    • 当你需要为某个实体(如服务器或客户端)创建一个新的证书时,会运行这个命令,并提供一个唯一的名称(例如,vnserver)。
    • 它不会直接生成证书,而是产生一个 CSR 文件,这个文件可以被
      CA(证书颁发机构)用来签发证书,同时也会生成与之对应的私钥文件,私钥由请求者保留并保密。
  2. ./easyrsa build-server-full [name] :
    • 这个命令则是用于在一个步骤中快速创建一个完整的服务器证书链,包括:
      • 生成服务器私钥
      • 创建 CSR
      • 签发服务器证书(由本地或已配置的CA签署)
      • 可能还包括创建DH参数文件或者生成CA证书及相关的中级证书(取决于EasyRSA版本和配置)
    • 相对于单独的gen-req命令,build-server- full提供了一个更便捷的方式,它一步到位地完成了从生成密钥对到获得签名证书的所有流程,特别适用于新建OpenVPN服务器场景。

总结来说,如果你只是想生成一个CSR以便提交给外部CA签名,那么使用gen- req;而如果你想在本地完成整个服务器证书的生成和签名过程,直接使用build-server- full更为方便。在OpenVPN环境中,通常会使用build-server-full来快速创建用于OpenVPN服务的自签名服务器证书。

  1. 生成Diffie-Hellman算法需要的密钥文件

    [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-dh

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/4f2f1559b28a4fdc961fcad33a42855a.png#pic_center)

  • dh: /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem
  1. 生成用于防DDOS攻击和TLS攻击文件

    [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ openvpn --genkey tls-auth ta.key

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/b629c96267204090a428a27346c151d6.png#pic_center)

  1. 复制证书文件到server目录下

    [root@aliyun /etc/openvpn/server]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem /etc/openvpn/server/
    cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req /etc/openvpn/server/
    cp /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key /etc/openvpn/server/
    cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt /etc/openvpn/server/
    cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/server/
    cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/server

client
  1. 生成客户端证书

有几个客户端就需要创建几个证书,tom是我客户端的名称

    [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req tom nopass
[root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign client tom
  • req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req
  • key: /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key
  • crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt
  1. 复制证书到tom目录下
[root@aliyun /etc/openvpn]$ mkdir tom
[root@aliyun /etc/openvpn]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/tom
cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/tom

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/444e40d65b7644128ce9d7a0617172a1.png#pic_center)

配置文件
  1. 生成OpenVPN服务端配置文件
[root@aliyun /etc/openvpn]$ cat > /etc/openvpn/server/server.conf <<-EOF
#端口号
port 1194
#开启TCP协议,关闭UDP协议
proto tcp
#dev tun创建路由隧道,dev tap将创建一个以太网隧道
dev tun
#修改CA证书、服务端证书和服务端私钥key的文件名
ca ca.crt
cert server.crt
key server.key
#Diifle hellman文件指向。如果在建立证书时使用2048的话就用2048
dh dh.pem
#给接入的Client分配的IP地址段,注意不要和服务内网网段重合
server 10.8.0.0 255.255.255.0
#客户端与客户端之间支持通信
client-to-client
#维持客户端和虚拟IP的联系。在OpenVPN重启时,再次连接的客户端依然被分配和以前一样的IP地址
ifconfig-pool-persist ipp.txt
#以下这句使得客户端能访问服务器后面的子网机器。比如服务器子网为172.29.242.142,则添加如下内容
push "route 172.29.242.0 255.255.255.0"
#分别指定发送间隔和接收间隔。用于设置OpenVPN的心跳包。此参数可保持OpenVPN连接的稳定性
keepalive 10 120
#最多允许200个客户端连接
max-clients 200
#为防止遭到DDoS攻击,生成ta.key文件,并拷贝到服务端和每个客户端
#服务端0,客户端1
tls-auth ta.key 0
#设置重新连接时保留密钥。可避免重新连接时重新生成密钥
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#指定OpenVPN输出连接状态的文件,可查看OpenVPN的连接状态
status /etc/openvpn/logs/openvpn-status.log
#记录日志,每次重启OpenVPN后追加log信息
log-append /etc/openvpn/logs/openvpn.log
#重复日志记录限额
mute 20
#指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
verb 3
#和keys连接VPN,一定要打开这个选项,否则只允许一 个人连接VPN
duplicate-cn
#支持密码认证-允许使用自定义脚本
script-security 3
#支持密码认证-指定认证脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env
#支持密码认证-用户密码登陆方式验证
username-as-common-name
EOF
  1. 编写脚本检查文件和密码文件
# 创建认证文件
[root@aliyun /etc/openvpn]$ cat > /etc/openvpn/check.sh <<-EOF
#!/bin/bash

PASSFILE="/etc/openvpn/user_passwd.txt"   #密码文件 用户名 密码明文
LOG_FILE="/etc/openvpn/logs/openvpn-password.log"  #用户登录情况的日志
TIME_STAMP=`date "+%Y-%m-%d %T"`

if [ ! -r "${PASSFILE}" ]; then
    echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
    exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'    ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
    echo "${TIME_STAMP}: User does not exist: username=\"${username}\",password=\"${password}\"." >> ${LOG_FILE}
    exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
    echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
    exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}

exit 1
EOF

# 对check.sh授予执行权限
[root@aliyun /etc/openvpn]$ chmod u+x check.sh

# 创建密码文件
[root@aliyun /etc/openvpn]$ cat > /etc/openvpn/user_passwd.txt <<-EOF
tom 123456
EOF
  1. 服务端开启ip转发

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/7a0715910f0c42e28b18f3e6b0f1b697.png#pic_center)

  1. 启动server端
[root@aliyun /etc/openvpn/server]$ openvpn --config server.conf

客户端安装OpenVPN

  1. 安装OpenVPN
yum install openvpn -y
cd /etc/openvpn
# 将服务端创建的证书文件拉取过来
scp -P 2345 -r root@8.130.96.170:/etc/openvpn/tom ./

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/3da23ecd34a84d139e3e8a05ef6e689d.png#pic_center)

  1. 创建配置文件client.conf
[root@k3s-main openvpn]# cat > /etc/openvpn/tom/client.conf <<-EOF
#指定当前VPN是客户端
client
#使用tun隧道传输协议
dev tun
#使用tcp协议传输数据
proto tcp
#OpenVPN服务器IP地址端口号
remote 8.130.96.170 1194
#指定CA证书的文件路径
ca ca.crt
#指定当前客户端的证书文件路径
cert tom.crt
#指定当前客户端的私钥文件路径
key tom.key
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#不绑定本地特定的端口号
nobind
#通过keepalive检测超时后,重新启动PN,不重新读取keys,保留第一次使用的key
persist-key
#检测超时后,重新启动PN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#生成防御DDos破坏的文件。客户端配置为
tls-auth ta.key 1
#指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
verb 3
#使用用户名密码登录openvpn服务器
auth-user-pass
EOF
  1. 启动客户端
[root@k3s-main tom]# openvpn --config client.conf

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/a27fbf545cc94c1e820f2f1676b1e450.png#pic_center)

  1. 客户端ping服务端测试

![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/5c28d3a7c88441a499951d1ac4540be3.png#pic_center)

问题反馈

若对文中有任何的疑问,或者需要帮助可以通过以下方式进行反馈

  • 直接进行评论或者单独私聊

  • 发送邮件到:mr_xuansu@163.com

更多内容请关注微信公众号:萱蘇的运维日常

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值