当前位置: 代码迷 >> 综合 >> (SEED-Lab) Linux Firewall Exploration Lab
  详细解决方案

(SEED-Lab) Linux Firewall Exploration Lab

热度:84   发布时间:2023-11-21 15:50:17.0

(SEED-Lab) Linux Firewall Exploration Lab

欢迎大家访问我的GitHub博客

https://lunan0320.cn

文章目录

  • (SEED-Lab) Linux Firewall Exploration Lab
  • 一、实验目标
  • 二、实验原理
  • 三、实验过程
    • Task 1: Using Firewall
      • 1、Prevent A from doing telnet to Machine B
      • 2、Prevent B from doing telnet to Machine A.
      • 3、Prevent A from visiting an external web site
    • Task 2: Implementing a Simple Firewall
      • 1、Netfilter禁止A telnet B
      • 2、Netfilter禁止B telnet A
      • 3、Netfilter禁止A 连接外部网站
      • 4、Netfilter禁止B对A的ping请求
      • 5、Netfilter禁止主机B向主机A的80端口发送UDP数据包
    • Task 3: Evading Egress Filtering
      • 1、禁止Telnet外部主机
      • 2、禁止访问特定网站
      • 3、Task 3.a: Telnet to Machine B through the fifirewall
      • 4、Task 3.b: Connect to www.edu.cn using SSH Tunnel
    • Task 4: Evading Ingress Filtering
  • 四、参考文献

一、实验目标

?了解防火墙的工作原理
?掌握包过滤防火墙的基本原理和方法
?使用SSH tunnels绕过防火墙
?学会使用防火墙的基本方法
?学习使用Netfilter工具

二、实验原理

专注于数据包过滤器。数据包过滤器检查数据包,并根据防火墙规则决定是丢弃还是转发数据包。数据包过滤器通常是无状态的;它们只根据该数据包中包含的信息来过滤每个数据包,而不注意一个数据包是否是现有流量流的一部分。
包过滤器通常组合使用包的源地址和目标地址、协议,对于TCP和UDP流量,还使用端口号。

三、实验过程

表格中所示,是两台主机及其IP地址。
Host IP
Machine_A 10.0.2.6
Machine_B 10.0.2.8
Machine_C 10.0.2.5

Task 1: Using Firewall

1、Prevent A from doing telnet to Machine B

首先是在Machine_A上禁止去telnet Machine_B。
在这里插入图片描述
此处使用iptables的包过滤机制。
设置规则是对于所有的输出数据包,查看其目的IP是否是10.0.2.8(Machine_B),使用的协议是否是TCP协议,目的端口是否是23。
如果满足上述规则,则drop该数据包。
此时,再在Machine_A中尝试去telnet Machine_B就会发现已经失效了。
这是因为数据包在到达防火墙的时候就已经被丢弃了,根本没有发出去。防火墙的作用就起到了。
在这里插入图片描述

2、Prevent B from doing telnet to Machine A.

此时是禁止B去telnetA,因此也可在A中完成。
在A还未禁止B的访问时候,尝试用B去telnet A,发现是成功的。
在这里插入图片描述
接着加入防火墙规则到ip tables中。
规则如下:
禁止源地址是10.0.2.8的主机通过TCP协议,到目的端口23的数据包要丢弃掉。
在这里插入图片描述
此时再次尝试,在B中去telnet A,发现是行不通的,说明在A上的防火墙起到了作用。
在这里插入图片描述

3、Prevent A from visiting an external web site

在禁止A访问外部网站之前,可以很容易访问www.baidu.com
在这里插入图片描述
接着,在A中添加防火墙规则
禁止数据包输出去访问www.baidu.com 的80端口且协议为tcp。
在这里插入图片描述

然后去尝试访问的时候,发现不能攻击成功,仍然可以访问百度。
分析原因之后,发现baidu现在使用的都是https连接,但是https连接走的并不是80端口,因此,即使禁用了80端口,也无济于事。
在这里插入图片描述
于是我尝试去访问www.qq.com并为之建立防火墙机制。
禁止数据包去访问www.qq.com端口为80,协议为tcp
在这里插入图片描述

查看此时的iptables已经多了很多的禁止ip,这就是因为这些大型的服务器往往不只有1个IP地址。
在这里插入图片描述
此时,我再次在A中去访问的时候,就使用的是http://www.qq.com的网址,这样可以避免默认的现在https的访问使得防火墙失效。
可以看到,防火墙成功设置!
在这里插入图片描述

Task 2: Implementing a Simple Firewall

此处需要通过Netfilter实现一个简单的防火墙。需要实现包括Task1中的任务的5条规则。

1、Netfilter禁止A telnet B

	此处我使用的是Guideline 3.2的程序,对此进行了修改得到的。

此时,在A中去telnet B 可以看到访问超时。
在这里插入图片描述

接着在查看B的日志记录,可以看到,B中刚刚设置的防火墙起了作用,成功禁止了A的telnet请求。防火墙设置成功!~
在这里插入图片描述

2、Netfilter禁止B telnet A

首先是在没有设置防火墙的情况下,测试设备B telnet A,如图。
在这里插入图片描述
此处,对于1中的代码只需要稍做修改,将目的端口改为23,在判断地址的时候,判断的是目的IP地址即可。
在这里插入图片描述
对于Makefile文件也只需要小做修改即可。
改变目标文件的对应文件名。
在这里插入图片描述
接着调用make命令对文件编译。
在这里插入图片描述
得到如下几个文件。
在这里插入图片描述
调用insmod命令安装模块
在这里插入图片描述

查询,发现模块已经成功被安装
在这里插入图片描述

此时在B中使用telnet命令到A,一直是Trying状态。
在这里插入图片描述

等待一段时间后,发现连接超时。
在这里插入图片描述
此时去查看内核信息,可以看到,对于B去telnet A的数据包都是被禁止的。也就是说成功搭建了防火墙!
在这里插入图片描述

3、Netfilter禁止A 连接外部网站

此处为了方便,找到的是HTTPS的网站:https://www.edu.cn中国教育网。
在未设置防火墙之前是可成功访问的。
在这里插入图片描述
首先是通过ping命令的方式,获取www.edu.cn的IP地址。
在这里插入图片描述
在书写代码的时候,在代码2的基础上,需要修改目的端口为443,过滤的目的IP地址为202.205.109.205
在这里插入图片描述
修改Makefile的目标文件内容为task2_3.o
在这里插入图片描述

调用make命令编译该文件。
在这里插入图片描述
安装task2_3.ko模块,以及查看模块已经成功被安装。
在这里插入图片描述
此时,当我想要再次访问https://www.edu.cn网站时候,发现已经无法连接了。
在这里插入图片描述
查看后发现,已经禁止了所有的通往www.edu.cn的https连接。说明防火墙搭建成功!
在这里插入图片描述

4、Netfilter禁止B对A的ping请求

修改Makefile文件如下。
在这里插入图片描述

修改代码如下,主要对类型重新设置过滤规则
在这里插入图片描述
在主机B上去执行ping命令,ping 主机A,始终没有成功。
在这里插入图片描述

在主机A上查看记录,发现主机B发来的ICMP包都被禁止了。
说明防火墙设置成功了!
在这里插入图片描述

5、Netfilter禁止主机B向主机A的80端口发送UDP数据包

改写代码,对于数据包的类型和端口改写
在这里插入图片描述

编译代码如下task2_5
在这里插入图片描述
在主机B上向主机A的80端口发送UDP数据包 “hello”
在这里插入图片描述

在主机A的记录种看到如下结果,说明防火墙成功!
在这里插入图片描述

Task 3: Evading Egress Filtering

Machine_A(内部) 10.0.2.6
Machine_B(外部) 10.0.2.8
Machine_C(外部) 10.0.2.5

1、禁止Telnet外部主机

首先在未设置防火墙的情况下,在内部主机A上尝试对外部主机B去执行telnet命令。可以看到,未设置防火墙时是成功登录上去的。
在这里插入图片描述
接着,在内部主机A种设置防火墙。
设置规则:对于从主机发出的数据包,判断是否目的地址10.0.2.8,目的端口23,协议TCP,则丢弃。
在这里插入图片描述
接着,在主机A上继续执行telnet命令,发现已经不再能得到回复数据包。
在这里插入图片描述
使用抓包工具wireshark查看此过程。压根就没有数据包流入流出。这说明数据包在一开始就被防火墙禁止了,根本就没有发出去,因此也得不到外部主机的回复。
在这里插入图片描述
直到在主机A上显示,连接超时。说明防火墙设置成功,成功阻止了内部主机的数据包到达外部主机B的telnet服务。
在这里插入图片描述

2、禁止访问特定网站

此处,同样是访问https://www.edu.cn网站,在未设置防火墙之前,是可以正常访问的。
在这里插入图片描述
通过ping命令,获取www.edu.cn对应的IP地址为202.205.109.205.
在这里插入图片描述
接着通过iptables在主机A上设置防火墙。
规则:对于发出的数据包,判断目的地址是202.205.109.205,
在这里插入图片描述

3、Task 3.a: Telnet to Machine B through the fifirewall

这里使用两台主机建立SHH tunnel。
使得主机A可以绕过防火墙telnet到主机B中。
方式是:

主机A -->B:主机A通过ssh连接建立与主机B端口22的连接,发往主机B,端口23的数据包会先通过tunnel到达主机B的22端口的ssh
server,接着,主机B的ssh server将数据包发送到主机B的telnet server 23端口。

在主机A上执行telnet B命令,发现是不可以的,这是防火墙的作用。
在这里插入图片描述
在主机A上,需要执行命令,目的是打开端口8000,使得建立与10.0.2.8的端口23的ssh tunnel。中间的主机是C 10.0.2.5。
此处,需要有登录主机C的口令方可。
在这里插入图片描述

接着,在主机A上telnet localhost 8000,对主机A的端口8000登录
在这里插入图片描述
查看IP地址,发现已经成功telnet登录主机B
在这里插入图片描述
如图所示,在这个过程中,A与C的访问数据是加密的,流量能够充分得到保护。
在这里插入图片描述

4、Task 3.b: Connect to www.edu.cn using SSH Tunnel

在前面的实验过程中,对www.edu.cn设置了防火墙不允许主机A对其的访问。
此处,需要通过ssh tunnel的方式,建立一条路由链路,使得主机A可以访问www.edu.cn。
此处使用的是动态端口转发机制。
执行ssh命令,打开的是主机A的9000端口,到主机B的tunnel。

在这里插入图片描述

由此,建立了主机A与外部主机B的连接tunnel。
在这里插入图片描述

  1. Run Firefox and go visit the Facebook page. Can you see the Facebook page? Please describe your observation.
    在主机A的firefox中设置网络代理。
    在这里插入图片描述
    此时,再去访问www.edu.cn发现正常访问,成功绕过防火墙!
    在这里插入图片描述
  2. After you get the facebook page, break the SSH tunnel, clear the Firefox cache, and try the connection again. Please describe your observation.
    在断开连接后,先清除firefox的缓存。
    在这里插入图片描述
    接着访问www.edu.cn,发现已经不能再访问该网址。
    在这里插入图片描述
  3. Establish the SSH tunnel again and connect to Facebook. Describe your observation.

如图所示,当再次建立连接的时候,依旧可以正常访问。
在这里插入图片描述
4. Please explain what you have observed, especially on why the SSH tunnel can help bypass the egress fifiltering. You should use Wireshark to see what exactly is happening on the wire. Please describe your observations and explain them using the packets that you have captured.

分析:
主机A通过tunnel的方式与主机B建立了连接,对于主机B使用的是动态端口转发数据包。
此处的主机B相当于是一个中间人,去转发数据包。
主机A无法直接访问网站,但是主机B可以访问网站。主机A的数据包先通过9000端口发送到主机B,接着主机B将数据包发送到网站,并以同样的方式转发回主机A。在主机A与B的交互过程中,数据通过tunnel是加密的,因此访问是安全可行的。
抓包也可看到整个过程,此处显示主机A与主机B之间的交互。
在这里插入图片描述

Task 4: Evading Ingress Filtering

由于主机A可以允许ssh服务到主机B,因此,在主机A上可以建立一个反向tunnel,通过-R指令。
反向隧道:数据从隧道的一端主机B的8000端口流出,隧道的另一端是主机A的80端口
这样就建立了主机A到B的反向隧道,其实也就是相当于为主机B建立了后门隧道。
在这里插入图片描述

在建立反向隧道的过程中抓包分析整个过程,可以看到,已经允许了主机A到B的通信,通过反向隧道,数据也得到了加密的保护。
在这里插入图片描述
接着,在主机B上,作为外部主机,利用在主机A上建立的反向隧道。
直接telnet本地的8000端口,可以看到,已经成功获取到了主机A的80端口发来的数据。绕过了主机A的防火墙的检测系统。
在这里插入图片描述
发送数据的过程抓包如下
在这里插入图片描述

四、参考文献

[1] Linux 直接发送UDP包 - 心灵捕手 - 博客园 (cnblogs.com)
https://www.cnblogs.com/Dennis-mi/articles/6866762.html
[2]
https://blog.csdn.net/daocaokafei/article/details/115364111
[3] Linux内核网络udp数据包发送
https://zhuanlan.zhihu.com/p/357897460
[4] TCP报文( tcp dup ack 、TCP Retransmission)
https://blog.csdn.net/ynchyong/article/details/109110028
[5] linux 内核 hook函数介绍_whatday的专栏-CSDN博客
https://blog.csdn.net/whatday/article/details/101186116
[6] iptables/netfilter命令、实现及利用
https://blog.csdn.net/sealyao/article/details/5934268