传输安全与边界防护(Transport Security and Perimeter Protection)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

传输安全与边界防护(Transport Security and Perimeter Protection)
技能目标:
- 了解传输安全和边界防护的基础知识
- 理解加密技术原理和等保相关要求
- 掌握 OpenVPN 配置技巧
- 理解企业边界防护安全框架

4.1 传输安全基础知识

传输安全和边界防护是企业信息化安全体系架构中的主要组成分。传输安全如同保障信
息化系统的血脉传输,边界防护好似企业信息化安全体系的盔甲外衣,因此传输安全和边界
防是企业信息化安全的最基本保障。

4.1.1 传输安全的等保要求

在等保 2.0 的一至四级标准要求中,各级别标准要求差异较大,如下:
一级标准:通信传输(6.1.2.1)
应采用校验技术保证通信过程中数据的完整性。
二级标准:通信传输(7.1.2.2)
应采有校验技术保证通信过程中数据的完整性。
三级标准:通信传输(8.1.2.2)
a.应采用校验技术或密码技术保证通信过程中数据的完整性。
b.应采用密码技术保证通信过程中数据保密性。
四级标准:通信传输(9.1.2.2)
a.应采用密码技术保证通信过程中数据的完整性。
b.应采用密码技术保证通信过程中数据的保密性。
c.应在通信前基于密码技术对通信的双方进行验证或认证。
d.应基于硬件密码模块对重要通信过程进行密码运算和密钥管理。
在以上标准要求中,一、二级标准要求是相同的,三、四级标准要求更加严格,差异较
大。
测评的对象是提供密码技术功能的设备或组件。即需要采用能加密的设备或功能组件,
保障数据传输的完整性和保密性。在身份认证方面,等保四级要求中,首先要求网络传输必
须是加密认证,更高的要求是采用硬件密码模块来保障更高的安全性。 市场上主流的 VPN 产品也都具备了保障数据传输过程中完整 性和保密性的要求。
实现传输安全最基本的要求是加密,因此在学习加密传输之前,首要了解加密技术。

4.1.2 常见的加密技术

加密技术常见的加密算法有三种:对称加密,非对称加密和哈希算法。

1.对称加密

对称加密算法使用同一个密钥对信息进行加密和解密,因此也称作单密钥加密。当密钥
很长时,对称加密难以被破解。对称密钥算法主要被用于执行大数据量的加密,并且只提供
机密性保障,如图 4.1 所示。
4.1 对称加密原理
对称密钥密码学也被称为秘密密钥密码学或私有密钥密码学。常见的算法有:DES
3DESAESRC2RC4RC5 Blowfish 等。
优点:
(1)对称加密效率高、加解密速度快
有人做过对称加和非称加密的实验,对称加密算法 AES CBC 模式和非对称加密算法
RSA 256 相对比,相同的硬件条件下对同一数据进行加密,对称加密比非对称加密,快大
1500 倍。
(2)算法简单、计算量小、系统开销小
对称加密相比非对称加密,算法上更简单。因此计算量小,对系统的开销小,消耗的资
源也少。
3)适合加密大量数据
对称加密算法因为效率高速度快,所以更适合于加密大数据量的数据。
缺点:
(1)密钥的管理和分发非常困难,不够安全。
在数据传送前,发送方和接收方必须商定好秘钥,而且双方都必须要保存好秘钥。如果
其中的任意一方的秘钥被泄露,那么加密信息也就不安全了。
(2)用户数量多时,需要管理的密钥数量庞大,不利于扩展
用户间彼此都使用对称加密算法加密通信时,都需要使用其他人不知道的唯一密钥,这
会使得收、发双方所拥有的密钥数量巨大,密钥管理成为双方的负担。比如:N 个人要彼此
加密通信,共需要的密钥数量是 N*(N-1)/2100 个人彼此通信就需要 4950 个密钥。
(3)对称加密,无法实现不可否认性。
非对称加密可以通过私钥签名,公钥验证身份的方式,实现不可否认性。对称加密无法
实现不可否认性。

2.非对称加密

非对称加密是指加密和解密使用不同的秘钥。一般加密用公钥,解密用私钥。公钥加密的
信息,只有私钥才能解密。私钥加密的信息(比如用于签名),也只有公钥才能解密。私钥
只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对
密钥中的一个进行加密,而解密则需要另一个密钥。
常见的数字证书即是非对称加密的一个重要应用,而区块链技术的高安全性也是主要利
用非对称加密技术来实现的。非对称加密原理如图 4.2 所示。
4.2 非对称加密原理
优点:
(1)安全性更高,公钥分发管理更加简单容易。
公钥只用于加密数据无法解密,因此可以公开发放,无安全风险。私钥由自己保存,用
于解密公钥加密过的数据。不需要发送给对方,因此不存在传递过程的风险。
(2)非对称加密提供了完整性、身份认证和不可否认性功能。
通过私钥签名的方式,用公钥可以解密进行身份认证,同时也实现了不可否认性的功能。
(3)扩展更容易。
因为公钥用于加密,解密用的私钥自己保管不需要分发。因此,非对称加密用户只需要
一对密钥(公钥和私钥)就可以与所有用户进行加密数据传输。
当用户间彼此都需要采用非对称方式加密传输数据时,需要管理的密钥数量是 N*2
比如:100 个人要彼此加密通信,共需要的密钥数量就是 200 个。而采用对称加密算法
需要的密钥数量是 4950 个。
缺点:
加密和解密花费时间长、速度慢,适合对少量数据进行加密。
常见的算法有:RSAElgamal、背包算法、RabinDHECC(椭圆曲线加密算法)
等。
对称加密和非对称加密,各有优缺点。对称加密算法相比非对称加密算法来说,加解密
的效率要高得多。但是缺点是密钥交换的安全性不容易保障。非对称加密安全性好,但是加
密速度慢效率低。所以在实际的网络环境中,常常将二者混合使用。
前面章节中介绍的使用 SSL(Secure Sockets Layer 安全套接层)协议实现的 https 加密传
输和身份认证,即是对称加密和非对称加密混合应用的典型应用场景。正是采用对称和非对
称相结合的技术,才使得 https 加密传输,既保证安全性又能提供较好的加密性能和速度,
所以才被广泛使用。

3.哈希算法

哈希(hash)算法又称散列算法,通过 hash 算法,可以将任意长度的信息转换成一个
固定长度的哈希值。通常使用十六进制值来表示转换后的信息。
比如:通过在线的哈希工具计算加密的文本如表 4-1 所示。
4-1 MD5 哈希加密举例
文本哈希值
我和我的祖国9257e0ed1bb76e33af4917c46ff482b8
明天会更好42122fdc803dbffb24be1ad94104d8f8

哈希值有时也被称作消息摘要、散列、散列值、散列总数、CRC 、指纹、校验和、数

ID 等。
哈希算法的特点:
(1)无重复也称为“无冲突”
经过哈希计算后得到的哈希值不同,称之为无冲突,这意味着产生相同散列值的两条
消息是极为困难的。
(2)不可逆
哈希算法是单向的,从哈希值反向推导出原始信息是非常困难的。
利用哈希算法的这两个特点,主要用于以下领域:
(1)数据完整性校验
可以将原始数据和经过哈希算法得到数据一块发送给对方,对方收到数据之后,对数据
使用相同的哈希算法进行计算。如果得到的哈希值和对方发过来的相同,那么就说明数据没
有经过篡改。因为哈希算法有无碰撞的特性,如果数据中途被篡改,那么得到的哈希值必
然不同。
(2)数字签名
一般,先对原始数据进行哈希处理,然后对处理后的数据使用私钥进行加密,也称签名。
将原始数据和加密后数据发送给接收方。接收方使用公钥解密,再对数据进行哈希处理进行
比较,验证发送方的身份。这样,可以防范一些中间人攻击篡改伪造数据的行为,也实现了
不可抵赖性。
以下是常见的哈希算法:

(1)MD5

MD5 90 年代初由 MIT 的计算机科学实验室和 RSA Data Security Inc 发明的,一种
安全散列函数。经 MD2MD3 MD4 发展而来。
MD5 512 位分组来处理输入的信息,但是使用 4 轮计算生成长度为 128 位的散列值。
这个算法先对消息进行填充,确保消息的长度比 512 比特的倍数短 64 位。
MD5 算法显著降低了哈希值的生成速度。但近年来的密码分析攻击己经证明 MD5
议会产生冲突,这表明它不再是一种安全可靠的单向函数算法。

(2)SHA-1

安全散列算法(Secure Hash AlgorithmSHA)及后来衍生的及随后衍生的SHA-l
SHA-2 ,是由美国国家标准和技术协会阴1ST)开发的政府标准的散列函数。
SHA-1 算法输入以 512 位数据块为单位处理,产生 160 比特的消息摘要作为输出。
SHA-l 可以接受任意长度的输入数据(实际上在此算法中输入值的长度的上限大约是
2097 1 52TB),并且生成一个 160 位的散列值(消息摘要)。SHA-l 算法输入以 512 位分
组(数据块)为单位处理。因此,如果消息的长度不是 512 的倍数,那么 SHA 算法就会用
附加的数据填充消息,直至长度达到 512 的下一个最大倍数。
近年来的密码分析攻击己证明 SHA-l 算法中存在缺陷,这带来 SHA-2 算法的出现,
SHA-2 具有下列 4 种变体:
SHA-256 处理 512 位的分组,生成一个 256 位的散列值。
SHA-224 处理 512 位的分组,使用删减版本的 SHA-256 散列算法生成一个 224
位的散列值。
SHA-512 处理 1024 位的分组,生成一个 512 位的散列值。
SHA-384 处理 1024 位的分组,使用删减版本的 SHA-5 12 散列算法生成一个
384 位的散列值。
4-2 是常见的哈希算法及其哈希值特征。
4-2 常见哈希算法及哈希值特征
算法名称哈希值长度
HAVAL(一种 MD5 变种)128 、160 192 224、256
MD2128
MD4128
MD5128
SHA-1160
SHA-224224
SHA-256256
SHA-384384
SHA-512512

技术总是不断进步的。前面提到的哈希算法“无重复不可逆的特性,是相对的概念,

而不是绝对的结果。比如:
MD5 算法曾被认为即使采用最快的巨型计算机,也要运算 100 万年以上才能破解;而
SHA-1 算法因为安全性更佳,早在 1994 年就被推荐给美国政府和金融系统采用,是美国政
府曾经应用最广泛的密码算法。然而人类的智慧又总在不断突破一个又一个极限,MD5
SHA-1 算法在 2004 ~2005 年间,先后被我国的密码学专家王小云教授破解。王小云教授
也因此获得 2019 未来科学大奖数学与计算机科学奖,被称为中国版诺贝尔奖。
SHA-2 系列算法虽然目前是安全的,但将来随着量子计算机等新技术的出现,也有被
打破的可能性。预计到那个时候,也会诞生更加安全的加密算法。科学技术总是在一次次突
破中,向前进步和飞跃。
保障数据的传输安全,会综合应用到以上这些安全加密技术。下面介绍的在企业中应用
IPsec VPN SSL VPN 技术,即是综合应用了以上几种加密算法,实现的加密传输,保
障数据安全。

4.1.3 IPsec VPN 技术

IPSec VPN 是基于 IPSec 框架实现的 VPN 技术。
IPSecInternet Protocol Security)框架是 IETFInternet Engineering Task Force制定的一组开放的网络安全协议。它并不是一个单独的协议,而是一系列为 IP 网络提供安
全性的协议和服务的集合。
IPSec 框架是用来解决 IP 层即网络层安全性问题的技术。其主要包括的安全协议有:
AHAuthentication Header)和 ESPEncapsulating Security Payload)、密钥管理交换
协议 IKEInternet Key Exchange),以及用于网络认证及加密的一些算法等。
IPSec 框架如图 4.3 所示。
4.3 IPsec 框架结构图
采用 DES3DESAES 算法实现数据加密;采用 MD5(消息摘要)、SHA(安全散
列算法)哈希算法技术解决数据完整性校验。
IPSec VPN 有两种封装模式:传输模式和隧道模式。数据封装指将 AH ESP 协议相
关的字段插入到原始 IP 数据包中,以实现对报文的身份认证和加密。
传输模式:不会改变原始报文的 IP 头,只会在原始 IP 头后面封装一些 IPSec 协议。
隧道模式:会在原始IP报文头前面添加新的IP头,并且在新的IP头后面封装一些IPSec
协议。
两种模式比较:安全性上,隧道模式优于传输模式,因为隧道模式可以完全地对原始 IP
数据包进行认证和加密,隐藏客户机的私网 IP 地址,而传输模式中的数据加密是不包括原
IP 报头的。从性能上来说,传输模式优于隧道模式,隧道模式要增加一个额外的 IP 头,
而传输模式没有此操作,传输模式更节约带宽。
IPsec VPN 的封装协议主要有封装安全载荷协议(Encapsulating Security Payload
ESP)、认证头协议(Authentication HeaderAH)两种。其中 AH 只支持认证不支持加
密,因此,在实际场景中,以 ESP 协议封装应用更为广泛,如表 4-3 所示。
表 4-3 AH ESP 对比
安全特性AHESP
数据完整性校验支持(验证整个 IP 报文)支持(不验证 IP 头)
数据源验证支持支持
数据加密不支持支持
防报文重放攻击支持支持
NAT 穿越不支持支持

IPSec VPN 通过加密与验证等方式,保障了用户业务数据在 Internet 中的安全传输。

IPSec VPN 主要的安全特性有:
数据来源验证:接收方验证发送方身份是否合法。
数据加密:发送方对数据进行加密,以密文的形式在 Internet 上传送,接收方对接
收的加密数据进行解密后处理或直接转发。
数据完整性校验:接收方对接收的数据进行验证,以判定报文是否被篡改。
抗重放:接收方拒绝旧的或重复的数据包,防止恶意用户通过重复发送捕获到的数
据包所进行的攻击。
NAT 穿越:NAT 技术的出现节省了 IP 地址资源,但对于 VOIP 等一些应用层协议,
在通过 NAT 网络互联时会遇到障碍。IPSec NAT 穿越功能使通过 VPN 互联的
两端更接近于点到点直接连接,满足 VOIP 等应用层协议产品的互通,成功穿越
NAT 网络。
IPSec VPN 可以用于站点到站点连接和远程访问的使用场景,其中站点到站点的使用
方式更为普遍。站点到站点连接方式,如图 4.4 所示。
4.4 IPsecVPN 使用场景
对于远程访问,使用场景 SSL VPN 更具有优势。

4.1.4 SSL VPN 技术

SSL VPN 技术的出现,填补了 IPsec VPN 技术的一些不足。

1. IPsec VPN 存在的不足

(1)访问控制不够细致。
由于 IPsec 是在网络层实现的,对 IP 报文的内容无法识别,因而不能控制高层应用的
访问请求。随着企业经营模式的改变,需要满足员工远程办公的需要,有时也可能需要满足
合作伙伴企业计算机的远程接入需求。因此,需要实现比较详细的访问权限的控制。IPsec
VPN 难以满足这种需求。
(2)IPsec 接入方式比较单一
IPsec VPN 适合于站点到站点的固定连接方式,比如:总公司与分公司之间,企业与
合作伙伴之间等。IPsec 虽然也支移动办公远程访问的使用方式,但是接入方式比较单一,
一般用于 PC 端以 C/S 方式接入,如果想使 Web 方式接入,同时支持手机等多种移动端,
IPsec VPN 难以满足此类需求。
2. SSL VPN 的优点
SSL VPN 是以 HTTPS 为基础的基于 Web 方式访问的 VPN 技术,它利用 SSL 协议提
供的基于证书的身份认证、数据加密和消息完整性验证机制,为用户远程访问公司内部网络
提供了安全保证。
SSL VPN 具有如下优点:
1)支持 Web 方式仿问。不需要安装客户端软件,接入更方便。
2)支持各多种应用协议。SSL 协议位于传输层和应用层之间,可以支持多种上层应
用程序。
3)支持多种认证方式。SSL VPN 网关支持多种用户认证方式,比如:支持普通的账
户密码认证,支持硬件令牌认证,同时还支持 USB Key 等多种认证方式。
4)支持细粒度的资源访问控制。SSL VPN 对上层应用程序及资源实现细粒度的访问
控制,实现了外网用户对内网资源的受控访问。
SSL VPN 主要用于远程访问的使用场景,弥补了 IPsec VPN 在这方面的不足。
4.5 展示了在银行类企业里 SSL VPN 应用的典型场景。
4.5 SSL VPN 的典型应用场景
从图 4.5 中可以看到,移动办公人员和分部员工可随时随地连入企业办公网络,同时
SSL VPN 还支持手机等智能终端设备。

4.1.5 OpenVPN 软件介绍

OpenVPN 是一个开源的采用 SSL 技术实现的 VPN 技术产品,但它并不是一个基于
Web VPN 软件。与传统的 SSL VPN 产品有所不同,它是一个基于 OpenSSL 库的应用
VPN 技术。和传统 VPN 相比,它的优点是既有 SSL 加密的安全性,又简单易用;能
SolarisLinuxOpenBSDFreeBSDNetBSDMac OS X Windows 上运行,并
包含了许多安全性的功能。
1.OpenVPN 技术原理
OpenVPN 的技术核心是虚拟网卡和 SSL 协议实现。
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网
卡,可以像其它网卡一样进行配置。虚拟网卡在很多的操作系统下都有相应的实现,这也是
OpenVPN 能够跨平台一个很重要的理由。
OpenVPN 的服务器和客户端支持 TCP UDP 两种连接方式,只需在服务端和客户端
预先定义好使用的连接方式(TCP UDP)和端口号,客户端和服务端在这个连接的基础
上进行 SSL 握手,OpenVPN 将虚拟网上的网段、地址、路由发送给客户端。连接成功后,
客户端和服务端建立起 SSL 安全连接,客户端和服务端的数据都流入虚拟网卡做 SSL 的处
理,再在 TCP UDP 的连接上从物理网卡发送出去。

2.OpenVPN 技术特点

1OpenVPN 所有的通信都基于一个单一的 IP 端口,互联网数字分配机构(Internet
Assigned Numbers AuthorityIANA)指定给 OpenVPN 的官方端口为 1194
2OpenVPN 默认且推荐使用 UDP 协议通讯,同时 TCP 也被支持。在选择协议时候,
需要注意两点间的网络质量状况,如果有高延迟或者丢包较多的情况,应选择 TCP 协议作
为底层协议。由于 UDP 是无连接协议,不提供端到端的确认和重传功能。由于在网络质量
差的环境下,需要依赖隧道上层的协议进行重传,因此会导致传输效率低下。
3OpenVPN 连接能通过大多数的代理服务器,并在 NAT 的环境中很好地工作。
4OpenVPN 服务器端具有向客户端推送网络配置信息的功能,这些信息包括:IP
地址、路由设置等。
5OpenVPN 提供了两种虚拟网络接口:通用 Tun/Tap 驱动。通过它们可以建立三层
IP 隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据
可通过 LZO 算法压缩。
6OpenVPN 使用通用网络协议(TCP UDP)的特点使它成为 IPsec 等协议的理
想替代,尤其是在 ISPInternet service provider)过滤某些特定 VPN 协议的情况下。

4.2 使用 OpenVPN 实现加密通信

本实验使用开源的 VPN 软件 OpenVPN 搭建实验环境,实现加密通信,保障传输安全。
4.2.1 实验环境介绍
1.实验目标
通过在 VPN Server 配置 OpenVPN 服务,VPN Client 使用客户端软件登录 VPN 后,
能够与内网 Web Server 通信,且通信采用证书加密技术实现加密传输。
2.实验环境配置
完成本实验的测试服务器角色及配置信息如表 4-4 所示。
4-4 实验环境配置信息
角色IP 地址操作系统软件
VPN Server
外网卡:192.168.190.132/24

 

内网卡:192.168.100.11/24
CentOS7openvpn.x86_64 0:2.4.8-1.el7
Web Server192.168.100.12/24CentOS7Apache2.4.6
VPN Client192.168.100.12924Windows 10openvpn-install-2.4.8-I602-Win10
虚拟化主机Windows 10VMware Workstation 15 Pro

3.实验环境拓扑图
本实验 VPN Server 的外网卡在 VMware 中配置为默认 NAT 模式,内网卡配置为仅主
机模式;VPN Client 网卡在 VMware 中配置为默认 NAT 模式;Web Server VMware
配置为仅主机模式。VPN Client VPN Server 外网卡在同一网段,Web Server VPN
Server 内网卡在同一网段。
4.6 是本章实验环境的拓扑图。VPN Server 采用双网卡配置,外网卡与 VPN Client
相通,内网卡与内网 Web Server 相通。而 VPN Client Web Server 之间在没有连接 VPN
的情况下,无法通信。
4.6 实验环境拓扑图
注意事项:
1)本案例中,不能用宿主机作为 VPN Client 角色,用宿主机会导致能登录但与 VPN
Server 不通信的故障。VPN Client VPN Server 都用虚拟机才能够成功。
2)在真实环境下 openVPN 外面会有防火墙,需要将 VPN Server IP 地址映射到
公网。VPN Server 可以采用单网卡配置。本实验采用双网卡是在没有防火墙的情况下模拟
实验效果。

4.2.2 实验环境部署

本实验过程,首先需要安装 OpenVPN2.4.8 Easy-RSA 程序包等服务器端程序,然
后创建 CA 并为服务器端申请并安装证书;再安装客户端程序,为客户端申请并安装证书;
最后进行客户端连接测试并调整配置防火墙,完成实验内容。

1.安装编译环境和依赖包

使用下面的命令安装 OpenVPN 运行环境依赖的关联程序包。
[root@localhost ~]# yum install -y gcc epel-release lzo-devel pam-devel lz4-devel
openssl-devel systemd-devel sqlite-devel
___________________________________________________________________
下面介绍 yum 命令中的参数。
 gccGNU 编译器套件(GNU Compiler Collection)包括:CC++Objective-C
FortranJavaAda Go 语言前端等。
epel-release:用于自动配置 yum 仓库。
lzo-develLZO 是一个用 ANSI C 语言编写的无损压缩库。它能够提供非常快速的压
缩和解压功能。lzo-devel LZO 的编译依赖包。
pam-develPAM(可插入认证模块)编译依赖包。
lz4-devellz4 解压缩编译依赖包。
openssl-develOpenSSL 源码开放的 SSL(安全套接层协议)软件库包。openssl-devel
OpenSSL 的编译依赖包。
systemd-develSystemd 是系统管理守护进程,systemd-devel Systemd 的编译依
赖包。
sqlite-develSQLite 是一款轻型的数据库,sqlite-devel 是其编译依赖包。
安装完成,结果如下所示。
......
//省略部分内容
Installed:
epel-release.noarch 0:7-11
lz4-devel.x86_64 0:1.7.5-3.el7
lzo-devel.x86_64 0:2.06-8.el7
openssl-devel.x86_64 1:1.0.2k-19.el7
pam-devel.x86_64 0:1.1.8-22.el7
sqlite-devel.x86_64 0:3.7.17-8.el7_7.1
systemd-devel.x86_64 0:219-67.el7_7.4
......
//省略部分内容
Complete!
______________________________________________________________________

2.安装 OpenVPN 和 Easy-RSA

接下来,安装 OpenVPN2.4.8 Easy-RSA 程序包。Easy-RSA 主要用于生成证书。
命令如下:
[root@localhost ~]# yum install -y openvpn easy-rsa
______________________________________________________________________
安装完成,结果如下所示:
......
//省略部分内容
Installed:
easy-rsa.noarch 0:3.0.6-1.el7
openvpn.x86_64 0:2.4.8-1.el7
Dependency Installed:
pkcs11-helper.x86_64 0:1.11-3.el7
Complete!
______________________________________________________________________

3.准备目录和复制配置文件

完成前面的安装以后,还需要创建目录,复制一些必要的文件。
[root@localhost~]# mkdir /etc/openvpn/easy-rsa
[root@localhost~]# cp /usr/share/doc/easy-rsa-3.0.6/vars.example /etc/openvpn/easy-rsa/vars
[root@localhost~]# cp -r /usr/share/easy-rsa/3.0.6/* /etc/openvpn/easy-rsa/
[root@localhost~]#
cp
/usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf
/etc/openvpn/
[root@localhost~]#
cp
/usr/share/doc/openvpn-2.4.8/sample/sample-config-files/client.conf
/etc/openvpn/
_____________________________________________________________________________下面编辑 vars 文件。vars 文件保存着 Easy-RSA 生成证书的一些参数信息。如下所示:
[root@localhost~]# vi /etc/openvpn/easy-rsa/vars
//省略部分内容,填写粗体字部分,生产环境根据实际情况填写
set_var EASYRSA_REQ_COUNTRY "CN" //国家
set_var EASYRSA_REQ_PROVINCE "Beijing" //地区
set_var EASYRSA_REQ_CITY "Beijing" //城市
set_var EASYRSA_REQ_ORG "KGC" //组织
set_var EASYRSA_REQ_EMAIL "vpnadmin@test.com" //邮箱
set_var EASYRSA_REQ_OU "IT" //拥有者
______________________________________________________________________

4.初始化 pki 环境和创建 CA

初始化 pki 环境和创建 CA 的操作步骤如下。
(1)执行初始化,在 /etc/openvpn/easy-rsa/目录下执行下面命令,结果如红框中所示,
代表初始化完成。
[root@localhost ~]# cd /etc/openvpn/easy-rsa/
[root@localhost easy-rsa]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki
__________________________________________________________________
(2)创建 CA 和生成 CA 证书,CA 证书用于验证客户端证书是否合法。执行如下命令,
依次输入密码和 Common Name,结果如红框中所示,CA 证书创建完成。
[root@localhost easy-rsa]# ./easyrsa build-ca
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Enter New CA Key Passphrase:
//此处输入 CA Key 密码,本例为 openvpn,生产环境须足够复杂
Re-Enter New CA Key Passphrase:
//再次输入 CA Key 密码
Generating RSA private key, 2048 bit long modulus
....................................................+++
....................................................................+++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:openvpn-ca //输入 CA 通用名
称,本例 openvpn-ca
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt
__________________________________________________________________
至此,完成 CA 创建,并生成了 CA 证书。

5.创建请求申请服务器证书

创建 CA 并生成证书以后,要生成服务端请求文件和私钥。执行如下命令,过程要输入
Common Name。执行结果如下面红框中所示。注意:不要与前面创建 CA 通用名称重复。
[root@localhost easy-rsa]# ./easyrsa gen-req server nopass
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 2048 bit RSA private key
.................+++
..................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/server.key.YuGpjQtKoT'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:openvpn-server
//输入通用名称,
注意不要与前面 CA 的通用名称重复,本例为 openvpn-server
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/server.req
key: /etc/openvpn/easy-rsa/pki/private/server.key
_________________________________________________________________
服务器证书请求文件生成后,要签发服务器证书。签发服务器证书执行如下命令,中间
需要确认证书的“CommonName”是否正确,确认无误后输入 yes,接着输入前面创建的 CA
Key 密码,执行完成后结果,如下面红框中所示,已创建服务端证书文件。
[root@localhost easy-rsa]# ./easyrsa sign server server
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 1080 days:
subject=
commonName
= openvpn-server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
//输入 yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
//输入前面 CA Key 密码
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName
:ASN.1 12:'openvpn-server'
Certificate is to be certified until Mar 14 05:02:28 2023 GMT (1080 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /etc/openvpn/easy-rsa/pki/issued/server.crt_________________________________________________________________
至此,服务器证书申请和创建已完成。

6.创建 Diffie-Hellman 协议

现在开始创建 Diffie-Hellman 协议,确保 Key 可以穿越不安全网络。
Diffie-Hellman 是一个密钥交换协议,称为 Diffie-Hellman 密钥交换协议/算法,也是一
种确保共享 KEY 安全穿越不安全网络的方法。
执行命令如下,结果如下面红框中所示,代表创建完成。
[root@localhost easy-rsa]# ./easyrsa gen-dh
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.......................................................................................+........................+.........+................................
...........................................+.........................................................................................................................
........................................................................+............++*++*
DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem
_________________________________________________________________

7.生成 ta 密钥文件

现在,需要生成 ta 密钥文件,ta.key 用于防 DDos 攻击、UDP 淹没等恶意攻击。执行
如下命令。
[root@localhost easy-rsa]# openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
___________________________________________________________________
至此,服务器证书以及服务器端的 Key(密钥)全部创建完成。

8.创建客户端证书和 Key

首先创建保存客户端证书等数据的目录,然后执行 Easy-RSA 初始化,再生成客户端
证书请求文件和私钥,执行如下命令,结果如下面红框中所示。
[root@localhost easy-rsa]# mkdir /root/client
[root@localhost easy-rsa]# cd /root/client
[root@localhost easy-rsa]# cp -r /usr/share/easy-rsa/3.0.6/* ./
[root@localhost easy-rsa]# ./easyrsa init-pki
//执行初始化
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /root/client/pki
[root@localhost easy-rsa]# ./easyrsa gen-req client
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating a 2048 bit RSA private key
.........................+++
...............+++
writing new private key to '/root/client/pki/private/client.key.Sv3TxDV4Pa'
Enter PEM pass phrase:
//输入客户端证书密码,本例中为 client。生产环境密码要足够复杂。
Verifying - Enter PEM pass phrase:
//再次输入客户端密码
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client]:client //输入通用名称,本例中为 client,
生产环境根据自身需要输入Keypair and certificate request completed. Your files are:
req: /root/client/pki/reqs/client.req
key: /root/client/pki/private/client.key
___________________________________________________________________
接着,导入证书请求文件 client.req,执行命令如下:
[root@localhost client]# cd /etc/openvpn/easy-rsa/
[root@localhost easy-rsa]# ./easyrsa import-req /root/client/pki/reqs/client.req client
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
The request has been successfully imported with a short name of: client
You may now use this name to perform signing operations on this request.
_____________________________________________________________________________
再执行如下命令,签发证书。执行结果如下面红框中所示,代表客户端证书已创建完成。
[root@localhost easy-rsa]# ./easyrsa sign client client
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a client certificate for 1080 days:
subject=
commonName
= client
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
//输入前面的 CA Key 密码
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName
:ASN.1 12:'client'
Certificate is to be certified until Mar 14 06:28:04 2023 GMT (1080 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /etc/openvpn/easy-rsa/pki/issued/client.crt
___________________________________________________________________
至此客户端证书创建已完成。

9.编辑修改配置文件

使用下面的命令将生成的服务器端证书相关文件复制到相应的位置。
[root@localhost easy-rsa]# cp pki/ca.crt /etc/openvpn/
[root@localhost easy-rsa]# cp pki/private/server.key /etc/openvpn/
[root@localhost easy-rsa]# cp pki/issued/server.crt /etc/openvpn/
[root@localhost easy-rsa]# cp pki/dh.pem /etc/openvpn/
[root@localhost easy-rsa]# cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/
___________________________________________________________________
再使用下面的命令将生成的客户端证书相关文件复制到相应的位置。
[root@localhost easy-rsa]# cp ./pki/ca.crt /root/client/
[root@localhost easy-rsa]# cp ./pki/issued/client.crt /root/client/
[root@localhost easy-rsa]# cp /root/client/pki/private/client.key /root/client/
[root@localhost easy-rsa]# cp /etc/openvpn/easy-rsa/ta.key /root/client/
[root@localhost easy-rsa]# cp /etc/openvpn/client.conf /root/client/
___________________________________________________________________
需要编辑服务端配置文件,执行如下命令编辑 server.conf 配置文件。修改前可先备份
server.conf
[root@localhost easy-rsa]# vim /etc/openvpn/server.conf
//需要编辑修改的关键字段,如下:(配置文件中#号和;号都是注释,注释即为未开启)
;local a.b.c.d //设置本地监听 IP,默认是注释状态,即在所有 IP 上监听
port 1194
//默认使用 1194 端口,可以根据需要修改,实验环境可保持默认
proto udp
//默认使用 udp 端口,也可使用 TCP 端口,保持默认
dev tun
//tun 为路由模式,默认为 tun 模式;也可设为 tap 桥接模式,建议为 tun
ca /etc/openvpn/ca.crt //设定 CA 证书路径,CA 证书用于验证客户端证书是否合法
cert /etc/openvpn/server.crt //设定服务器证书路径
key /etc/openvpn/server.key
//服务器证书对应的私钥路径,此私钥须妥善保管
dh /etc/openvpn/dh.pem
//Diffie-Hellman 文件路径
server 10.8.0.0 255.255.255.0//设定 VPN 子网,用于客户端获取 IP,服务器默认 10.8.0.1
ifconfig-pool-persist ipp.txt //用于维护客户端 IP,重起后仍然获得同一 IP,默认已开启
push "redirect-gateway def1 bypass-dhcp" //将客户端网关重定向的 VPN 服务器,去掉注释开启
push "dhcp-option DNS 114.114.114.114" //设定为客户端推送的首选 DNS 地址,根据实际修改
push "dhcp-option DNS 202.106.0.20"//设定为客户端推送的备用 DNS 地址,根据实际修改
;client-to-client //设定客户端到客户端通信,默认为注释关闭状态,即客户端彼此不通信
keepalive 10 120 //客户端保持活动时间,默认每 10 ping 一次,120 秒无回应代表已断开
tls-auth ta.key 0 //ta 密钥设置,服务器端为 0,客户端设为 1ta.key 须妥善保管
cipher AES-256-CBC //设置加密参数,保持默认即可
comp-lzo //对数据进行压缩,服务器和客户端要保持一致
max-clients 100 //允许客户端的最大并发边接数,默认为 100
persist-key
//下面两项为持久化选项,避免重起后某些资源无法访问,保持默认即可
persist-tun
status openvpn-status.log
//定期把 openvpn 的一些状态信息写到文件中
log /var/log/openvpn.log //默认为注释状态,可手工启用;每次重启后删除原日志
;log-append openvpn.log //默认为注释状态,不必启用;仅在有需要的情况下临时使用
verb 3 //相当于 debug level,保持默认即可
explicit-exit-notify 1 //通知客户端当服务器重新启动时,可以自动重连,保持默认即可。
___________________________________________________________________
完成以上配置后,OpenVPN 服务器端配置已完成,可启动测试。

10.启动 OpenVPN 服务

执行以下命令启动 OpenVPN 服务,,执行结果如下红框中所示,表示已成功启动
OpenVPN 服务。
[root@localhost easy-rsa]# openvpn /etc/openvpn/server.conf &
[1] 16201
......
//省略部分内容
Sun Mar 29 17:45:20 2020 ROUTE_GATEWAY 192.168.190.2/255.255.255.0 IFACE=ens33
HWADDR=00:0c:29:65:0a:c2
Sun Mar 29 17:45:20 2020 TUN/TAP device tun0 opened
Sun Mar 29 17:45:20 2020 TUN/TAP TX queue length set to 100
Sun Mar 29 17:45:20 2020 /sbin/ip link set dev tun0 up mtu 1500
Sun Mar 29 17:45:21 2020 /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
Sun Mar 29 17:45:21 2020 /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
Sun Mar 29 17:45:21 2020 Could not determine IPv4/IPv6 protocol. Using AF_INET
Sun Mar 29 17:45:21 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Sun Mar 29 17:45:21 2020 UDPv4 link local (bound): [AF_INET][undef]:1194
Sun Mar 29 17:45:21 2020 UDPv4 link remote: [AF_UNSPEC]
Sun Mar 29 17:45:21 2020 MULTI: multi_init called, r=256 v=256
Sun Mar 29 17:45:21 2020 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Sun Mar 29 17:45:21 2020 IFCONFIG POOL LIST
Sun Mar 29 17:45:21 2020 Initialization Sequence Completed
__________________________________________________________________
如下所示,再次执行 netstat 命令检查端口状态,发现 udp 1194 端口已经处于监听
状态;再次执行 ps -ef 命令,也可观察到相关服务进程。
[root@localhost openvpn]# netstat -an | grep 1194
udp
0
0 0.0.0.0:1194
0.0.0.0:*
unix 3
[ ]
STREAM
CONNECTED
41194
[root@localhost ~]# ps -ef | grep openvpn
root
2461
1 0 18:14 ?
00:00:00 /usr/sbin/openvpn --cd /etc/openvpn/
--config server.conf
root
2520
2145 0 18:14 pts/0
00:00:00 grep --color=auto openvpn
___________________________________________________________________
确定服务可正常启动后,还需要将 openvpn 服务设置为开机启动。设置前,要检查并
关闭 SeLinux。如果 SeLinux 为启用状态,则会导致 openvpn 服务开机启动设置失败。
执行如下命令,检查并关闭 Selinux
[root@localhost ~]# getenforce
//查看 Selinux 当前状态
Enforcing
//强制模式,代表 Selinux 当前已启用
[root@localhost ~]# setenforce 0
//临时关闭 SeLinux
[root@localhost ~]# getenforce
Disabled
//代表 Selinux 当前已关闭
___________________________________________________________________
以上仅为临时关闭 Selinux。如果要设置为永久关闭,还需要如下配置。
[root@localhost ~]# vim /etc/sysconfig/selinux
//在如下配置文件中,禁用 Selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#
enforcing - SELinux security policy is enforced.
#
permissive - SELinux prints warnings instead of enforcing.
#
disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#
targeted - Targeted processes are protected,
#
minimum - Modification of targeted policy. Only selected processes are protected.
#
mls - Multi Level Security protection.
SELINUXTYPE=targeted
___________________________________________________________________
使用上面命令将 Selinux 设置为 disabled 后,保存且退出,即为永久关闭 Selinux
确认 Selinux 已关闭后,执行如下命令,设置 openvpn 开机启动。
[root@localhost openvpn]# systemctl -f enable openvpn@server.service
//设置开机启动
[root@localhost ~]# systemctl start openvpn@server.service
//启动服务
[root@localhost ~]# systemctl status openvpn@server.service
//查看服务状态,显示已启动
● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On
server
Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2020-03-29 18:35:26 CST; 4s ago
Main PID: 2967 (openvpn)
Status: "Initialization Sequence Completed"
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─2967 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
___________________________________________________________________

11.OpenVPN 客户端配置

OpenVPN 客户端配置的步骤如下。
(1)OpenVPN 客户端安装
OpenVPN 客户端可在如下网址下载:
https://pencil.lynchj.com/2020/01/02/pei-zhi-openvpn-client/#Windows788110
根据需要选择 Windows7 或者 Windows10 的客户端进行下载。下载后,双击进行安装,
所有选项全部默认即可。如图 4.7 所示,直至安装完成。
4.7 OpenVPN 客户端安装
(2)OpenVPN 客户端配置
OpenVPN 服务器上,将/etc/openvpn/目录下的 client.confta.key /root/client/
录下的 ca.crtclient.key client.crt 共计五个文件复制到客户端计算机的 C:/Program
Files/OpenVPN/config 目录下。然后,将 client.conf 重命名为 client.ovpn,用文本编辑器
编辑 client.ovpn,如下所示。
client
//保持默认设置
dev tun
proto udp
remote 192.168.190.132 1194
//修改为 OpenVPN 服务端地址
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
//去掉注释,修改为 OpenVPN 服务端一致配置
verb 3
//以上大多为默认配置,和服务端配置保持一致,个别未列出的部分保持默认值
___________________________________________________________________
(3)启动 OpenVPN 客户端
在启动客户端连接之前,要先在 OpenVPN Server 上关闭 firewalld 防火墙,命令如下:[root@localhost openvpn]# systemctl stop firewalld
___________________________________________________________________
完成上面的配置后,双击客户端桌面上的“OpenVPN GUI”图标,启动客户端。启动后
在右下角会有一个客户端图标,在上面点右键,右键菜单中点击连接按钮,如图 4.8 所示。
4.8 连接 VPN
点击连接按钮后,弹出如图 4.9 所示的窗口。这里需要输入私钥密码,就是前面创建
客户端证书时设置的密码,本例中密码为 client
4.9 输入私钥密码
输入密码后,没有出现报错信息。此时,右下角的 VPN 客户端图标会变成绿色,代表
连接成功。双击此图标,会弹出 VPN 的连接状态信息,如图 4.10 所示。
4.10 VPN 连接信息
VPN Client 主机上执行 ping 192.168.100.11 命令,测试与 OpenVPN Server 的内
网卡地址的连通性,测试结果已能够 ping 通。在 VPN 客户端执行连接之前是不通的。再次
执行 ping 192.168.100.12 命令,测试与 Web Server 的连通性,测试结果当前无法 ping 通,
如下所示。
C:\Users\client>ping 192.168.100.11
正在 Ping 192.168.100.11 具有 32 字节的数据:
来自 192.168.100.11 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.100.11 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.100.11 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.100.11 的回复: 字节=32 时间=3ms TTL=64
192.168.100.11 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 3ms,平均 = 1ms
C:\Users\client>ping 192.168.100.12
正在 Ping 192.168.100.12 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
192.168.100.12 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失)
___________________________________________________________________
VPN Client Web Server 之间网络目前不通,是因为还需要在 OpenVPN Server
Web Server 上进行一些配置,才能实现到内网的通信。至此,VPN Client OpenVPN
Server 的连接和身份认证已经完成,说明 OpenVPN Server 的基本连接功能已经实现。
12.路由转发和防火墙配置
完成以上的配置以后,还需要在 OpenVPN Server 上进行路由转发和防火墙配置。
(1)配置路由转发
如果将 Linux 系统作为路由或者 VPN 服务,就必须要开启路由转发功能。执行下面的
vim 命令,编辑后保存退出。
[root@localhost openvpn]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //默认为 0,禁止转发,改为 1。如没有本行就直接添加本行代码。
[root@localhost openvpn]# sysctl -p //查看路由转发配置
net.ipv4.ip_forward = 1
__________________________________________________________________
(2)配置防火墙
完成以上配置后,还需要配置 OpenVPN 的防火墙。通过配置 firewall 防火墙策略,开
80 端服务和 OpenVPN 服务(1194 端口),80 用于 VPN 客户端访问内网 Web Server
http 应用,开放 OpenVPN 服务允许 VPN 客户端访问 OpenVPN 服务器,同时还要进行
NAT 配置,命令如下。
[root@localhost ~]# firewall-cmd --zone=public --add-service=openvpn --permanent
//开放 openvpn 服务,允许 VPN 客户端连接,设为永久生效
[root@localhost ~]# firewall-cmd --zone public --add-port=80/tcp --permanent
//开放 80 端口,允许 VPN 客户端访问内网 http 服务,设为永久生效
[root@localhost ~]#firewall-cmd --zone=public --add-masquerade --permanent
//启用动态伪装功能,设为永久生效
[root@localhost ~]firewall-cmd --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24
-j SNAT --to-source 192.168.100.11
//来自 VPN 客户端 10.8.0.0 段的信息全部转换为 OpenVPN 服务器内网卡地址
___________________________________________________________________
OpenVPN 服务器防火墙的配置完成。
13.Web Server 配置
OpenVPN 服务器和客户端都配置好以后,还需要在 Web Server 上配置一条静态路由,
使到达 VPN 客户端的数据包可达,配置命令如下:
[root@localhost ~]# route add -net 10.8.0.0/24 gw 192.168.100.11 //临时添加静态路由
[root@localhost ~]# vim /etc/sysconfig/static-routes
//永久添加静态路由,写入如下代码
any net 10.8.0.0/24 gw 192.168.100.11
___________________________________________________________________
以上静态路由建议采用永久添加方式,重启后路由仍然存在。
14.VPN 客户端访问内网测试
完成以上配置后,在 VPN 客户端已连接成功状态下,再次 ping 内网 Web Server 的地
192.168.100.12,发现已能 ping 通。命令如下所示。
C:\Users\lixiangqian>ping 192.168.100.12正在 Ping 192.168.100.12 具有 32 字节的数据:
来自 192.168.100.12 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.100.12 的回复: 字节=32 时间=2ms TTL=63
来自 192.168.100.12 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.100.12 的回复: 字节=32 时间=2ms TTL=63
192.168.100.12 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 2ms,平均 = 1ms
___________________________________________________________________
打开浏览器访问 Web Server IP,已经能够看到 apache 的测试页面,如图 4.11
示。
4.11 VPN 客户端访问的内网 Web 服务页面
提示:如果能 ping 通但无法访问此页面,需要确认在 Web Server 上是否已开启 Apache
服务,并确认防火墙端口是否已开放。
4.3 边界防护基础知识
边界防护是网络安全的一个重要环境,在过去等保 1.0 以及现在的等保 2.0 标准中,都
有明确的要求。
4.3.1 边界防护的等保 2.0 要求
在等保 2.0 标准通用要求的“ 9.1.3.1 边界防护中,具体内容如下:
a.应保证跨越边界的访问和数据流通过边界设备提供的受控接口进行通信;
b.应能够对非授权设备私自联到内部网络的行为进行检查或限制;
c.应能够对内部用户非授权联到外部网络的行为进行检查或限制;
d.应限制无线网络的使用,保证无线网络通过受控的边界设备接入内部网络;
e.应能够在发现非授权设备私自联到内部网络的行为或内部用户非授权联到外部网络
的行为时,对其进行有效阻断;
f.应采用可信验证机制对接入到网络中的设备进行可信验证,保证接入网络的设备真实
可信。
以上 ef 项为等保四级要求;bcd 项为等保三级、四级共同要求;a 项为等保一、
二、三、四级共同要求。
测评的对象是:网闸、防火墙、路由器、交换机和无线接入网关设备等提供访问控制功
能的设备或相关组件。
4.3.2 企业边界防护架构
企业的网络安全边界防护,需要从企业整体网络架构上进行统筹规划。下面以一个云数
据中心的边界防护架构为例进行讲解。图 4.12 是一个典型的企业云数据中心安全防护架构
图。
4.12 企业云数据中心安全防护架构图
在图 4.12 中,企业云架构共分成:云边界接入区、安全管理区、安全监测区、核心资
源区这样四大部分构成。
其中云边界接入区提供互联网、公有云专线、办公网等接入职能;核心资源区主要提供
核心计算资源承载;安全管理区提供漏洞扫描、保垒机管理、身份认证等管理职能;安全监
测区提供流量审计相关职能,比如:网络行为审计、未知威胁防护、入侵检测、数据库审计
等安全防护功能。
1.云边界接入区
云边界接入区是整个云数据中心的边界防护的最外层,是数据中心的外部边界。所以抗
DDOS 产品、防火墙、IPS(入侵防御系统)、LLB(链路负载均衡),以及 GAP(网闸)
WAFWeb 应用防火墙)都在这一区域。
(1)抗 DDOS 产品
DDOS 分布式拒绝服务攻击,通过大量占用用户资源,使用户无法提供正常服务。目
DDOS 仍是互联网最主要的安全威胁。抗 DDoS 产品是为移动云用户提供的抵御 DDoS
攻击的安全服务,针对用户的流量进行实时采集和分析,通过流量清洗设备对 DDoS 攻击
流量进行过滤。目前阿里云、腾讯云等都有抗 DDOS 产品,主流的安全厂商,如:绿盟、启
明星辰等,也都有类似的产品或技术支持。
(2)IPS
IPSIntrusion Prevention System)入侵防御系统,是一种安全防御技术。通过分析
网络流量,检测入侵(包括缓冲区溢出攻击、木马、蠕虫等),并通过一定的响应方式,实
时地中止入侵行为,保护企业信息系统和网络架构免受侵害。
(3)LLB
LLB(链路负载均衡)有两大主要功能:
a.出向的负载均衡
当内网用户访问因特网上的服务器时,链路负载均衡设备能够自动帮助用户选择、判断
多条接入链路中状态最好的一条,加快了用户访问速度、及服务响应时间,屏蔽了由于南北
电信互访、网络响应速度过慢、带宽资源无法充分利用带来的一系列问题。一旦其中任何一
条链路发生问题时,另外一条健康的链路将承载所有网络访问,而当发生问题的链路恢复正
常后,网络服务自动恢复负载均衡状态。
比如:当企业在办公网边缘部署了 LLB 设备,员工在访问互联网的时候,LLB 会帮员
工选择一个最佳链路,保障访问性能。这就是 LLB 设备的出向负载均衡功能。
b.入向的负载均衡
当外网用户访问内部服务器时,可以通过对链路状态的检测动态判断用户请求 DNS IP
地址,这样众多的外网用户在访问同一服务器域名时 LLB 设备将根据用户访问请求判断用
户所属区域,根据定义的服务策略(轮询、加权轮询、最快响应时间、源地址路由)等,返
回根据策略定义的最优链路服务地址。
比如:用户在访问百度网站的时候,百度的 LLB 设备会根据用户所属区域,优先返回
最佳的服务器地址,保障最佳的性能,这就是 LLB 设备的入向负载均衡起到的功能。
(3)GAP(网闸)
GAP 源于英文的“Air Gap”GAP 技术是一种通过专用硬件使两个或者两个以上的网络
在不连通的情况下,实现安全数据传输和资源共享的技术。GAP 中文名字叫做安全隔离网
闸,它采用独特的硬件设计,能够显著地提高内部用户网络的安全强度。
网闸系统一般由 3 部分构成:内网处理主机、专用隔离硬件、外网处理主机。
网闸是在两个不同安全域之间,通过协议转换的手段,以信息摆渡的方式实现数据交换,
且只有被系统明确要求传输的信息才可以通过。其信息流一般为通用应用服务。其信息流一
般为通用应用服务。网闸的“字取自于船闸的意思,在信息摆渡的过程中内外网(上下游)
从未发生物理连接,所以网闸产品必须要有至少两套主机和一个专用物理隔离硬件才可完成
物理隔离任务。
网闸的一个基本特征,就是内网与外网永远不连接,内网和外网在同一时间最多只有一
个同隔离设备建立数据连接(可以是两个都不连接,但不能两个都连接)。网闸一般用于连
接两个需要严格隔离的网络,但又需要满足其交换数据的需求。
比如:许多企业的内外网隔离,就广泛采用网闸的技术,满足其隔离和交换数据同时存
在的需求。如图 4.13 所示。
4.13 网闸隔离内外网
保证数据传输手段主要有以下两种:
协议阻断:网闸在传输接收到的数据包时,需拆除协议包头信息,然后将应用层数
据按私有协议重新封装分片,这样能保证所有网络攻击只能到达外网。
专有协议检测模块:网闸的数据传输都是基于应用层代理,对于支持的应用层协议,
都有相应的传输模块。每个模块只处理对应的应用层数据请求,且根据协议的特性
对数据本身进行内容检测、过滤等操作,保证数据的安全性。如图 4.14 H3C
司的一款真实的网闸系统设备。
4.14 H3C GAP2000 安全隔离与信息交换系统
(4)WAF(Web 应用防火墙)
Web 应用防火墙(Web Application Firewall,简称: WAF)。Web 应用防火墙是通
过执行一系列针对 HTTP/HTTPS 的安全策略来专门为 Web 应用提供保护的一款产品。Web 应用防火墙可以防止 Web 应用免受各种常见攻击,比如 SQL 注入,跨站脚本漏
洞(XSS)等。WAF 也能够监测并过滤掉某些可能让应用遭受 DOS(拒绝服务)攻击的流
量。WAF 会在 HTTP 流量抵达应用服务器之前检测可疑访问,同时,它们也能防止从 Web
应用获取某些未经授权的数据。
(5)MCE
Multi-CE 指多实例 CE(用户网络边界设备)的简称,具有 MCE 功能的交换机可以在
BGP/MPLS VPN 组网应用中承担多个 VPN 实例的 CE 功能,减少用户网络设备的投入。
2.安全管理区
安全管理区除了区域间隔离外,还要求带外管理,即独立的管理流量。保证流量传输的
安全,同时其他区域流量产生异常也不会影响到最基本的管理职能。
安全管理区的漏洞扫描系统、堡垒机系统、认证系统担负着集中管理统一认证的职责和
安全评估服务。
3.安全监测区
网络行为审计、未知威胁防护、入侵检测、数据库审计等职能除了存在独立的安全区外,
还采用镜像流量技术,即生产环境的流量会复制一会注入这个区域,这样,这些审计、检测
的行为就不会消耗生产环境的带宽。
4.核心资源区
核心资源区承载着云数据中心最核心的数据资源,包括计算资源池、数据库区和安全资
源池三部分。计算资源池、数据库区使用 VXLAN 技术实现区域边界的安全隔离,安全资源
池又提供了 vIPS(虚拟 IPS)、vLB(虚拟负载均衡)、vFW(虚拟防火墙)保护整个核心
资源区的边界安全和均衡负载。
5.大二层网络
居于核心网络的是大二层网络。在云环境中,云主机的动态迁移会成为一种经常出现的
场景。为了保证迁移时业务不中断,就要求在迁移时,不仅云主机的 IP 地址不变,而且运
行状态也必须保持原状(例如 TCP 会话状态),所以云主机的动态迁移只能在同一个二层
域中进行,而不能跨二层域迁移。而传统的二三层网络架构限制了虚拟机的动态迁移只能在
一个较小的局部范围内进行,应用受到了极大的限制。
为了打破这种限制,实现云主机的大范围甚至跨地域的动态迁移,就要求把 VM 迁移可
能涉及的所有服务器都纳入同一个二层网络域,这样才能实现 VM 的大范围无障碍迁移。
本章主要讲解传输安全中的 VPN 技术以及边界防护的安全架构知识。
其中前半部分首先讲解了加密技术的基本原理;然后重点介绍了 OpenVPN 这款开源
VPN 软件产品。OpenVPN 具有成本低、安全可靠、兼容性好、跨平台、易于安装实现等
特点,是一款企业部署 VPN系统,实现远程访问的优秀工具。学习过程中既要掌握 OpenVPN
配置部署操作,又要深刻理解配置过程中使用到的证书加密等非对称加密技术原理知识。
边界防护主要在网络架构层面,介绍了企业实现边界防护的主流技术。边界防护是一个
范围较宽的概念,在企业的网络和信息安全工作实施过程中,需要使用到防火墙、WAF
I
PS
GAP 等多种技术产品,也需要考虑到外网、内网、DMZ 以及部门之间等多种不同层次及类
别的安全区域边界防护。需要多种安全技术产品的综合使用,不同层级的多层防护,才能满
足企业复杂网络系统环境下的安全需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux运维老纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值