使用open***构建安全***

***概述

×××(Virtual PrivateNetwork)虚拟专用网络,是依靠ISP和其他的NSP在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者个人之间提供安全的数据传输隧道服务。在×××中任意两点之间的连接并没有传统专网所需要的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能的点到点的专线技术,所谓虚拟是指***不需要去拉实际的物理线路,而是借用了公共Internet网络来实现。

***的作用

×××功能可以帮助公司远程用户公司的分支机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者是局域网连接,确保数据的加密安全传输和业务访问,对于运维工程师来说,可以连接不同的机房作为局域网,处理相关的业务。

open ***的加密通信原理过程

open ***使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为public key,另一个是private key)对数据进行加密的。对于open ***使用TLS mode,首先server和client要有相同的CA证书,双方通过交换证书验证对方的合法性以决定是否建立***通信,然后使用对方CA把自己目前使用的数据加密方法(类似密钥)加密后发送给对方,由于使用对方的CA加密,所以只有对方CA的对应的private key才能解密该字串,保证此密钥的安全性,并且此密钥定期改变,对于***来说,可能还没有破解出密钥,通信双方已经更换密钥了。

open***的基本信息处理过程

理解了open***的基本概念,我们来做一个小实验来实现open***的功能:

实验

环境

***-server

eth0

IP:172.16.1.163

GW:172.16.1.2

eth1

IP:10.0.0.246

***-client

eth0

IP:10.0.0.247

GW:10.0.0.246(可选)

拓扑

***服务端的配置

同步时间

[root@***-server ~]# ntpdate  pool.ntp.org

[root@***-server ~]# echo '*/5 * * * *  /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1' >>/var/spool/cron/root

[root@***-server ~]# crontab -l -uroot

*/5 * * * * /usr/bin/ntpdatepool.ntp.org > /dev/null 2>&1

安装epel源,open***要在epel中下载安装

[root@***-server ~]#yum -y install epel-release

安装依赖包

[root@***-server~]#yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

安装open***

[root@***-server~]# yum -y install open***

生成Open×××需要的证书

[root@***-server~]# yum -y install easy-rsa    #新版的***需要先下载easy-rsa

[root@***-server~]# cp -a /usr/share/easy-rsa/2.0/*  /etc/open***/

[root@***-server~]# cd /etc/open***/

[root@***-serveropen***]# vi vars   #修改vars配置如下使得生成证书时不用再次输入只需一路回车即可

exportKEY_COUNTRY="CN"

exportKEY_PROVINCE="BJ"

exportKEY_CITY="Beijing"

exportKEY_ORG="***-test"

exportKEY_EMAIL="me@myhost.mydomain"

exportKEY_OU="testdomain"

[root@***-serveropen***]# chmod +x vars     #添加可执行权限

[root@***-serveropen***]# source vars        #执行脚本

NOTE:If you run ./clean-all, I will be doing a rm -rf on /etc/open***/keys

[root@***-serveropen***]# source clean-all   #初始化keys目录并创建所需要的文件和目录

[root@***-serveropen***]# source build-ca    #生成CA证书,用于签发server和client证书,完成后生成ca.crt ca.key index.txt serial文件

[root@***-serveropen***]# source build-key-server server  #生成服务器端密钥

[root@***-serveropen***]# source build-key client   #生成客户器端密钥

[root@***-serveropen***]# source build-dh   #生成Diffie Hellman文件,TLS server 需要使用的一个文件完成后生成dh1024.pem或dh2048.pem文件,大小在配置文件中定义。

编辑open***服务端配置文件

[root@***-server~]# cp /usr/share/doc/open***-2.3.13/sample/sample-config-files/server.conf/etc/open***/   #把配置文件模板拷贝到/etc/open***/

[root@***-serveropen***]# grep -Ev ";|#|^$" server.conf > 1  #去掉空行和注释

[root@***-serveropen***]# cat 1 > server.conf   #输出重定向到server.conf文件

[root@***-serveropen***]# vi server.conf  #编辑如下

port    1194      #监听端口

proto  tcp        #使用的协议

dev     tun        #基于路由的隧道

push "route 10.0.0.0 255.255.255.0"   #open***服务器所在局域网的网段

ca  /etc/open***/keys/ca.crt       #ca证书的路径

cert  /etc/open***/keys/server.crt      #服务器端证书的路径

key  /etc/open***/keys/server.key     #服务器端密钥的路径

dh  /etc/open***/keys/dh2048.pem  #DiffieHellman文件的路径

server  10.8.0.0 255.255.255.0   #配置×××客户端使用的网段,Open×××会自动提供基于该网段的DHCP服务但不能和任何一方的局域网段重复,必须保证唯一

ifconfig-pool-persist ipp.txt    #维持一个客户端和virtual IP的对应表以方便客户端重新连接时可以获得同样的IP

keepalive 10 120    #设置服务端检测的间隔和超时时间 每 10 秒 ping 一次如果 120 秒没有回应则认为对方已经宕机

cipher  AES-256-CBC    #设置OPEN×××密码使用AES-256

persist-key    #通过keepalive检测超时后,重新启动×××,不重新读取keys,保留第一次使用的keys

persist-tun    #通过keepalive检测超时后,重新启动×××,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup

status  open***-status.log     #输出短日志,每分钟刷新一次,以显示当前的客户端

verb  3     #设置日志记录冗长级别

启动OPEN×××服务端

[root@***-server~]# systemctl start open***@server.service

[root@***-server~]# systemctl enable open***@server.service

查看是否获得了一个VIP

[root@***-serveropen***]# ip add show

6:tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UNKNOWN qlen 100

link/none

inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

valid_lft forever preferred_lft forever

配置防火墙和开启内核转发功能

[root@***-server~]# vi /etc/sysctl.conf

net.ipv4.ip_forward= 1

[root@***-server~]# sysctl -p

net.ipv4.ip_forward= 1

[root@***-server~]# firewall-cmd --permanent --add-port=1194/tcp

success

[root@***-server~]# firewall-cmd --permanent --add-masquerade

success

[root@***-server~]# firewall-cmd --reload

success

Window7_64客户端配置

步骤:

  1. 先在win7上安装open***客户端

  2. 把open***服务器的ca.crt,client.crt,client.key,还有模板文件client.conf拷贝到open***的安装目录下的config目录

  3. 修改client.conf如下,然后更改后缀名为client.o***

client         #定义这是一个client,配置从server端pull拉取过来,如IP地址,路由信息之类,Server使用push指令推送过来。

dev    tun      #定义open***运行的模式,这个地方需要严格和Server端保持一致

proto  tcp   #使用的协议

remote  172.16.1.163 1194     #服务端的IP和端口

resolv-retry infinite              #始终重新解析Server的IP地址(如果remote后面跟的是域名),保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址。这样无需人为重新启动,即可重新接入×××

nobind       #定义在本机不邦定任何端口监听incoming数据

persist-key

persist-tun

ca   ca.crt           #定义CA证书文件

cert   client.crt    #定义客户端证书文件

key    client.key    #定义客户端密钥文件

remote-cert-tls server #指定采用服务器校验方式

cipher   AES-256-CBC

verb   3    #设置日志记录冗长级别

验证

启动客户端,尝试连接,成功之后会获得一个IP以及open***服务器推送过来的路由、IP

路由

ping测试open***服务器所在内网的主机是否可以连通

查看服务器端的日志

[root@***-server open***]# cat open***-status.log
Open××× CLIENT LIST
Updated,Thu Jun 22 23:24:26 2017
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client,172.16.1.1:57718,15899,7283,Thu Jun 22 23:23:31 2017
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,client,172.16.1.1:57718,Thu Jun 22 23:23:33 2017
GLOBAL STATS
Max bcast/mcast queue length,0
END

linux客户端配置

下载open***

[root@open***-client~]# yum -y install epel-release

[root@open***-client~]#yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig

[root@open***-client~]#yum -y install open***

拉取在服务端的客户端证书、密钥、CA证书,还有配置文件

[root@open***-client~]#cd /etc/open***/

scp 172.16.1.163:/etc/open***/keys/{client.key,client.crt,ca.crt}  .

scp /usr/share/doc/open***-2.3.13/sample/sample-config-files/client.conf .

[root@open***-client open***]# ll

total 20

-rw-r--r--.1 root root 1724 Dec  7 07:40 ca.crt

-rw-r--r--.1 root root  205 Dec  7 08:14 client.conf

-rw-r--r--.1 root root 5355 Dec  7 07:40 client.crt

-rw-r--r--.1 root root 1704 Dec  7 07:40 client.key

修改配置文件如下

[root@open***-client open***]# cat client.conf

client

dev  tun

proto  tcp

remote 172.16.1.163 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

remote-cert-tls server

cipher AES-256-CBC

以后台方式启动open***客户端

[root@open***-clientopen***]# /usr/sbin/open*** --config /etc/open***/client.conf &

查看进程

[root@open***-clientopen***]# ps -ef|grep open***

avahi       920     1  0 09:07 ?        00:00:00 avahi-daemon: running[open***-client.local]

root       7759  3278  0 09:41 pts/0    00:00:00 /usr/sbin/open*** --config/etc/open***/client.conf

root       7836  3278  0 09:43 pts/0    00:00:00 grep --color=auto open***

验证是否获得一个open***所在网段的IP

[root@open***-clientopen***]# ip add show

6:tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_faststate UNKNOWN qlen 100

link/none

inet 10.8.0.6 peer 10.8.0.5/32 scope globaltun0

valid_lft forever preferred_lft forever

获得的路由

[root@open***-clientopen***]# route -n

10.0.0.0        10.8.0.5        255.255.255.0   UG   0      0        0 tun0

测试连通性

[root@open***-clientopen***]# ping 10.0.0.247

PING10.0.0.247 (10.0.0.247) 56(84) bytes of data.

64bytes from 10.0.0.247: icmp_seq=1 ttl=63 time=3.19 ms

64bytes from 10.0.0.247: icmp_seq=2 ttl=63 time=1.73 ms

64bytes from 10.0.0.247: icmp_seq=3 ttl=63 time=1.63 ms

查看日志

[root@***-server~]# cat /etc/open***/open***-status.log

Open×××CLIENT LIST

Updated,Thu Jun 22 23:39:29 2017

CommonName,Real Address,Bytes Received,Bytes Sent,Connected Since

client,172.16.1.168:36040,5742,6154,Thu Jun 22 23:43:31 2017

ROUTINGTABLE

VirtualAddress,Common Name,Real Address,Last Ref

10.8.0.6,client,172.16.1.168:36040,Thu Jun 22 23:43:31 2017

GLOBALSTATS

Maxbcast/mcast queue length,0

END

增加证书

[root@***-serveropen***]# . vars 执行脚本

[root@***-serveropen***]# . build-key xiaoli 创建证书

[root@***-serveropen***]# ls keys/|grep xiaoli

xiaoli.crt

xiaoli.csr

xiaoli.key

然后把xiaoli.key,xiaoli.crt,还有模板配置文件client.conf拷贝到open***的安装目录下的config目录,把client.conf改名为为xiaoli.o***,如下

吊销证书

[root@***-serveropen***]# . vars 执行脚本

[root@***-serveropen***]# . revoke-full client 吊销证书

Usingconfiguration from /etc/open***/openssl-1.0.0.cnf

RevokingCertificate 02.

DataBase Updated

Usingconfiguration from /etc/open***/openssl-1.0.0.cnf

client.crt:C = CN, ST = BJ, L = Beijing, O = ***-test, OU = testdomain, CN = client, name= EasyRSA, emailAddress = me@myhost.mydomain

error23 at 0 depth lookup:certificate revoked

成功注销某个证书之后,可以打开keys/index.txt文件,可以看到被注销的证书前面,已标记为R

[root@***-serverkeys]# cat index.txt

V       261205114539Z                01     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=server/name=EasyRSA/emailAddress=me@myhost.mydomain

R       261205114553Z       161207153029Z       02     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=client/name=EasyRSA/emailAddress=me@myhost.mydomain

V       261205150854Z                03     unknown         /C=CN/ST=BJ/L=Beijing/O=***-test/OU=testdomain/CN=xiaoli/name=EasyRSA/emailAddress=me@myhost.mydomain

在配置文件中告诉Open×××服务器以后与客户端连接的时候,通过crl.pem文件验证该客户端的证书是否已经被注销。因此,我们需要在服务器端的配置文件加上相关配置然后重启***服务

[root@***-serveropen***]# echo "crl-verify /etc/open***/keys/crl.pem" >>server.conf

[root@***-serverkeys]# systemctl restart open***@server.service

如有纰漏,欢迎指正。

转载于:https://blog.51cto.com/lidaxia/1941285

使用open***构建安全***相关推荐

  1. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  2. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  3. 通过前序遍历和中序遍历构建二叉树 python实现

    前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...

  4. 命名实体识别NER遗留问题----模型构建

    深度学习模型预测实质:训练保存的模型里面参数 整个只有一套参数 不仅保存了训练数据全部的正确信息,而且同字多义的情况下通过其同行的词来判断,虽然参数都是一套但是因为输入的值不同导致计算的结果不同 导致 ...

  5. dataframe构建

    data=[[[0],1]] df = pd.DataFrame(data, columns=['col1', 'col2']) df = pd.DataFrame({'col1':'','col2' ...

  6. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  7. LeetCode简单题之用栈操作构建数组

    题目 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2,3-, n} 中依序读取一个数字. 请使用下述操作来构建目标数组 target : Push:从 lis ...

  8. 通过 DLPack 构建跨框架深度学习编译器

    通过 DLPack 构建跨框架深度学习编译器 深度学习框架,如Tensorflow, PyTorch, and ApacheMxNet,快速原型化和部署深度学习模型提供了强大的工具箱.不幸的是,易用性 ...

  9. Dockerfile构建实践

    Dockerfile构建实践 本文介绍了用于构建有效图像的推荐最佳实践和方法. Docker通过从一个Dockerfile文本文件中读取指令来自动构建映像,该文本文件按顺序包含构建给定映像所需的所有命 ...

  10. DLPack构建跨框架的深度学习编译器

    DLPack构建跨框架的深度学习编译器 Tensorflow,PyTorch和ApacheMxNet等深度学习框架提供了一个功能强大的工具包,可用于快速进行原型设计和部署深度学习模型.易用性通常是以碎 ...

最新文章

  1. 重新启动Office 365迁移任务
  2. oracle快速备份全库,做了两次rman 全库备份,如何快速删除第一次的备份?
  3. 软件设计师-不确定有限自动机到确定有限自动机转换的例子
  4. with在python中啥意思,“with”语句在Python中做什么?
  5. JavaWeb:Tomcat、Servlet
  6. idea 自动添加doc_公共组件需求自动录入TAPD
  7. 怎么打包图片_房产也能批发!澳村庄40栋房打包出售,总价$175万,买了变村长!...
  8. 笔记本cpu温度高怎么办_夏天面团温度高怎么办?几个技巧让面温立马降下来
  9. PS光效插件 DFT 1.1.1.3汉化破解版,比灯光工厂更强大支持PSCC2019
  10. 唯读---图书微服务接口设计(持续更新)
  11. 使用Redis,QQ邮箱模拟验证码验证
  12. Google earth engine(GEE)——LANDSAT8统计不同点的DN值
  13. 计算机电子表格减法公式,excel表格公式怎么操作
  14. 荣耀笔记本linux版硬盘分区,荣耀MagicBook硬盘分区详细教程
  15. (零基础)如何使用python下载哔哩哔哩视频?
  16. 深度 | 巨头都在追逐的眼球追踪技术,究竟能带来什么?
  17. 信息安全——ELGamal数字签名方案的实现
  18. C++实验题8 数组使用(bushi)
  19. 剖析Android移动开发程序员的职业发展之路
  20. 四款最热门的云计算产品

热门文章

  1. 仿百度搜索框支持拼音 输入联想
  2. uni-app实现多选
  3. 关于LINUX系统编程架构问题——4412 camera V4L2 RTMP流工程源码分析
  4. 全基因组完整数据实战
  5. 图书管理有没有必要使用进出库管理系统?
  6. scrapy爬虫之抓取《芳华》短评及词云展示
  7. 乐高机器人linux,乐高机器人作文范文4篇
  8. python 限定类型
  9. 修改el-table表格单元格边框颜色
  10. 华为云IoT智慧物流案例05 | QT应用开发