hugo/content/posts/ex4.md
2022-04-06 18:20:57 +08:00

326 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
title = "Ex4"
categories = ["网络安全实验"]
draft = false
author = "Logic"
+++
## 实验过程 {#实验过程}
### 任务一 {#任务一}
双击桌面Xshell5图标在弹出的界面登陆主机192.168.1.11和192.168.2.11这两台主机.
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405TxkNea.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04050wlYRk.png" >}}
分别修改主机名:
```shell
hostnamectl set-hostname vpn1
hostnamectl set-hostname vpn2
```
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04050crxmG.png" >}}
重新登陆两台主机后如下图
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405oi9VQ5.png" >}}
vpn1和vpn2主机分别加载gre内核模块并检查
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405xgQFvC.png" >}}
> 通用路由封装或gre是一种协议用于将使用一个路由协议的数据包封装在另一协议的数据包中。gre是在网络上建立直接点对点连接的一种方法目的是简化单独网络之间的连接。它适用于各种网络层协议。将数据包封装在其他数据包中称为“隧道”。gre隧道通常配置在两个路由器之间每个路由器的作用好比隧道的一端。路由器设置为彼此直接发送和接收 gre数据包。两个路由器之间的任何路由器都不会打开封装的数据包它们仅引用封装数据包外层的标头进行转发。
> ip_gre内核模块是gre通过IPv4隧道的驱动程序
vpn1创建一个GRE类型隧道设备gre1, 并设置对端IP为192.168.2.11。
ip指令用于设置网络设备用于替代ifconfig命令ip tunnel用于建立隧道。mode表示模式为gre设置远端和本地端。ip a用于显示ip地址。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/040510B3Cj.png" >}}
启动gre1并分配ip地址10.10.10.1,检测是否添加并启动
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405AWgwKv.png" >}}
类似的对vpn2主机进行相应的配置
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405puFW5b.png" >}}
测试是否连通
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405lNqMVV.png" >}}
卸载gre模块
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405ICPgN1.png" >}}
### 任务二 {#任务二}
查看openssl命令基本帮助
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04052LODMa.png" >}}
> openssl是一个强大的安全套接字层密码库囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议并提供丰富的应用程序供测试或其它目的使用。 openssl整个软件包大概可以分成三个主要的功能部分SSL协议库、应用程序以及密码算法库。openssl的目录结构自然也是围绕这三个功能部分进行规划的。基本功能有主要的密码算法MD5、SHA、DH、BASE64等等、常用的密钥和证书封装管理功能以及SSL协议并提供了丰富的应用程序供测试或其它目的使用。
产生RSA私钥
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405cvz7dz.png" >}}
这样就生成了2048位的RSA私钥接下来利用生成的私钥生成对应的公钥查看openssl rsa对应的用法
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405trT262.png" >}}
则可见应将私钥文件作为输入文件,选择输出公钥并指定公钥文件。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405Fu4P3g.png" >}}
接下来生成RSA含密码(使用AES-256加密)的公私钥文件生成私钥时只需要指定使用AES-256进行加密并输入相应的密码即可这里把密码设定为simple。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405AI9uzB.png" >}}
同样生成对应的公钥文件,并查看生成的全部秘钥文件
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405FIuJD2.png" >}}
接下来尝试将使用AES-256加密的文件和未使用其加密的文件进行转换
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405JpX1OG.png" >}}
生成自签名证书
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405G4S6Rd.png" >}}
也可使用已有的私钥生成自签名证书,如下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405j0AtId.png" >}}
生成私钥及csr签名请求文件(生成过程中输错了一次密码故产生了错误)
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0405qaSIwD.png" >}}
### 实验三 {#实验三}
在vpn1机器安装openvpn并验证
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406ZbPz2i.png" >}}
拷贝模版配置文件到openvpn的配置文件目录下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Zvf560.png" >}}
修改openvpn服务端的配置文件server.conf。指定使用TCP协议。将UDP注释掉不需要配置DNS因为无法连通外网。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406w79zzB.png" >}}
将openvpn运行的用户设为nobody用户组设为nobody可降低openvpn的权限增强其安全性。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406VNz4um.png" >}}
将explicit-exit-notify 1注释掉以关闭显式退出提示
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406PZcWZK.png" >}}
安装密钥生成软件easy-rsa
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04066Yi8ya.png" >}}
将easy-rsa拷贝到openvpn文件夹下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Yz2aST.png" >}}
配置生成证书的环境变量并使之生效
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406HbkqrQ.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406UJoutO.png" >}}
删除之前的keys并重新生成
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406zFTeXR.png" >}}
创建通用名(common name)为”server”的证书文件并设置密码为simple123。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04060gd4O8.png" >}}
生成防攻击的key文件可以防止DDos攻击UDP淹没等恶意攻击。其实从本质上说就是一个静态密钥文件使用静态密钥文件进行连接相比于证书方式进行连接不需要TLS握手不易被干扰。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406ss9qjC.png" >}}
生成客户端使用的密钥文件
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406hZKHfH.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406iIdFPn.png" >}}
将全部的密钥认证文件拷贝到openvpn的配置文件目录下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406iMTcL5.png" >}}
创建一个通用名(common name)为 client的客户端证书
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04062WlMTb.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04064tfgcG.png" >}}
启动openvpn服务并设置为开机自启动随后查看服务的状态并检查服务对应的端口是否处于监听状态
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406DR4Pz7.png" >}}
服务端配置完成后进行客户端的登陆测试首先在客户端安装openvpn
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406wi0th8.png" >}}
将服务端生成的对应的ca证书和客户端密钥以及连接使用的静态密钥文件通过scp拷贝到客户端
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04065x5iam.png" >}}
配置客户端的配置文件进行连接前的准备设定配置文件中连接的目标机器ip端口需要的密钥文件加密方式重新测试预设log等级等这一部分与服务端配置上大体保持一致。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406OnB3Ut.png" >}}
启动openvpn客户端并挂后台运行并可实时查看其日志。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04067UF246.png" >}}
查看网卡信息查看vpn通道的建立情况
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406OOIR6B.png" >}}
测试是否可用这里ping 10.8.0.1是该ip与vpn连接的目标机ip 10.8.0.5处于同一网段下,故可以连通。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406CSYhPm.png" >}}
在vpn1机器上对openvpn nat进行配置使用的工具是iptablesiptables是一款管理员工具用于IPv4包过滤和NAT转换相关的功能其与netfilter结合可以组成Linux平台下的包过滤防火墙。-t表示指定规则对应的表-A表示向指定的规则链末尾增加一条规则-s则表示源地址-j表示对应的动作这里MASQUERADE表示伪装即用转换后的地址代替之前的地址。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Ju7uf6.png" >}}
在vpn2机器上访问百度进行测试
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Ov4KJw.png" >}}
在vpn1机器上查看对应规则下的数据包
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406CzChHs.png" >}}
在两台机器上关闭openvpn服务
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406GzQ0Zp.png" >}}
### 任务四 {#任务四}
对于vpn1和vpn2调整内核参数开启数据转发关闭icmp重定向并使之生效。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406prsHtf.png" >}}
在vpn1和vpn2上安装openswanlibreswan并验证安装
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406lbe3ZZ.png" >}}
启动服务并检查是否正常。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406wvzdK8.png" >}}
可见服务正常启动。查看openswan监听的端口
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406XvrAGA.png" >}}
可见在监听500和4500端口其中500是用来IKE密钥交换协商4500的NAT-T是nat穿透的。配置ipsecVPN配置首先使用PSK方式进行配置修改ipsec.conf文件在末尾添加如下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Ez81iq.png" >}}
修改vpn1和vpn2的密码配置文件在配置文件末尾添加本机ip允许任意ip连接密码为123
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04069RcB9n.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/04064KOqTu.png" >}}
重新启动服务并验证
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406CS0F8v.png" >}}
可见连接成功。在两台机器上搭建内网网络来进行连通性测试在vpn1上搭建虚拟网络10.0.0.1/24。在vpn2上搭建虚拟网络10.0.1.1/24搭建完成后如下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406yV3W14.png" >}}
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/040610jGiD.png" >}}
在vpn1上ping测试可以成功
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406N1qUiw.png" >}}
现在使用数字签名模式认证在vpn1和vpn2上分别生成一个新的RSA密钥对查看ipsec用法
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406y6Qbwz.png" >}}
其中newhostkey用于生成一个新的rsa认证密钥。我们可以使用 man ipsec newhostkey查看其用法如下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406kswcXM.png" >}}
使用newhostkey生成一个新的认证密钥
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Potr2b.png" >}}
记下此时的Key为73c6cb9c1166c10f4d242d1b8b2ff602fba43c54
查看本机的认证密钥使用showhostkey同样可用man ipsec shwohostkey查看其用法
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406lrpABy.png" >}}
查看本机密钥为
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406SgTLDY.png" >}}
为了方便将密钥放入ipsec配置文件中我们将密钥输出到文件中
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Aib0k5.png" >}}
再通过vim同时打开两个文件复制密钥到ipsec.conf中将文件发至vpn2并在vpn2上进行同样操作最终如下
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Z9eVPf.png" >}}
重启ipsec服务并打开连接显示IPsec SA established tunnel mode则连接成功
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406dfHELc.png" >}}
在vpn1上ping测试可以成功
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406kPecJY.png" >}}
清除内网,停止服务
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406Canxn6.png" >}}
### 任务五 {#任务五}
在vpn1和vpn2分别安装openvswitch并启动服务
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406fSQevV.png" >}}
可见安装并启动成功在vpn1上添加名为br0的网桥并给网桥分配一个ip
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406HizoA5.png" >}}
可见添加及分配ip成功在vpn2上同样添加br0网桥并分配ip
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406KejOfw.png" >}}
在VPN1上设置VXLAN远端ip设置为VPN2能对外通信的br0的ip。
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406YJoFTn.png" >}}
在VPN2上进行同样的设置
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406cqWPh4.png" >}}
在VPN1上ping 10.1.0.2
{{< figure src="https://testingcf.jsdelivr.net/gh/game-loader/picbase@master/uPic/0406qblPEZ.png" >}}
可以Ping通说明连接成功