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