(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

(SEED-Lab) Linux Firewall Exploration Lab相关推荐

  1. Linux防火墙实验(iptables)Linux Firewall Exploration Lab

    网络安全课程实验报告 <Linux Firewall Exploration Lab> 目录 **Overview** **Lab Tasks** **Task 1: Using Fire ...

  2. SeedLab10: Linux Firewall Exploration Lab

    防火墙的第一个Lab- 工具: iptables Netfilter ssh隧道 Task 1 学会用iptables就行,全部防回去就行(狗头 要注意都是在主机A上配置 先在A上禁止A telnet ...

  3. SEED-LABS Firewall Exploration Lab

    一.实验目的 这个实验的学习目标有两方面:学习防火墙如何工作,以及为网络建立一个简单的防火墙.学生们将首先实现一个简单的无状态包过滤防火墙,它检查数据包,并根据防火墙规则决定是否丢弃或转发数据包.通过 ...

  4. ARP Cache Poisoning Attack Lab(SEED实验)

    ARP Cache Poisoning Attack Lab(SEED实验) ARP缓存中毒攻击可以诱使受害者主机将报文发向攻击者指定的路由方向,并由此完成诸如中间人攻击等攻击手段.本实验使用scap ...

  5. (SEED-Lab) ARP Cache Poisoning Attack Lab

    (SEED-Lab) ARP Cache Poisoning Attack Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录 (SEED-Lab) ARP ...

  6. Linux的jupyter lab启动,无法从远程的浏览器中访问

    Linux的jupyter lab启动,无法从远程的浏览器中访问 防火墙问题,关闭防火墙 关闭防火墙操作 问题解决! 防火墙问题,关闭防火墙 在网上搜了好长一段时间的解决方案,关于降包的版本都试过了, ...

  7. YOLOv4:目标检测(windows和Linux下Darknet 版本)实施

    YOLOv4:目标检测(windows和Linux下Darknet 版本)实施 YOLOv4 - Neural Networks for Object Detection (Windows and L ...

  8. boost安装(windows、linux)

    boost安装(windows.linux) boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库. boost安装(vs2017+boost_1_64_0+win10) 1.到 ...

  9. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

最新文章

  1. java流程控制图_Java流程控制
  2. ckeditor富文本编辑器的基本配置设置:
  3. 【智能泊车】基于MATLAB的智能泊车算法的仿真
  4. Could not set property 'xxx' of 'class 'xxx' with value 'xxx'
  5. window.btoa
  6. 复杂的c语言,c语言复杂数据类型
  7. 如何获取filecoin_获得Filecoin币有哪些条件?
  8. mfc color 亮度_双十一4K投影仪怎么选?小心别掉“亮度坑” - 电视
  9. LDA(线性判别分析)详解 —— matlab
  10. kvm最小磁盘大于等于5G
  11. 解决MySQL删除和插入数据很慢的问题
  12. 基于Task的异步模式的定义
  13. DelimiterBasedFrameDecoder 自定义分隔符解码器,解决 TCP 粘包
  14. Android基于高德地图poi的仿微信获取位置
  15. 500多套微精品信小程序源码部分带后台,不同行业的源码集合,适合快速开发和自己学习
  16. App Store审核规范
  17. android 金山电池医生,金山电池医生3.0(android版).PDF
  18. 1089. 烽火传递
  19. 我的开源项目:C++ Qt高仿QQ影音视频播放器
  20. 唱吧android逆向加密算法笔记 此文章已做脱敏处理不会对原厂家app安全构成威胁,仅供学习

热门文章

  1. 最终一战柯洁再负AlphaGo,此后再无围棋人机大战
  2. 单片机测钳形电流表_钳形电流表测量原理及使用方法
  3. 安卓软键盘关闭问题详解大全
  4. 微信小程序中view和html中div,WXML:微信小程序版HTML
  5. ZETA与RFID在供应链物流场景中是否可以互补?
  6. Python爬取百度壁纸图片
  7. idea android 真机,IntelliJ IDEA 如何用 真机 测试安卓(Android)App 实战移动端
  8. 为了拿到 Google offer,我做了哪些努力?
  9. css中文字体对应英文写法
  10. “蚁”小见大,数据告诉你《蚁人2》是否值得一看