网络安全综合设计作业


VPN实验

【实验描述】

虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。

本实验内容共包含3个子任务,分别是:

1
2
3
任务一 使用IP命令搭建基于隧道的虚拟专有网络
任务二 使用加密工具OpenSSL创建加密密钥
任务三 SSL VPN之OpenVPN的安装配置

【实验目的】

1
2
3
掌握如何搭建基于隧道的虚拟专有网络
掌握加密算法了解及其应用
掌握如何安装部署配置openvpn服务端与客户端

【实验工具】

  • IP
  • Openssl
  • Ipsec
  • ovs-vsctl
  • openvpn
  • tcpdump
  • sysctl
  • modprobe
  • iptables

【实验环境】

操作系统IP地址服务器角色登录账户密码
Windows2012192.168.0.11操作机用户名:administrator;密码:Simplexue123
centos7_1192.168.1.11目标机用户名:root;密码:Simplexue123
centos7_2192.168.2.11目标机用户名:administrator;密码:Simplexue123

主要操作对象是Windows2012,其他两台电脑是远程连接。

任务一、使用IP命令搭建基于隧道的虚拟专有网络

【任务描述】

本实验任务基于真实企业网络环境,在两台不同网络环境的环境中,主要完成以下内容:

实现两不同网络内的内网通过ip隧道使之互通并检测。

【实验目标】

了解企业网络环境如何使不同网络之间内网互通。
掌握ip 命令的使用。
掌握虚拟私有网络实现方法。

【实验工具】

  • ip
  • modprobe

【操作步骤】

操作步骤

1.双击桌面Xshell5图标,在弹出的界面登陆主机192.168.1.11和192.168.2.11这两台主机.密码为Simplexue123

image-20241120110436700

(注意这里是直接在命令行SSH链接,不是上面的新建))

分别修改主机名:

1
2
# hostnamectl set-hostname vpn1
# hostnamectl set-hostname vpn2

image-20241120111108850

image-20241120111121238

2.vpn1和vpn2主机分别加载gre内核模块并检查

加载ip_gre内核模块

1
[root@vpn1 ~]# modprobe ip_gre

查询ip_gre模块是否加载,如图所示已正常加载

1
[root@vpn1 ~]# lsmod | grep gre

image-20241120113459564

图1-4

3.配置tunnel(GRE隧道)使它们互通
vpn1创建一个GRE类型隧道设备gre1, 并设置对端IP为192.168.2.11。隧道数据包将被从192.168.1.11也就是本地IP地址发起,其TTL字段被设置为255。隧道设备分配的IP地址为10.10.10.1,掩码为255.255.255.0。
3.1 创建GRE类型隧道设备gre1,并验证是否添加成功

1
2
[root@vpn1 ~] ip tunnel add gre1 mode gre remote 192.168.2.11 local 192.168.1.11 ttl 255
[root@vpn1 ~] ip a | grep gre1

3.2启动gre1并分配ip地址10.10.10.1,检测是否添加并启动。

1
2
3
# ip link set gre1 up
# ip addr add 10.10.10.1/24 dev gre1
# ip a | grep gre1

3.3 查看隧道状态

嗯添加成功(看5)

3.3 vpn2创建一个GRE类型隧道设备gre1, 并设置对端IP为192.168.1.11。隧道数据包将被从192.168.2.11也就是本地IP地址发起,其TTL字段被设置为255。隧道设备分配的IP地址为10.10.10.2,掩码为255.255.255.0。
操作步骤如下

1
2
3
4
# ip tunnel add gre1 mode gre remote 192.168.1.11 local 192.168.2.11 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2/24 dev gre1
# ip a | grep gre1

3.4测试隧道是否通

ping检测

image-20241120114930830

连接成功

4.卸载GRE模块

1
# rmmod ip_gre

image-20241120115020661

任务二、使用加密工具OpenSSL创建加密密钥

【任务描述】

本实验主要是用来了解openssl 的使用及原理,通过本实验可以了解如何实现秘钥证书管理、对称加密和非对称加密。

【实验目标】

1.了解openssl加密解密原理。
2.掌握openssl如何生成公钥私钥,以及公私钥之间的相互转化。
3.掌握如何用openssl生成带密码的公钥私钥,以及之间的加密解密。
4.掌握如何生成带签名信息的证书。

【实验工具】

  • openssl

【操作步骤】

1.查看openssl命令的基本帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@vpn1 ~]# openssl genrsa -
//密钥位数,建议1024及以上
usage: genrsa [args] [numbits]
//生成的密钥使用des方式进行加密
-des encrypt the generated key with DES in cbc mode
//生成的密钥使用des3方式进行加密
-des3 encrypt the generated key with DES in ede cbc mode (168 bit key)
-idea encrypt the generated key with IDEA in cbc mode
//生成的密钥还是要seed方式进行
-seed encrypt PEM output with cbc seed
//生成的密钥使用aes方式进行加密
-aes128, -aes192, -aes256 encrypt PEM output with cbc aes
//生成的密钥使用camellia方式进行加密
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
//生成的密钥文件,可从中提取公钥
-out file output the key to 'file
//指定密钥文件的加密口令,可从文件、环境变量、终端等输入
-passout arg output file pass phrase source
//选择指数e的值,默认指定该项,e值为65537
-f4 use F4 (0x10001) for the E value
//选择指数e的值,默认值为65537,使用该选项则指数指定为3
-3 use 3 for the E value
//指定三方加密库或者硬件
-engine e use engine e, possibly a hardware device.
//产生随机数的种子文件
-rand file:file:...
load the file (or the files in the directory) into
the random number generator

img

图2-1

2.生成私钥
2.1生产RSA私钥(无加密)

1
2
[root@vpn1 ~]# openssl genrsa -out rsa_private.key 2048
[root@vpn1 ~]# ll rsa_private.key

image-20241120115610247

图2-2

2.2生成rsa_private.key私钥对应的公钥

1
2
[root@vpn1 ~]# openssl rsa -in rsa_private.key -pubout -out rsa_public.key
[root@vpn1 ~]# ll rsa_public.key

image-20241120115851568

图2-3

3.生成RAS含密码(使用aes256加密)公私钥

# 其中 passout 代替shell 进行密码输入,否则会提示输入密码

1
[root@vpn1 ~]# openssl genrsa -aes256 -passout pass:simple -out rsa_aes_private.key 2048

# 生成其对应的公钥,需要输入密码,其中 pass 代替shell 进行密码输入,否则会提示输入密码;

1
2
[root@vpn1 ~]# openssl rsa -in rsa_aes_private.key -passin pass:simple -pubout -out rsa_aes_public.key
[root@vpn1 ~]# ll rsa_*

image-20241120120127132

4.加密与非加密之间的转换

1
2
3
4
# 私钥转非加密
openssl rsa -in rsa_aes_private.key -passin pass:simple -out rsa_private.key
# 私钥转加密
openssl rsa -in rsa_private.key -aes256 -passout pass:simple -out rsa_aes_private.key

image-20241120120331196

图2-5

5.生成自签名证书

# 生成 RSA 私钥和自签名证书
# req是证书请求的子命令,-newkey rsa:2048 -keyout private_key.pem 表示生成私钥(PKCS8格式),-nodes 表示私钥不加密,若不带参数将提示输入密码;-x509表示输出证书,-days365 为有效期,此后根据提示输入证书拥有者信息;(如果不知道输入后命令填什么,往下看)

1
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

# 若执行自动输入,可使用-subj选项:

1
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=BJ/L=BJ/O=simpleedu/OU=edu/CN=simple/emailAddress=simple@simpleedu.com"

# 使用 已有RSA 私钥生成自签名证书
# -new 指生成证书请求,加上-x509 表示直接输出证书,-key 指定私钥文件,其余选项与上述命令相同

1
openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt

根据提示输入相应的信息即可

image-20241120121124422

图2-6

6.生成签名请求及CA 签名

1
2
3
# 使用 RSA私钥生成 CSR 签名请求
openssl genrsa -aes256 -passout pass:simpleedu -out server.key 2048
openssl req -new -key server.key -out server.csr

* 此时生成的 csr签名请求文件可提交至 CA进行签发 *

image-20241120121548175

图2-7

任务三、SSL VPN之OpenVPN的安装配置

【任务描述】

本实验任务基于真实企业网络环境,在两台台服务器搭建的典型企业局域网环境中,主要完成以下内容:
(1)搭建openvpn服务端与客户端。
(2)实现客户端可访问服务端机器

【实验目标】

1.了解企业级别openvpn的使用场景。
2.掌握企业级别openvpn搭建和使用。
3.掌握openvpn客户端与服务端的搭建配置。

【实验工具】

  • openvpn

【操作步骤】

1.在vpn1机器安装openvpn并验证

1
2
[root@vpn1 ~]# yum clean all
[root@vpn1 ~]# yum install openvpn -y

image-20241120121712258

图3-1

1
[root@vpn1 ~]# rpm -qa | grep openvpn

image-20241120121735662

图3-2

2.修改openvpn的配置文件server.conf配置文件的内容如下
2.1拷贝模板文件到配置文件目录下

1
2
[root@vpn1 ~]# cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn/
[root@vpn1 ~]# ls /etc/openvpn/server.conf

image-20241120121953392

图3-3

2.2 修改openvpn服务端的配置文件 /etc/openvpn/server.conf

1
[root@vpn1 ~]# vim /etc/openvpn/server.conf

2.2.1 指定TCP协议(使用TCP协议如果连接上VPN后网络很慢,可以更改成使用UDP协议)

img

图3-4

2.2.2打开这三行注释,配置DNS(实验环境无法连通外网,可不配置)

img

图3-5

2.2.3 设置启动用户

img

图3-6

2.2.4 注释掉 explicit-exit-notify 1

img

图3-7

3.安装密钥生成软件

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

image-20241120122314507

图3-8

4.准备配置证书文件
4.1拷贝文件到/etc/openvpn

1
2
[root@vpn1 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/
[root@vpn1 ~]# ls /etc/openvpn/easy-rsa/

image-20241120122400478

图3-9

4.2配置生成证书的环境变量.并使之生效 shell [root@vpn1 ~]# vim /etc/openvpn/easy-rsa/2.0/vars # 现只修改如下几条,可根据自己情况进行修改 shell export KEY_COUNTRY="CN" export KEY_PROVINCE="BJ" export KEY_CITY="BEIJING" export KEY_ORG="SimpleEdu" export KEY_EMAIL="simpleedu@simple.com" export KEY_OU="MyOrganizationalUnit"

和刚刚那些配置对应即可

img

图3-10

使配置的环境变量生效 shell [root@vpn1 ~]# cd /etc/openvpn/easy-rsa/2.0/ [root@vpn1 2.0]# source vars

image-20241120122850180

图3-11

4.3 根据提示先删除所有,再根据自己情况进行修改(默认回车即可) shell [root@vpn1 2.0]# cd /etc/openvpn/easy-rsa/2.0/ [root@vpn1 2.0]# source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys [root@vpn1 2.0]# ./clean-all [root@vpn1 2.0]# ./build-ca

image-20241120123158852

图3-12

5.建服务端的证书 创建通用名(common name)为”server”的证书文件,交互输入自己的值,回车键进行,在提示输入密码的地方,设置一个密码如simple123 shell [root@vpn1 2.0]# ./build-key-server server

img

图3-13

image-20241120123301904

图3-14

生成防攻击的key文件(防DDos攻击、UDP淹没等恶意攻击) shell [root@vpn1 2.0]# openvpn --genkey --secret keys/ta.key [root@vpn1 2.0]# ll keys/ta.key

image-20241120123358006

图3-15

6.建客户端证书 6.1.创建密钥文件,耗时间一分钟左右 shell [root@vpn1 2.0]# ./build-dh

image-20241120131539146

图3-16

可以看到有一个dh2048.pem的文件产生

image-20241120131650389

图3-17

6.2拷贝密钥认证文件到配置文件目录下 shell [root@vpn1 2.0]# cd /etc/openvpn/easy-rsa/2.0/keys/ [root@vpn1 keys]# cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn

image-20241120131844822

图3-18

6.3创建一个通用名(common name)为 client的客户端证书,交互输入自己的值,默认回车键进行 shell [root@vpn1 keys]# cd .. [root@vpn1 2.0]# ./build-key client [root@vpn1 2.0]# ll keys/client.*

img

图3-19

image-20241120132117071

图3-20

7.启动并检查 7.1 启动openvpn服务并设置为开机自启动

# 启动openvpn服务

1
[root@vpn1 ~]# systemctl start openvpn@server.service

# 设置开机自启动

1
[root@vpn1 ~]# systemctl enable openvpn@server.service

# 查看状态

1
[root@vpn1 ~]# systemctl status openvpn@server.service

# 检查是否启动

1
[root@vpn1 ~]# netstat -lntup | grep openvpn

# 如下所示表示正常启动

1
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      8870/openvpn

image-20241120132559904

图3-21

8.客户端(vpn2)登录测试 8.1 在客户端安装openvpn shell [root@vpn2 ~]# yum install openvpn -y 8.2 在vpn1端把生产文件拷贝到客户端 shell [root@vpn1 keys]# cd /etc/openvpn/easy-rsa/2.0/keys/ # 密码为Simplexue123 shell [root@vpn1 keys]# scp ca.crt client.crt client.key ta.key 192.168.2.11:/etc/openvpn/client/

image-20241120141932239

图3-22

8.3 编辑客户端配置文件 shell [root@vpn2 ~]# vim /etc/openvpn/client/client.conf client dev tun proto tcp remote 192.168.1.11 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/client.crt key /etc/openvpn/client/client.key tls-auth /etc/openvpn/client/ta.key 1 cipher AES-256-CBC verb 3 mute 20

image-20241120142221594

图3-23

8.4 启动openvpn客户端并挂后台运行,并可实时查看其日志。 shell [root@vpn2 client]# cd /etc/openvpn/client/ [root@vpn2 client]# openvpn /etc/openvpn/client/client.conf &

image-20241120142305023

图3-24

8.5 查看网卡信息,得知已获取到ip shell [root@vpn2 ~]# ip addr show tun0

image-20241120142700800

图3-25

8.6 测试是否可使用 shell [root@vpn2 client]# ping 10.8.0.1

image-20241120142723774

图3-26

8.7 openvpn nat配置 shell [root@vpn1 ~]# iptables -t nat -A POSTROUTING -s 10.8.0.1/24 -j MASQUERADE

image-20241120142829634

图3-27

在vpn2上测试 shell [root@vpn2 ~]# ping -c 1 www.baidu.com

img

image-20241120142941102

图3-28

注:实验环境不能外网, 访问百度只是为了验证策略 vpn1上验证策略(哭了,差点以为坏了

img

图3-29

8.8 关闭服务 shell [root@vpn1 ~]# pkill openvpn [root@vpn2 ~]# pkill openvpn

思考题

(1) 简述GRE VPN的作用和特点

作用: GRE(Generic Routing Encapsulation)VPN 是一种隧道协议,用于在公共网络(如互联网)上建立点对点的虚拟专用网络(VPN)。GRE VPN可以封装任意类型的网络协议数据包(如IPv4、IPv6等),并通过隧道将这些数据包从一端传输到另一端。它常用于跨网络、跨地域的连接,可以帮助实现不同网络之间的通信。

特点

  • 简单性:GRE协议非常简单,它通过封装原始数据包的方式传输数据,不做加密、压缩或其他复杂操作。
  • 支持多种协议:GRE VPN能够封装几乎所有类型的协议,适合多种网络协议之间的通信。
  • 无加密:GRE本身不提供加密功能,因此通常需要与其他技术(如IPsec)结合使用,以确保数据安全。
  • 点对点连接:GRE VPN是基于点对点连接的,适用于两点间的虚拟专用网络。
  • 可扩展性:GRE允许通过多个隧道将不同地点的网络连接起来,可以支持广泛的网络拓扑结构。

(2) 简述OpenSSL中使用的核心密码算法

OpenSSL是一个广泛使用的开源加密库,支持各种加密算法,用于实现安全通信。其核心密码算法包括:

  1. 对称加密算法
    • AES(Advanced Encryption Standard):广泛使用的对称加密算法,具有128、192、256位密钥长度,提供高安全性和性能。
    • DES(Data Encryption Standard):一种较旧的对称加密算法,已不再推荐使用,密钥长度为56位。
    • 3DES(Triple DES):DES的三重加密版本,比DES更安全,但性能较低。
  2. 非对称加密算法
    • RSA:基于大数因数分解问题,广泛应用于数字签名和密钥交换中。
    • DSA(Digital Signature Algorithm):用于数字签名的算法,与RSA类似,但主要用于签名而非加密。
  3. 哈希算法
    • SHA(Secure Hash Algorithm):如SHA-1、SHA-256、SHA-512等,用于生成固定长度的散列值,保证数据的完整性。
    • MD5:一种较旧的哈希算法,因碰撞漏洞不再推荐用于安全场景。
  4. 密钥交换算法
    • Diffie-Hellman(DH):用于安全的密钥交换算法,允许两方在不直接交换密钥的情况下生成共享密钥。
  5. 数字签名算法
    • ECDSA(Elliptic Curve Digital Signature Algorithm):基于椭圆曲线的数字签名算法,提供较小密钥尺寸的高安全性。

OpenSSL通过这些算法实现数据的加密、解密、签名验证、完整性校验等安全功能,确保通信过程中的机密性、完整性和认证性。

(3) 简述GRE VPN和OpenVPN的区别

GRE VPN和OpenVPN的主要区别

  1. 协议基础
    • GRE VPN:基于GRE协议,是一种隧道协议,主要用于封装和传输数据包,并不提供加密和身份验证功能。它可以与其他协议(如IPsec)结合,增加安全性。
    • OpenVPN:基于SSL/TLS协议,通常用于通过加密和身份验证创建安全的点对点连接,内置了强大的加密机制和身份认证方式。
  2. 安全性
    • GRE VPN:GRE本身不提供任何加密或身份认证功能。需要与IPsec等其他技术结合来提供安全性。
    • OpenVPN自带加密和认证功能,支持强大的SSL/TLS加密,能够确保数据的机密性和完整性。
  3. 灵活性和兼容性
    • GRE VPN:GRE协议主要封装IP包,能够支持不同类型的协议,具有较强的灵活性,适合不同网络间的通信。但由于它没有内建加密,通常用于封装不需要加密的数据流。
    • OpenVPN:OpenVPN主要使用TLS/SSL协议,适合需要高度安全性和身份认证的场景,支持多种加密算法和协议,能够穿透NAT(网络地址转换)防火墙。
  4. 性能和复杂性
    • GRE VPN由于其本身较为简单,性能较高,适用于不需要加密的场景。
    • OpenVPN:由于内建加密和身份验证,处理过程复杂,可能会稍微降低性能,但提供了更强的安全性。
  5. 使用场景
    • GRE VPN:适合于跨网络、跨地域的连接,需要支持多种协议封装和灵活的网络拓扑结构,通常与IPsec一起使用以确保安全性。
    • OpenVPN:适合需要高安全性、穿透防火墙或NAT的VPN场景,尤其适用于远程办公、跨平台连接等场景。

总的来说,GRE VPN主要侧重于协议封装和数据传输,而OpenVPN则侧重于提供加密、身份认证和安全连接,因此在使用时,选择哪种方案取决于具体的安全要求和网络架构。


文章作者: W3nL0u
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 W3nL0u !
  目录