20252812 2025-2026-2 《网络攻防实践》实践五报告
20252812 2025-2026-2 《网络攻防实践》实践五报告
1.实践内容
1.1 防火墙技术概述
从技术上说,防火墙属于网络上的访问控制机制,通过在网络安全域间建立安全控制点,对通过的网络传输数据进行检查,根据安全需求和策略设置决定是否允许流量通过防火墙,进而保护网络安全域免受非法访问和破坏。网络安全管理员要根据安全需求合理设计安全策略与规则,使得防火墙的功能能够得到充分发挥。但要注意防火墙也存在缺陷,例如无法防护来自网络内部的攻击。
1.1.1 iptables概述
netfiler/iptables组合是Linux系统普遍采用的防火墙技术解决方案,其中netfilter是内核中实现的防火墙模块,而iptables是应用态防火墙管理工具。iptables为用户提供了配置netfilter规则的命令行接口,其语法为:iptables [-t table] command [match] [target]。-t指定配置规则所在的表。command部分用于插入规则、将规则添加到链的末尾、删除规则等。match部分指定数据包所应该具有的特征。target部分指定对于规则所匹配到的数据包应该执行什么操作。
1.2 Snort概述
在Linux系统中,可以通过源码包安装Snort。用源码包安装时,要依次执行./configure、make、make install。对于安装,有一个前提是要解决源码包依赖的问题,例如必须安装libpcap、libpcre等源码包。安装Snort后,要通过snort.conf配置它,我们可以在/etc/snort/下找到此文件。我们一般需要配置HOME_NET、EXTERNAL_NET、HTTP_PORTS等参数。Snort有嗅探器、数据包记录器、网络入侵检测系统三种使用模式。在嗅探器模式下,Snort发挥的作用仅仅是从网络上读取数据包,并将数据包形成的流显示在终端上。在数据包记录器模式下,Snort会将捕获到的数据包记录在硬盘上。如果采用的是网络入侵检测系统模式,Snort会从网络数据流中分析攻击行为,并输出日志和报警。
1.3 实践内容概述
1.3.1 配置防火墙
通过配置Linux系统中的iptables或者Windows系统自带的防火墙,完成一些任务,并进行测试。
1.3.2 动手实践Snort
使用Snort对指定的pcap文件进行入侵检测,并获得报警日志文件。
1.3.3 分析蜜网
打开实验一用到的蜜网,分析蜜网是如何利用防火墙和入侵检测技术实现对于攻击数据的捕获和控制需求的。
2.实践过程
2.1 配置防火墙
2.1.1 过滤ICMP包
这一部分实验任务是通过配置防火墙,使主机不接收ping报文。我的计划是通过在Kali虚拟机上配置iptables规则,使得seed虚拟机ping不通Kali,从而完成实验任务。Kali的IP地址是192.168.173.68,seed虚拟机的IP地址是192.168.173.67。首先在Kali上用iptables -L检查规则,可以发现当前没有规则。

让seed虚拟机ping Kali,发现能ping通。

在Kali终端输入iptables -A INPUT -p icmp -j DROP。-A表示将一条规则附加到链的末尾。-j DROP表示当数据包与规则匹配时,阻塞该数据包,不做其他处理。-p后跟协议类型,-p icmp表示此规则用于匹配ICMP数据包,INPUT指定发送到本地协议栈的数据包。

在seed虚拟机上ping Kali时,发现ping不通了,似乎传输的25个ping包都丢失了,说明规则配置有效。

上述步骤结束后,执行iptables -F清除所有规则。
2.1.2 限制访问
在这一部分,要完成的任务是允许特定IP地址访问主机的某一网络服务,而其他的IP地址无法访问此网络服务。我的计划是这样:metasploitable_ubuntu运行着telnet、FTP等服务,先开始kali和seed虚拟机都能访问metasploitable_ubuntu的所有服务,但是我通过配置metasploitable_ubuntu的防火墙,使得只有kali能访问其telnet服务,而且Kali也访问不了别的服务。首先,metasploitable_ubuntu的iptables里面没有任何规则,我用Kali可以访问到其FTP服务。metasploitable_ubuntu、seed、Kali的IP地址分别是192.168.173.66、192.168.173.67、192.168.173.68。

Kali也可以访问metasploitable_ubuntu的telnet服务。

seed虚拟机此时也可以访问metasploitable_ubuntu的telnet、FTP服务。


接下来我配置metasploitable_ubuntu的iptables。先执行iptables -A INPUT -p tcp -s 192.168.173.68 --dport 23 -j ACCEPT。-A表示将一条规则附加到链的末尾。INPUT指定发送至本地协议栈的数据包。-p指定协议类型。-s指定数据包的源IP地址。--dport指定目的端口号。-j ACCEPT表明匹配成功时将接受对应数据包。整条命令的意思是当收到来自192.168.173.68:23的TCP数据包时,就收下它。随后执行iptables -A INPUT -j DROP。-j DROP表示当数据包与规则匹配时,阻塞该数据包,不做其他处理。INPUT指定发送至本地协议栈的数据包。-A表示将一条规则附加到链的末尾。如果一个数据包不符合“是来自192.168.173.68:23的TCP数据包”,就会匹配规则“iptables -A INPUT -j DROP”,从而被丢弃。执行这两条命令后,只有Kali才能访问metasploitable_ubuntu的telnet服务了,Kali访问不了其他服务。而其他主机不能访问metasploitable_ubuntu的任何服务。

seed虚拟机既不能访问metasploitable_ubuntu的telnet服务,也不能访问metasploitable_ubuntu的FTP服务。

Kali虚拟机可以访问metasploitable_ubuntu的telnet服务,但不能访问metasploitable_ubuntu的FTP服务。

以上测试结果说明对于metasploitable_ubuntu的防火墙配置达到了我的目的:只有Kali才能访问metasploitable_ubuntu的telnet服务了,Kali访问不了其他服务。而其他主机不能访问metasploitable_ubuntu的任何服务。
2.2 通过Snort进行一些动手实践
我的Kali虚拟机上已经安装好了Snort。我用的Snort是Snort3,配置文件的名字不叫snort.conf,而是叫snort.lua。可以通过snort.lua配置snort。

我按照我的需求修改snort.lua,enable_builtin_rules = true应该是表示让内置的Kali规则变有效,rules后面的双方括号内“include /etc/snort/rules/local.rules”表示让local.rules中的规则起作用。当分析pcap文件时,snort就会参照local.rules的内容,将警示信息输出到告警日志内。

设置alert_json,花括号内的内容用于告诉snort当告警日志采用alert_json格式时的设置。“file=true”应该是表示要将告警信息输出到文件里,而fields后面的单引号内的内容则指定了输出的json告警日志包含的字段。timestamp指时间信息,pkt_num是数据包编号,src_ap是源IP地址、源端口号,dst_ap是目的IP地址、目的端口号,msg为告警提示信息。按这样设置好alert_json格式后,指定让Snort生成alert_json格式的报警日志时,Snort就能以明文形式输出我能看懂的日志了。完成这些设置后,保存snort.lua。

打开local.rules,添加两条报警规则,分别是对TCP SYN扫描与TCP FIN扫描报警。然后保存local.rules。

把王老师提供的listen.pcap更名为9l.pcap并放到/root中。在终端执行命令:snort -r /root/9l.pcap -c /etc/snort/snort.lua -A alert_json -l /root/N6u > Ge.txt。-r用于从离线的pcap文件读取网络日志数据源,-c指定Snort的配置文件,-A指定报警日志格式,我将报警日志格式设置为了在snort.lua中设置好的alert_json格式。-l用于指定输出告警日志的目录,这里将这个目录设置为了/root/N6u。最后的“> Ge.txt”用于将读取pcap文件产生的一般输出定向到Ge.txt,这样能避免终端出现大量文字。

回车以后,过了半分钟,命令就被执行完毕了,我发现Snort输出了/root/N6u/alert_json.txt这个报警日志。打开后,其中的内容多是对SYN扫描的报警信息。每条日志前有一个序号。msg字段是对报警原因的描述。NMAP possible SYN scan就是指疑似用Nmap开展了TCP SYN扫描。

打开Ge.txt,里面包含Snort分析9l.pcap以及进行入侵检测的结果。Ge.txt表明Snort检测出的攻击有arp_spoof、back_orifice、http_inspect等。arp_spoof是ARP欺骗的意思,Snort一共发现了20份进行ARP欺骗的报文。back_orifice是建立后门的意思,Snort发现了三个尝试建立后门的数据包。http_inspect是HTTP检测的意思,其意思应该是指探测靶机的HTTP服务。根据Ge.txt,攻击机进行HTTP检测时,总共发送了六个请求,包含五个get请求和一个选项请求。在探测的整个过程中,至多有三个并存的会话。

Ge.txt里面还包含对整个pcap文件里数据包的统计、对端口扫描的分析、对telnet和DNS等其他方面的分析等。
2.3 分析配置规则
蜜网上的IPS(入侵防御系统)叫Snort_inline。在菜单中可以找到开启Snort_inline的选项。

Snort_inline是以内联模式进行配置和使用的Snort。对于通过的数据包,Snort_inline一旦发现符合规则,就可以丢弃或阻断这些数据包。在iptables规则内添加一条简单的iptables -A FORWARD -j QUEUE就能让Snort_inline负责所有经过网桥,且由系统进行路由转发的数据包,Snort_inline会对这些数据包进行检查,并根据检查结果决定是否阻断通信。在蜜网网关的/etc/snort_inline/rules中有很多规则文件,Snort_inline运行时,若发现数据包和规则匹配,则会丢弃数据包,并阻断相关会话。Snort_inline就是这样完成对攻击数据包的控制的。从名称判断,这些规则有检测网页对应的PHP文件是否正常的规则、检测SQL服务是否正常的规则等。

蜜网网关的IDS(入侵检测系统)叫Snort,/etc/snort/rules/里面有相关规则文件。蜜网的Snort在运行时,会按照这些规则在指定的或者默认目录中输出报警日志,报警日志会包含捕获到的攻击数据包的情况。

从名称判断,Snort的告警规则包含判断POP3服务出现异常的规则、判断RPC服务中出现入侵迹象的规则、判断TFTP服务存在异常的规则等。蜜网的Snort也可被作为正常嗅探器使用,实时捕获VMnet1与VMnet8之间传输的所有数据包,并显示在终端上。蜜网网关的防火墙是iptables,可以在iptables中配置入站、出站规则,从而实现对攻击数据的控制。输入iptables -L,可以看到好几页配置规则。

配置规则有很多条链构成,主要的三条链是INPUT、FORWARD、OUTPUT,这三条链分别包含涉及入站、转发、出站的丢弃规则。此外还有icmpHandler等链。规则的内容比较复杂,有的指定HTTPS、NTP、SSH等应用层协议,有的指定eth0、eth1等网络接口,还有的要根据流量处理数据包。蜜网的防火墙对通过的数据包综合协议、IP地址、流量、网络接口等信息判断是否存在攻击嫌疑,阻拦有攻击嫌疑的数据包,从而达到对攻击数据的控制目的。
3.学习中遇到的问题及解决
- 问题1:用ifconfig查询到metasploitable_ubuntu的IP地址是192.168.173.114,但是Kali和seed虚拟机都ping不通192.168.173.114。但是metasploitable_ubuntu能ping通Kali。
- 问题1解决方案:在VMnet8上用Wireshark抓取数据包分析原因。发现metasploitable_ubuntu能ping通Kali时用的IP地址是192.168.173.66,说明metasploitable_ubuntu的IP地址莫名其妙地改变了。让Kali ping 192.168.173.66,发现能ping通了。
- 问题2:先执行“iptables -P INPUT -j DROP”,再执行“iptables -A INPUT -p tcp -s 192.168.173.68 --dport 23 -j ACCEPT”会让192.168.173.68访问不了metasploitable_ubuntu的任何服务。
- 问题2解决方案:把“iptables -P INPUT -j DROP”中的-P改为-A,使之能被添加到规则链末尾。要先执行“iptables -A INPUT -p tcp -s 192.168.173.68 --dport 23 -j ACCEPT”,再执行“iptables -A INPUT -j DROP”,这样一来metasploitable_ubuntu收到来自192.168.173.68:23的数据包时,会先执行规则链中的第一条规则,从而让192.168.173.68能访问metasploitable_ubuntu的telnet服务。
4.实践总结
对本次实践,一开始我看人家的实验报告时觉得容易,但实际在自己做实验时感觉难。主要是因为我想严格按老师要求完成实验。例如其他很多同学在用Snort分析pcap文件后没有输出有内容的告警日志。我觉得老师应该是希望我的Snort输出告警日志的,所以我通过修改snort.lua、添加Snort规则使得Snort输出告警日志了。在实践的第三步中,老师要求要分析IPS,蜜网的IPS是Snort_inline,很多同学都没有分析Snort_inline,于是我自己研究了蜜网的Snort_inline。
此次实验使我意识到入侵检测系统能实时监测TCP报文段是否存在端口扫描迹象,以及分析SSH、RPC、Telnet等协议的通信是否安全,对于确保主机安全有重要地位。我觉得我平常使用的Windows11也该安装一个入侵检测系统,从而在我访问网页、使用微信时,对潜在的威胁实时预警。

浙公网安备 33010602011771号