seedlab实验防火墙攻击
一、实验目标
1、学习使用防火墙工作原理
2、了解数据包过滤器,状态防火墙,应用防火墙等
3、学会一些防火墙绕过方式
二、实验原理
本实验的学习目标是让学生通过玩防火墙软件并实现简化的数据包
过滤防火墙来了解防火墙如何工作。防火墙有几种类型。在本实验中,
我们重点介绍两种类型,数据包筛选器和应用程序防火墙。
数据包过滤器通过检查数据包来起作用;如果数据包与数据包过滤器
的规则集匹配,则数据包过滤器将丢弃数据包或将其转发,具体取决
于规则的内容。数据包过滤器通常是无状态的;它们仅基于该数据包
中包含的信息过滤每个数据包,而无需注意数据包是否为现有流量的
一部分。数据包过滤器通常结合使用数据包的源地址和目标地址,其
协议以及端口号(对于TCP 和UDP 通信)。
应用防火墙在应用层工作。广泛使用的应用程序防火墙是Web 代理,
它主要用于Web 流量的出口过滤。在本实验中,学生将同时使用两种
类型的防火墙,并通过实施某些关键功能来了解防火墙的工作原理。
三、实验步骤及运行结果
Task1、Using Firewal
此任务都是在A 下做的。
首先阻止A telnet 连接B:
首先A 是可以连接B 的:
之后输入指令:
意思就是禁掉目的IP 为10.0.2.11 的端口为23 的tcp 报文。
等待一分钟后连接不上:
之后阻止B 连接A:
首先B 是可以连接A 的:
之后在A 上输入指令:
意思就是禁掉源IP 为10.0.2.11 且端口为23 的报文。
此时,等待一段时间之后,无法连接上。
之后,阻止A 连接某网站。
首先,程序可以访问百度网站:
之后输入指令:
39.156.66.18 即为该网站IP,可以使用ping 得到。
禁用掉发送往该IP 的目的端口为443(https 协议)的数据包。
之后再次访问百度:
无法登录,阻止成功。
Task2: Implementing a Simple Firewall
使用LKM 和Netfilter 来实现内核加载模块。
设定过滤规则为:
丢弃21,22,23 端口的数据包即禁止telnet,ssh,ftp 服务
禁止10.0.2.11,10.0.2.7 的ICMP 数据包,即无法ping 通这两台主
机。一共五条规则。
代码为
1 |
|
代码写完后,需要使用make 来编译内核模块:
编译完毕后,载入内核中:
之后使用telnet 连接,ssh 连接:
等待几分钟发现无法连接。说明telnet,ssh 已被禁掉。
发现ftp 已被禁掉。
ping 向设定的两台主机,发现都已经被禁止ping 了。
但是依旧可以向其他IP ping。
之后,卸载该模块,发现telnet 重用。
发现ssh 恢复
发现ftp 重用恢复。
Ping 这两台主机也可以ping 通,unreachable 仅仅是没开主机而已,
不再像之前的被禁止了。
Task3: Evading Egress Filtering
本任务:
内部主机A:10.0.2.4(中间转发主机)
外部主机B:10.0.2.11
内部主机C:10.0.2.1
首先在A 上设定两条规则
1、禁止外部主机的telnet 连接
在本任务中,即禁用掉10.0.2.11 的telnet 连接。
类似task1,
此时便说明已经无法连接。
2、禁用向某IP 的流量,即禁止访问某网站
类似task1,禁止访问百度:
Task 3.a: Telnet to Machine B through the firewall
首先在外部主机B 中执行如下命令,以建立它8000 端口到A 的SSH
端口间建立一条SSH 隧道。这条隧道把B 的8000 端口接收到的数据
9
转发到C 的23 端口上。即:
建立隧道之后,在B telnet 连接本地8000 端口即可成功登陆C:
观察IP,为C 的IP:10.0.2.1
此时绕过防火墙成功。
通过wireshark 抓包可看出:
外部主机B 先和A 通过SSH 通信,之后的telnet 的包全部都是在内
部A 和C 之间产生的,A 会把B 的请求发给C,C 以为是A 的请求,
因为C 已知与A 通信,之后A 再把结果返回给B。
Task 3.b: Connect to 百度 using SSH Tunnel
使用动态端口转发
首先建立一条本地9000 端口到外部主机的一条SSH 隧道,但不指定
IP,而是在浏览器去设置访问的代理为localhost:9000.此处和静态
代理不同,web 代理仅仅转发web 数据,而在浏览器设置代理是在
TCP/IP 层,比前一种方法更通用。
问题1、之后就可以使用本地代理访问百度了:
问题2、断开ssh,清空缓存,刷新页面:
显然,无法访问。
问题3、再次连接ssh,并访问网站,观察现象
显然,再次访问成功
问题4、解释现象,为什么可以绕过:
抓包可以看到,内网主机并没有和网站进行过交互,便无法被防火墙
检测。内网主机与外网主机进行交互,与百度交互的是外网主机。由
外网主机把信息带回给内网。
Task4: Evading Ingress Filtering
先在内部主机A 搞防火墙,禁止外界访问80 与22 端口,即禁掉http
和ssh 服务。
即外部主机无法连接该主机的WEBserver 和ssh.
因为我是有A 的控制权限的,所以可以在A 建立一个反向的隧道
输入指令如下:
即将内部主机向外部主机建立ssh 连接,并且把10.0.2.11 的8000
端口的数据发向本机的80 端口
之后在本主机进行telnet 连接本地8000 端口,即可使用内部主机的
web 服务,即http 服务。
绕过成功。
通过wireshark 抓包得:
建立连接时:
先在本地两个端口发送数据包,之后8000 端口将数据发送到
10.0.2.4 的22 端口,即使用之前的ssh 进行连接,之后数据返回,
再次本机通信。
http 请求时:
在最后回显时,发现使用了http 协议,使用成功。
- 本文作者: 李小混
- 本文链接: https://lixiaohun.github.io/post/7.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!