20212813 2021-2022-2 《网络攻防实践》实践五报告
一、实践内容
1、防火墙
防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。
防火墙可以在网络协议栈的各个层次上实施网络访问控制机制,对网络流量和访问进行检查和控制。防火墙最基本的功能就是控制在计算机网络中不同信任程度网络域之间传送的数据流,例如,公共互联网是不可信任的区域,而内部网络是高度信任的区域,防火墙能够阳断安全策略中禁止的—些网络通信,提供在不同信任水平的网络域之间实施网络安全访问控制,根据最少特权原则保证网络安全性的功能机制。
2、Linux开源防火墙netfilter/iptables介绍
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
对于iptables的详细介绍可以参考这篇博客,这里列出本次实验要使用的一些参数和命令:
参数选项 | 说明 |
---|---|
-A | 在指定链的末尾添加(append)一条新的规则 |
-L | 列出(list)指定链中所有的规则进行查看 |
-F | 清空(flush) |
-P | 设置指定链的默认策略(policy) |
参数选项 | 说明 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给任何回应信息 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息 |
3、入侵检测系统
- 分类:HIDS(基于主机的入侵检测系统)、NIDS(基于网络的入侵检测系统)
- 入侵防御系统IPS/IDS:“即插即用”,无须使用者的干预。
开源网络入侵检测系统Snort
Snort是一个基于libpcap的数据包嗅探并可以作为一个轻量级的网络入侵检测系统(NIDS)。它具有实时数据流量分析和记录IP网络数据包的能力,能够进行协议分析,对网络数据包内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,Snort是开源的入侵检测系统,并具有很好的扩展性和可移植性。
二、实践过程
1.防火墙配置
任务要求:配置Linux操作系统平台上的iptables,和Windows操作系统平台上的个人防火墙,完成如下功能,并进行测试:
(1)过滤ICMP数据包,使得主机不接收Ping包;
(2)只允许特定IP地址(如局域网中的Linux攻击机192.168.200.3),访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址(如Windows攻击机192. 168.200.4)无法访问
Linux操作系统平台
(1)过滤ICMP数据包,使得主机不接收Ping包
打开Kali,首先使用sudo iptables -L
命令查看链中所有的规则,可以看到默认规则:
此时测试Kali(IP:192.168.13.8)与同一局域网下的WinXPAttacker(IP:192.168.13.4)的连通性为正常:
使用sudo iptables -A INPUT -p icmp -j DROP
命令添加一条入站规则,即丢弃ICMP数据包,添加完后使用sudo iptables -L
命令查看添加的规则:
此时再测试与WinXPAttacker的连通性可以发现,没有收到回应,数据包全部丢失:
在此过程中使用Wireshark抓取数据包可以发现,Kali确实向WinXPAttacker发送了ICMP数据包,但是被防火墙拦下:
(2)只允许特定IP地址,访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址无法访问
为了进行测试,首先开启Kali上的FTP服务(21号端口)和telnet服务(23号端口):
然后在WinXPAttacker上分别对这两个服务进行测试,测试正常(省略了SEEDUbuntu这两个服务的测试):
首先使用使用sudo iptables -P INPUT DROP
命令,丢弃所有与INPUT链中任何规则都不匹配的数据包,然后使用sudo iptables -A INPUT -p tcp -s 192.168.13.4 --dport 23 -j ACCEPT
命令添加一条入站规则,即只接受来自IP地址为192.168.13.4的访问23号端口的TCP包:
之后在WinXPAttacker上再对这两个服务进行测试,发现Telnet服务正常,但是FTP服务连接失败:
使用Wireshark捕获数据包能够看到,WinXPAttacker发起了对21号端口的连接请求,但是连接失败:
然后在SEEDUbuntu上对Kali分别进行了ping、Telnet和FTP的测试,均以失败告终,捕获的数据包能够证明连接过程的存在性,但是没有成功:
Windows操作系统平台
(1)过滤ICMP数据包,使得主机不接收Ping包
打开控制面板->系统和安全->防火墙->高级设置->入站规则->新建规则->自定义:
设置将阻止ICMP数据包:
配置结果如下:
之后在Kali(设置为了桥接模式)上对Win10本机进行ping命令测试,发现不能ping通,但是使用Wireshark能够捕获到ICMP数据包:
(2)只允许特定IP地址,访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址无法访问
这个实验在WinXPAttacker上实现
打开控制面板->管理工具->本地安全策略,右键选择“IP安全策略”,创建IP安全策略
具体步骤参考这篇博客,步骤太多,不在这里展示了,这里设置的两个规则,一个是禁止所有源IP到本地IP的TCP数据包,一个是只允许指定IP(Kali)的主机发送TCP23号端口数据包(WinXP开启了telnet服务):
配置好之后,分别使用Kali和SEEDUbuntu对WinXP进行telnet连接测试,结果能够发现Kali能够进行telnet连接而SEEDUbuntu不能:
2.动手实践:Snort
使用Snort对给定pcap文件(第4章中的解码网络扫描任一个pcap文件,之前的实践已经提供了,请在云班课中下载)进行入侵检测,并对检测出的攻击进行说明。在BT4 Linux攻击机或Windows Attacker攻击机上使用Snort,对给定的pcap文件进行入侵检测,获得报警日志。
Snort运行命令提示如下:
①从离线的pcap文件读取网络日志数据源
②在snort.conf中配置明文输出报警日志文件
③指定报警日志log目录(或缺省log目录=/var/log/snort)
使用snort -c /etc/snort/snort.conf -r /listen.pcap -K ascii
命令,从离线的pcap文件读取网络日志数据源:
可以看到TCP数据包占大多数:
snort会在默认目录 /var/log/snort
生成一个日志文件,进入/var/log/snort文件夹中,使用vim alert
可以看到本次攻击是用nmap发起的,其中攻击机IP地址是 172.31.4.178,靶机IP地址是 172.31.4.188 ,还可以看到端口号等信息:
3.分析配置规则
分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则,说明蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求的。
数据控制
使用命令vim /etc/init.d/rc.firewall
可以看到roo在开机启动的过程中iptables的初始化操作:
代码比较长,参考一些之前的资料,先找一下start函数(vim下可以使用/start
进行查找定位),在start函数中
-
首先是create_chains函数,定义了下述程序中使用的规则。BlackList、WhiteList、FenceList和xxxHandler。它们分别用来存储源地址和目的地址黑名单,源地址和目的地址的白名单,源地址和目的地址的防护名单,以及供下述policy使用的各种协议对应的Handler链。
-
接下来通过default_policy、localhost_policy和management_policy创建了不同情况下的三种代理转发模式。
-
接下来进入start程序的正文,通过读取预定义的白名单HwFWWHITE、黑名单HwFWBLACK和防护名单HwFWFENCE,添加相关的规则。
-
最后通过读取类似HwHPOT_PRIV_IP_FOR_NAT和HwHPOT_PUBLIC_IP等文件来导入其他的定义参数。
iptables规则表
使用iptables -L
进行查看(命令行往上翻页可以使用Shift + PgUp
(不管用的话再加一个Fn键)):
- 首先可以看到,与我们作业的方法类似,程序先将已有的表设为policy DROP,后再设置允许通过的相关条件:
- 再文件的后半部分我们可以看到上文提到的xxxHandler,这也验证了上述分析的正确性:
snort实际执行参数
通过命令vim /etc/init.d/snortd
查看相关的运行参数,可以分别看到一些参数的选项,包括实际运行时候的参数。学习一些snort的指令后进行分析,譬如在指定网卡接口后,如果没有其他的参数,将按照默认参数运行。如默认不开启-A模式,使用默认目录的config文件,默认使用eth0、使用二进制模式保存log文件等:
vim /etc/init.d/hw-snort_inline
可以看到Snort_inline运行时参数,-D表示Daemon模式,-c表示读取config文件,-Q表示使用QUEUE模式,-l表示输出log文件的目录,-t表示改变程序执行时所参考的根目录位置:
防火墙、NIDS、NIPS启动
运行命令chkconfig --list|grep [服务]查看服务情况,如果从0~6全是off,那就不自动启动。可以看到防火墙和NIPS(snort_inline)是自动启动的,NIDS要手动启动:
snort规则的升级方式
使用命令vim /etc/honeywall.conf
打开配置文件,找到update variables,可以看到其值为no,不自动更新:
三、学习中遇到的问题及解决
- 问题1:在进行Windows环境下配置防火墙只允许特定IP地址,访问主机的某一网络服务(如FTP、HTTP、SMB),而其他的IP地址无法访问的时候,原本使用的是Win10,但是仅仅配置防火墙规则似乎不太能其作用
- 问题1解决方案:通过找资料,发现需要配置IP安全策略,Win10下也没有找到配置的地方,所以用WinXP完成了这个实验。
四、实践总结
本次实践主要学习防火墙、IDS、IPS的运行机制、原理以及配置规则等内容,通过动手实践防火墙配置以及分析蜜网网关的防火墙和IDS/IPS配置规则,对于其原理和实现细节有了初步的了解。